Codebase list telepathy-glib / c9e4fdc
Imported Upstream version 0.11.7 Simon McVittie 13 years ago
199 changed file(s) with 17571 addition(s) and 2886 deletion(s). Raw diff Collapse all Expand all
0 commit 977adb56a56b6f3e16e3371dad7b1c18ddf9ebb3
1 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2 Date: 2010-06-14 17:30:09 +0100
3
4 Prepare version 0.11.7
5
6 commit b534d0b62243093722a657eeda3f12ff0efcec20
7 Merge: 45ec4df 24cd3de
8 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
9 Date: 2010-06-14 17:12:29 +0100
10
11 Merge branch 'deprecate'
12
13 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
14
15 commit 45ec4dfc71488396472f7f4b9f5e224887b2efbc
16 Merge: c3a9461 24132ab
17 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
18 Date: 2010-06-14 16:57:00 +0100
19
20 Merge branch 'spec'
21
22 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
23
24 commit 24132ab8a233a3d89043925b4bb49ae46ea6b785
25 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
26 Date: 2010-06-14 16:09:53 +0100
27
28 TpChannel: use the official type name for ChatStateMap
29
30 Related to fd.o #24882.
31
32 commit 50c74a8c797680dd374f7d836299d789ae6d9476
33 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
34 Date: 2010-06-14 15:37:45 +0100
35
36 tests: make it easier to add to the TESTS_ENVIRONMENT
37
38 commit db84b3e5cf1dbdf543ea64b863a92b681e79c095
39 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
40 Date: 2010-06-14 16:00:45 +0100
41
42 test-account: test tp_account_get_detailed_error()
43
44 commit 244a13b413dd9bdf1ba53bb0f9a018e0fdd59191
45 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
46 Date: 2010-06-14 16:07:01 +0100
47
48 tp_account_get_detailed_error: add "C binding" for connection-error etc.
49
50 commit ba3eda3e2512adb4c71aafef502433ea7e05b060
51 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
52 Date: 2010-06-14 16:05:52 +0100
53
54 TpAccount: add connection-error, connection-error-details properties
55
56 commit aa16b89d7a09bade2a7e066c9c691e1d7ac1584f
57 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
58 Date: 2010-06-14 16:05:18 +0100
59
60 TpAccount: track the Connection's detailed error and emit it in status-changed
61
62 commit aa1c9b2d8194a1ba7aeae29671c6a42f62066f1e
63 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
64 Date: 2010-06-14 14:01:41 +0100
65
66 _tp_account_update: also emit status-changed, etc., if the reason changed
67
68 commit 07e5f4276b2ff53a813f14ba741e32a4f607d65a
69 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
70 Date: 2010-06-14 15:02:51 +0100
71
72 TpAccount::status-changed: use pedantically correct marshaller
73
74 commit 7c5ef97cc0037c1a9676fb9526ab839f60d8265c
75 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
76 Date: 2010-06-14 14:59:24 +0100
77
78 _tp_connection_status_reason_to_gerror: upgrade from static to internal
79
80 Also return the D-Bus error name, as well as the GError.
81
82 commit 4c7b4facf385df1ac4a268962b6ab0fb23fcd76d
83 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
84 Date: 2010-06-14 14:11:54 +0100
85
86 tp_connection_get_detailed_error: fix a memory leak
87
88 If we were invalidated without a detailed error, we'd assign a new empty
89 hash table to a const out parameter, leaking it.
90
91 Instead, keep creating the empty hash table lazily, but stash it in priv
92 so it will be freed in our destructor.
93
94 commit f65b6723c26dac11e320ac380ce3aec0fb2e71be
95 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
96 Date: 2010-06-14 13:32:37 +0100
97
98 Generate code for Anonymity and ServicePoint, and document their sections
99
100 commit e088736bbff3ac9054ec405412350d468c0304df
101 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
102 Date: 2010-06-14 12:55:57 +0100
103
104 Update to spec 0.19.7
105
106 - update spec/ directory
107 - add WouldBreakAnonymity error to errors.h and documentation
108 - add Chat_State_Map type to documentation
109 - add Account.ConnectionError, Account.ConnectionErrorDetails,
110 ChatState.ChatStates properties to documentation
111
112 commit c3a9461c1a047bd84253a7226dcde21bdbc31d68
113 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
114 Date: 2010-06-14 12:03:01 +0100
115
116 contact.c: expunge trailing spaces
117
118 commit 505ee5e976a75a3fa9477d329ce0e04eb8327bfe
119 Author: Morten Mjelva <morten.mjelva@gmail.com>
120 Date: 2010-06-11 19:04:56 +0200
121
122 Make TpContact emit a presence-changed signal
123
124 This adds a signal to TpContact that is issued whenever the PresencesChanged
125 signal on org.freedesktop.Telepathy.Connection.SimplePresence is issued for
126 the contact in question.
127 The signal holds the new presence information for the contact.
128
129 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
130
131 commit 24cd3ded4bff685452d9dc7315e1dc02b1aa53e9
132 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
133 Date: 2010-06-09 11:11:49 +0100
134
135 Deprecate TpChannelFactoryIface
136
137 commit 7c6620ec7ecc85247f9d2edb7e65aba56e65e74d
138 Merge: 56790b3 fc8f062
139 Author: Eitan Isaacson <eitan@monotonous.org>
140 Date: 2010-06-08 10:30:31 -0700
141
142 Merge branch 'compilation-fix'
143
144 commit fc8f062238cc8ad582a2a86fb7bf02cbce8d3408
145 Author: Eitan Isaacson <eitan@monotonous.org>
146 Date: 2010-06-08 09:22:40 -0700
147
148 Fix compilation error in tests/lib introduced in bafa0cc.
149
150 commit 56790b3c97d88d4deaccd818b2eac33ab2640d8a
151 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
152 Date: 2010-06-08 13:55:36 +0200
153
154 tp_channel_dispatch_operation_handle_with_async: @handler is allow none
155
156 commit bafa0cc99381266fdba6681cf26615d5fa4bb89d
157 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
158 Date: 2010-05-25 16:29:05 +0200
159
160 add tp_channel_dispatch_operation_handle_with_time_{async,finish} (fdo #28241)
161
162 commit 9c525222e7e6bb3624163d2cfd61cae695a8f52f
163 Author: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
164 Date: 2010-05-25 16:28:39 +0200
165
166 simple-cdo: implement HandleWithTime()
167
168 commit c44466d73bc3d0dcd04a0fe9551fff52aa508dda
169 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
170 Date: 2010-06-08 11:32:32 +0100
171
172 Update NEWS so far
173
174 Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
175
176 commit a0af21217cebc0ab9b2673bf7a85252311d8e75b
177 Merge: 3699f7b a00bbfd
178 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
179 Date: 2010-06-07 11:37:48 +0100
180
181 Merge branch 'trivia'
182
183 Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
184
185 commit a00bbfd0fc5331741dda79541021f1a0b073ea19
186 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
187 Date: 2010-06-07 11:36:27 +0100
188
189 Note in tp_verify() documentation that G_STATIC_ASSERT exists
190
191 commit 3699f7bab513b351da7b3a52814220c6d298325b
192 Merge: 9c807e9 aa656f5
193 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
194 Date: 2010-06-07 11:33:57 +0100
195
196 Merge branch 'tp-tests'
197
198 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
199 Reviewed-by: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
200
201 commit 68db85cbafb8495705f943453845c51e37eebfe9
202 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
203 Date: 2010-06-07 11:31:06 +0100
204
205 Use G_STATIC_ASSERT instead of tp_verify()
206
207 commit aa656f5b5380d3a94ae91ece65ea3d4b25ae4b73
208 Merge: 9e1a47b 9c807e9
209 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
210 Date: 2010-06-07 11:15:58 +0100
211
212 Merge branch 'master' into tp-tests
213
214 Conflicts:
215 tests/lib/contacts-conn.c
216 Modified:
217 tests/dbus/contacts.c
218
219 commit 9e1a47b709960f7877a3b8c19c8754058bd057dc
220 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
221 Date: 2010-06-07 11:06:12 +0100
222
223 Fix over-zealous use of sed
224
225 commit 9c807e9968cb5f28c53a59086afb32cfb6644e86
226 Merge: b8e7600 3cf5960
227 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
228 Date: 2010-06-07 10:34:17 +0100
229
230 Merge branch 'test-cleanup'
231
232 Reviewed-by: Travis Reitter <travis.reitter@collabora.co.uk>
233 Conflicts:
234 tests/dbus/contacts.c
235
236 commit 1fe85599688454d138370904d6678e5c73fbc1e9
237 Author: Travis Reitter <travis.reitter@collabora.co.uk>
238 Date: 2010-06-04 20:55:00 -0700
239
240 Add the TpTests namespace to tests/lib/stub-object
241
242 commit 7bc0acbf7bdfe88db3bc7777af5a88dcb2563285
243 Author: Travis Reitter <travis.reitter@collabora.co.uk>
244 Date: 2010-06-04 20:53:33 -0700
245
246 Add the TpTests namespace to tests/lib/simple-manager
247
248 commit edf9f2f557c708d14d49bacb6ff17ed02524d70e
249 Author: Travis Reitter <travis.reitter@collabora.co.uk>
250 Date: 2010-06-04 20:52:06 -0700
251
252 Add the TpTests namespace to tests/lib/simple-client
253
254 commit 4451b3097c9db89c4cd9bad62a1bab5db98924fe
255 Author: Travis Reitter <travis.reitter@collabora.co.uk>
256 Date: 2010-06-04 20:51:00 -0700
257
258 Add the TpTests namespace to tests/lib/simple-channel-dispatch-operation
259
260 commit d68f9c087f9535c0305e8de0bbd35c280935861d
261 Author: Travis Reitter <travis.reitter@collabora.co.uk>
262 Date: 2010-06-04 20:49:41 -0700
263
264 Add the TpTests namespace to tests/lib/simple-account
265
266 commit e940512effe1f58c17ebd8dca474b22807b17e1a
267 Author: Travis Reitter <travis.reitter@collabora.co.uk>
268 Date: 2010-06-04 20:48:03 -0700
269
270 Add the TpTests namespace to tests/lib/simple-account-manager
271
272 commit a9e3691c1fff766831dc23c51fe6223b3de8d60c
273 Author: Travis Reitter <travis.reitter@collabora.co.uk>
274 Date: 2010-06-04 20:46:37 -0700
275
276 Add the TpTests namespace to tests/lib/params-cm
277
278 commit d857cc902d25217c3fc28e1f7bac32f068456c7a
279 Author: Travis Reitter <travis.reitter@collabora.co.uk>
280 Date: 2010-06-04 20:36:18 -0700
281
282 Add the TpTests namespace to tests/lib/bug-19101-conn
283
284 commit 0fe6d558f4b0539f557485c6dc20331176fe48b1
285 Author: Travis Reitter <travis.reitter@collabora.co.uk>
286 Date: 2010-06-04 20:33:30 -0700
287
288 Add the TpTests namespace to tests/lib/textchan-group
289
290 commit d32090f2470947e8b34c2fb20acb8b444a872059
291 Author: Travis Reitter <travis.reitter@collabora.co.uk>
292 Date: 2010-06-04 20:29:23 -0700
293
294 Add the TpTests namespace to tests/lib/textchan-null
295
296 commit 8a64f2d745824a0844bbc118b367ebeee60451fc
297 Author: Travis Reitter <travis.reitter@collabora.co.uk>
298 Date: 2010-06-04 20:21:15 -0700
299
300 Add the TpTests namespace to tests/lib/contacts-conn
301
302 commit feae63b077b68dc89fa4fc6397f8e360e8c9bc6e
303 Author: Travis Reitter <travis.reitter@collabora.co.uk>
304 Date: 2010-06-04 17:37:31 -0700
305
306 Add the TpTests namespace to tests/lib/util
307
308 commit b2c5e1d8cfcd9f84929451102949d723db8a9daa
309 Author: Travis Reitter <travis.reitter@collabora.co.uk>
310 Date: 2010-06-04 16:19:47 -0700
311
312 Add the TpTests namespace to tests/lib/simple-conn
313
314 commit 3b23cb61f89bd561f55a5eb8878652a33c1de40c
315 Author: Travis Reitter <travis.reitter@collabora.co.uk>
316 Date: 2010-06-04 15:34:29 -0700
317
318 Add the TpTests namespace to bug16307-conn
319
320 commit b8e7600acc0dbac7943a08f92e159812bbac485c
321 Author: Xavier Claessens <xclaesse@gmail.com>
322 Date: 2010-06-04 11:49:24 +0200
323
324 Minor doc tweak
325
326 commit b53271f3948a37f1fe93982b741c42a57ec8fd91
327 Author: Xavier Claessens <xclaesse@gmail.com>
328 Date: 2010-06-04 11:29:06 +0200
329
330 Do not leak the GList when getting "contact-info" property
331
332 commit 5c4e8bd33cc8f80cc43779471e5ff1a32713e4cd
333 Merge: a3dadcb b1cf57c
334 Author: Xavier Claessens <xclaesse@gmail.com>
335 Date: 2010-06-04 10:39:48 +0200
336
337 Merge branch 'strv'
338
339 commit a3dadcb2442e5f368a0a515c981d523586502815
340 Author: Xavier Claessens <xclaesse@gmail.com>
341 Date: 2010-06-03 16:19:58 +0200
342
343 Don't leak returned GList container
344
345 commit b1cf57cc44b559f7a5532efb711fe5c04e2053e0
346 Author: Xavier Claessens <xclaesse@gmail.com>
347 Date: 2010-06-03 15:18:10 +0200
348
349 Use GStrv instead of gchar** inside structs
350
351 gchar** is introspected as string, resulting in a runtime segfault. Starting from
352 gobject-introspection 0.6.13, GStrv is recognised and introspected correctly as
353 NULL-terminated array of string.
354
355 commit 5dbbacb56114313ded3f8b2f214b2f0922e21385
356 Author: Xavier Claessens <xclaesse@gmail.com>
357 Date: 2010-06-03 15:01:43 +0200
358
359 Make sure the GCancellable survive long enough for the idle callback
360
361 commit b35b7369ae91709d4dea6fdb9edcbd365153cc5a
362 Author: Xavier Claessens <xclaesse@gmail.com>
363 Date: 2010-06-03 13:06:16 +0200
364
365 Rephrase a bit doc of tp_contact_request_contact_info_async()
366
367 commit fee5a4beb6c1940994e3841dda2a7c899fad6230
368 Author: Xavier Claessens <xclaesse@gmail.com>
369 Date: 2010-06-03 12:02:42 +0200
370
371 Avoid potential deadlock by cancelling RequestContactInfo in an idle callback
372
373 commit 54f7fe648133d4077f73725598e62a93f5df3e83
374 Author: Xavier Claessens <xclaesse@gmail.com>
375 Date: 2010-06-02 19:10:08 +0200
376
377 Document why we can cancel the contact info request
378
379 commit 119109e3763e16875a310007b14b70e864828572
380 Author: Xavier Claessens <xclaesse@gmail.com>
381 Date: 2010-06-02 19:04:52 +0200
382
383 Add test to cancel request of contact info
384
385 commit 907c1480a10977933e7900f11ef963fdd9cf5aea
386 Author: Xavier Claessens <xclaesse@gmail.com>
387 Date: 2010-06-02 19:03:39 +0200
388
389 Make tp_contact_request_contact_info_async() cancellable
390
391 It is wrapping a DBus call with 1 hour timeout, so it's preferable
392 to be able to cancel that call earlier.
393
394 commit b7ce5af0c4c610e92b84dc62764b18102ce5dfd5
395 Author: Xavier Claessens <xclaesse@gmail.com>
396 Date: 2010-06-02 17:25:03 +0200
397
398 Make tp_contact_info_field_spec_new() private
399
400 commit c26392237a842fcbcb6d941a7b1040b6538dea55
401 Author: Xavier Claessens <xclaesse@gmail.com>
402 Date: 2010-06-02 16:17:00 +0200
403
404 Add unit test for RequestContactInfo
405
406 commit b9724c5378d8565bcc3c0f856c5b544c1b282246
407 Author: Xavier Claessens <xclaesse@gmail.com>
408 Date: 2010-06-02 16:13:56 +0200
409
410 Add wrapper API for RequestContactInfo
411
412 commit b57706bd56b5cc9cff74be4b2cc0353ea41ddce4
413 Author: Xavier Claessens <xclaesse@gmail.com>
414 Date: 2010-06-02 12:43:33 +0200
415
416 Force empty GStrv into tp_contact_info_field[_spec]_new()
417
418 commit 0061bea249bb4dbc6c8d79ec5e4cccec58f581c2
419 Author: Xavier Claessens <xclaesse@gmail.com>
420 Date: 2010-06-02 12:33:57 +0200
421
422 Respect the CM order of ContactInfoFields
423
424 commit 91515886e462831c3dbc0adc9609f09038470398
425 Author: Xavier Claessens <xclaesse@gmail.com>
426 Date: 2010-06-02 12:32:51 +0200
427
428 Rename TpContact->priv->info to contact_info
429
430 commit 170ed1849626641bba80fa8c4ef36106e839b941
431 Author: Xavier Claessens <xclaesse@gmail.com>
432 Date: 2010-06-02 12:29:20 +0200
433
434 Minor doc tweak: s/a #TpContactInfoFlags/a set of #TpContactInfoFlags/
435
436 commit 08d2be90d5ae71930de25ed945d14f973e804e0b
437 Author: Xavier Claessens <xclaesse@gmail.com>
438 Date: 2010-06-02 12:28:49 +0200
439
440 Make tp_contact_info_field_copy() and tp_contact_info_field_spec_copy() take const arg.
441
442 commit fa49df049f7277067554a1bd68a4823ef6d44d6f
443 Author: Xavier Claessens <xclaesse@gmail.com>
444 Date: 2010-06-02 12:23:59 +0200
445
446 Make tp_connection_refresh_contact_info() fire-and-forget
447
448 So it does not take a callback, and will just emit "notify:contact-info"
449 once/if a new vCard is fetched from network.
450
451 commit ab9ba231714b9b03e3b0ecd6c2921078740dc41f
452 Author: Xavier Claessens <xclaesse@gmail.com>
453 Date: 2010-06-02 12:07:00 +0200
454
455 Document a bit better @parameters arg
456
457 commit 96b08b289d07f15236fbce7d87773cc4722701c9
458 Author: Xavier Claessens <xclaesse@gmail.com>
459 Date: 2010-06-02 11:58:20 +0200
460
461 Copy the GList container but not its elements
462
463 tp_contact_get_contact_info() and tp_connection_get_contact_info_supported_fields()
464
465 commit 0533ded37271bfb0c91108804835405adc210d55
466 Author: Xavier Claessens <xclaesse@gmail.com>
467 Date: 2010-05-31 00:19:13 +0200
468
469 Skip introspection for _copy and _free of boxed structs.
470
471 commit bbd7db3c3d55bc7255fc3917010b475bd36482cd
472 Author: Xavier Claessens <xclaesse@gmail.com>
473 Date: 2010-05-30 16:54:33 +0200
474
475 Add unit tests for ContactInfo
476
477 commit cf66169ba1140fedcbe436fd1ecc0e0271b342b8
478 Author: Xavier Claessens <xclaesse@gmail.com>
479 Date: 2010-05-30 16:54:00 +0200
480
481 Add ContactInfo support on TpContact
482
483 commit a29c29040335b22836b259e5783128db381db7df
484 Author: Xavier Claessens <xclaesse@gmail.com>
485 Date: 2010-05-30 16:39:19 +0200
486
487 Add ContactInfo support on TpConnection
488
489 commit dc4bb11a62450935dd56656b13883910b0deb4a5
490 Merge: a1a24f9 5808ccc
491 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
492 Date: 2010-06-02 18:42:33 +0100
493
494 Merge branch 'misc'
495
496 Reviewed-by: Xavier Claessens <xclaesse@gmail.com>
497
498 commit 5808cccdd19bebc5bd0e1879e889e697ba297564
499 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
500 Date: 2010-06-02 17:31:10 +0100
501
502 SimpleConnection: reduce simulation delay to zero
503
504 This schedules the connection/disconnection as if they were network events,
505 but without delay, which should speed up 'make check'.
506
507 commit 5da605766a91663841267f3f9209d157ed9bc19e
508 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
509 Date: 2010-06-02 17:46:31 +0100
510
511 test-finalized-in-invalidated-handler: eliminate race condition
512
513 If the service-side connection finished shutting down before the channel
514 was invalidated, the situation under test wouldn't arise, and an assertion
515 failure would occur during cleanup instead.
516
517 This was previously masked by SimpleConnection taking an arbitrary 500ms
518 to finish shutting down.
519
520 commit 9dd445071edd068d1599b588e409d29a51bc6b98
521 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
522 Date: 2010-06-02 17:29:40 +0100
523
524 channelspecific example CM: have a variable simulation delay
525
526 commit 4e6c457dfc6241cd9d6b27edc33e4c56e74c32de
527 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
528 Date: 2010-06-02 17:16:53 +0100
529
530 tp_handle_set_new_from_array: add
531
532 This is analogous to tp_intset_from_array, but the different naming
533 convention produces better gobject-introspection.
534
535 commit a1a24f9df10fe398c7b3774e7f5bd65db4ba375d
536 Author: Xavier Claessens <xclaesse@gmail.com>
537 Date: 2010-06-02 17:32:07 +0200
538
539 Make tp_avatar_requirements_copy() take const arg
540
541 commit 57325a42e044de516dfe6f3be2e53971d71d156c
542 Author: Xavier Claessens <xclaesse@gmail.com>
543 Date: 2010-06-02 12:46:52 +0200
544
545 Force empty GStrv into tp_avatar_requirements_new()
546
547 commit 3cf59602b228dddc91692b1e3e0631283cbde414
548 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
549 Date: 2010-06-01 14:28:25 +0100
550
551 Remove test_connection_run_until_ready
552
553 commit 45cf065b5d7ead1147242eeab0e874d962aa2d87
554 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
555 Date: 2010-06-01 14:37:58 +0100
556
557 Use test_proxy_run_until_prepared instead of test_connection_run_until_ready
558
559 commit 8fdacbbfe5ff6048c470e48a715c133c22fc33cb
560 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
561 Date: 2010-06-01 13:59:52 +0100
562
563 Remove test_connection_manager_run_until_ready
564
565 Also remove test_connection_manager_run_until_readying_fails
566
567 commit c1dbdba854417b8f96b999832c52b642449a4648
568 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
569 Date: 2010-06-01 13:59:25 +0100
570
571 Use test_proxy_run_until_prepared instead of test_connection_manager_run_until_ready
572
573 commit 6740559ac47b51711563b59c98abe0e4306a9e33
574 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
575 Date: 2010-06-01 13:56:22 +0100
576
577 Remove test_connection_run_until_dbus_queue_processed
578
579 commit f87371921e78e8d6ea4fe9f13219dea9adcd741c
580 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
581 Date: 2010-06-01 13:56:06 +0100
582
583 Replace test_connection_run_until_dbus_queue_processed with test_proxy_run_until_dbus_queue_processed
584
585 commit d55cab3d49b0355aa447d7bae21ded1c6e9f2584
586 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
587 Date: 2010-06-01 13:54:14 +0100
588
589 Remove MYASSERT_SAME_UINT
590
591 commit a0608aaa301cd5ff7a2bac97d5b5299ff0453239
592 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
593 Date: 2010-06-01 13:53:44 +0100
594
595 Replace remaining uses of MYASSERT_SAME_UINT with g_assert_cmpuint
596
597 commit 427af932e9d0e8c1d73510c84e9d23182e92b333
598 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
599 Date: 2010-06-01 13:41:47 +0100
600
601 Replace simple uses of MYASSERT_SAME_UINT with g_assert_cmpuint
602
603 Perl:
604 s/\bMYASSERT_SAME_UINT \((.*), (.*)\);$/g_assert_cmpuint ($1, ==, $2);/
605
606 commit 81427f5fa47fccd0e1e8cb9ebfdacc822bf006d2
607 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
608 Date: 2010-06-01 13:27:27 +0100
609
610 Remove MYASSERT_SAME_STRING
611
612 commit 00eaaa59a424ee4b70b6f909fff353363f1d9c89
613 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
614 Date: 2010-06-01 13:25:37 +0100
615
616 Replace MYASSERT_SAME_STRING with g_assert_cmpstr
617
618 commit de86f725e1e1d5e2ad856e13da06098640cfe470
619 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
620 Date: 2010-06-01 13:05:25 +0100
621
622 MYASSERT_SAME_ERROR: remove
623
624 commit c2033efa23ca30d5ff6ebda9522bfc6cd5d3692e
625 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
626 Date: 2010-06-01 13:05:13 +0100
627
628 MYASSERT_SAME_ERROR: replace with g_assert_error and g_assert_cmpstr
629
630 commit 5244f73f6e19721a4a21b5b7a9f6e7bf570966d3
631 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
632 Date: 2010-06-01 13:01:09 +0100
633
634 Remove test_assert_no_error
635
636 commit ba259beb8c800cc6bdadd309e83a529d6e613684
637 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
638 Date: 2010-06-01 12:56:57 +0100
639
640 Replace test_assert_no_error with g_assert_no_error
641
642 commit 7fcb5dd5621eff54647c8abe05b8bd09b7a38bdc
643 Merge: c119cd7 6449c79
644 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
645 Date: 2010-06-01 14:43:48 +0100
646
647 Merge branch 'clearance'
648
649 Reviewed-by: Will Thompson <will.thompson@collabora.co.uk>
650
651 commit 6449c79da843c1a5b2e1e67012d86926ff63b3c6
652 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
653 Date: 2010-06-01 14:13:45 +0100
654
655 Use tp_clear_object, tp_clear_pointer in various places
656
657 commit 183e9239e6604beb1c6e9b99ad7a805e6ab60e2c
658 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
659 Date: 2010-06-01 12:11:03 +0100
660
661 Use tp_clear_object, tp_clear_pointer in tests
662
663 commit 1a52d83535c292ad0ec9e339f4b0777aa95dc51a
664 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
665 Date: 2010-06-01 12:05:51 +0100
666
667 tests/util-cxx.cpp: check that tp_clear_pointer works as intended in C++
668
669 The syntactic requirements are a bit tricky in C++ since, unlike in C,
670 you can't assign from a Foo* to a void* without an explicit cast.
671
672 commit 6e7ea379275cf43bf376466e654c5e3e7f779c04
673 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
674 Date: 2010-06-01 12:04:42 +0100
675
676 configure.ac: check for an optional C++ compiler
677
678 commit 76b009647855df20788ffb1990c4de8798ee5f82
679 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
680 Date: 2010-06-01 12:04:10 +0100
681
682 Add tp_clear_object, tp_clear_pointer macros
683
684 commit c119cd79de81c0069343c61c1dcffd0fd64f7918
685 Author: Xavier Claessens <xclaesse@gmail.com>
686 Date: 2010-05-30 16:45:45 +0200
687
688 Cleanup connection.h header a bit
689
690 commit 001b975910e22885af04b064b781facbfd000037
691 Author: Travis Reitter <travis.reitter@collabora.co.uk>
692 Date: 2010-05-25 11:17:38 -0700
693
694 Add TP_ERROR definition, since Vala expects domain quark defines to be singular.
695
696 commit 15d255ae8921fa8f89583d24579690434b1b28c3
697 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
698 Date: 2010-05-25 18:10:02 +0100
699
700 Nano version
701
0702 commit d1a80dee31d7b4d4e64342fbb103adb26b49e272
1703 Author: Simon McVittie <simon.mcvittie@collabora.co.uk>
2704 Date: 2010-05-25 16:34:15 +0100
128128 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
129129 CPP = @CPP@
130130 CPPFLAGS = @CPPFLAGS@
131 CXX = @CXX@
132 CXXCPP = @CXXCPP@
133 CXXDEPMODE = @CXXDEPMODE@
134 CXXFLAGS = @CXXFLAGS@
131135 CYGPATH_W = @CYGPATH_W@
132136 DBUS_CFLAGS = @DBUS_CFLAGS@
133137 DBUS_LIBS = @DBUS_LIBS@
215219 abs_top_builddir = @abs_top_builddir@
216220 abs_top_srcdir = @abs_top_srcdir@
217221 ac_ct_CC = @ac_ct_CC@
222 ac_ct_CXX = @ac_ct_CXX@
218223 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
219224 am__include = @am__include@
220225 am__leading_dot = @am__leading_dot@
0 telepathy-glib 0.11.7 (2010-06-14)
1 ==================================
2
3 The “why do my legs not work?” release.
4
5 Requirements:
6
7 ⎎ If GObject-Introspection is enabled, it must be version 0.6.13 or later.
8
9 Deprecations:
10
11 ⎎ TpChannelFactoryIface is officially deprecated (it shouldn't have been used
12 since 0.8).
13
14 ⎎ tp_verify() should not be used in new code: use GLib 2.20's G_STATIC_ASSERT.
15
16 Enhancements:
17
18 ⎎ Update to telepathy-spec 0.19.7 (smcv)
19 ⎓ generate code for the Anonymity and ServicePoint interfaces
20 ⎓ add ChatStates property and Chat_State_Map type
21 ⎓ add Account.ConnectionError and ConnectionErrorDetails properties
22
23 ⎎ fd.o #27676: add TP_CONNECTION_FEATURE_CONTACT_INFO,
24 TP_CONTACT_FEATURE_CONTACT_INFO, tp_contact_request_contact_info_async, etc.
25 (Zdra)
26
27 ⎎ fd.o #28241: add tp_channel_dispatch_operation_handle_with_time_async
28 (cassidy)
29
30 ⎎ fd.o #28379: add connection-error and connection-error-details properties
31 to TpAccount, and implement the corresponding parameters of
32 TpAccount::status-changed (smcv)
33
34 ⎎ fd.o #28312: add TpContact::presence-changed signal (sjokkis)
35
36 ⎎ fd.o #28368: use GStrv instead of gchar ** in structs, so
37 GObject-Introspection ≥ 0.6.13 can introspect it correctly (Zdra)
38
39 ⎎ Add tp_handle_set_new_from_array (smcv)
40
41 ⎎ fd.o #28345: add tp_clear_object, tp_clear_pointer, tp_clear_boxed
42 (also proposed for GLib/GObject, as Gnome bug #620263) (smcv)
43
44 ⎎ Add TP_ERROR as a synonym for TP_ERRORS, to be nice to Vala (treitter)
45
46 ⎎ fd.o #28334, #28347: speed up the regression tests, clean up their code, and
47 put their utility code in a namespace so Vala tests can use it (treitter,
48 smcv)
49
50 Fixes:
51
52 ⎎ test-finalized-in-invalidated-handler: eliminate a race condition (smcv)
53
54 ⎎ tp_connection_get_detailed_error: fix a memory leak introduced in 0.11.4
55 (smcv)
56
057 telepathy-glib 0.11.6 (2010-05-25)
158 ==================================
259
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.6.
2 # Generated by GNU Autoconf 2.65 for Telepathy-GLib 0.11.7.
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.6'
705 PACKAGE_STRING='Telepathy-GLib 0.11.6'
704 PACKAGE_VERSION='0.11.7'
705 PACKAGE_STRING='Telepathy-GLib 0.11.7'
706706 PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-glib'
707707 PACKAGE_URL=''
708708
746746 am__EXEEXT_TRUE
747747 LTLIBOBJS
748748 LIBOBJS
749 HAVE_CXX_FALSE
750 HAVE_CXX_TRUE
751 CXXCPP
752 am__fastdepCXX_FALSE
753 am__fastdepCXX_TRUE
754 CXXDEPMODE
755 ac_ct_CXX
756 CXXFLAGS
757 CXX
749758 HAVE_LD_VERSION_SCRIPT_FALSE
750759 HAVE_LD_VERSION_SCRIPT_TRUE
751760 pkgpyexecdir
959968 GIO_UNIX_CFLAGS
960969 GIO_UNIX_LIBS
961970 DBUS_CFLAGS
962 DBUS_LIBS'
971 DBUS_LIBS
972 CXX
973 CXXFLAGS
974 CCC
975 CXXCPP'
963976
964977
965978 # Initialize some variables set by options.
15011514 # Omit some internal or obsolete options to make the list less imposing.
15021515 # This message is too long to be a string in the A/UX 3.1 sh.
15031516 cat <<_ACEOF
1504 \`configure' configures Telepathy-GLib 0.11.6 to adapt to many kinds of systems.
1517 \`configure' configures Telepathy-GLib 0.11.7 to adapt to many kinds of systems.
15051518
15061519 Usage: $0 [OPTION]... [VAR=VALUE]...
15071520
15711584
15721585 if test -n "$ac_init_help"; then
15731586 case $ac_init_help in
1574 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.6:";;
1587 short | recursive ) echo "Configuration of Telepathy-GLib 0.11.7:";;
15751588 esac
15761589 cat <<\_ACEOF
15771590
16451658 linker flags for GIO_UNIX, overriding pkg-config
16461659 DBUS_CFLAGS C compiler flags for DBUS, overriding pkg-config
16471660 DBUS_LIBS linker flags for DBUS, overriding pkg-config
1661 CXX C++ compiler command
1662 CXXFLAGS C++ compiler flags
1663 CXXCPP C++ preprocessor
16481664
16491665 Use these variables to override the choices made by `configure' or to help
16501666 it to find libraries and programs with nonstandard names/locations.
17121728 test -n "$ac_init_help" && exit $ac_status
17131729 if $ac_init_version; then
17141730 cat <<\_ACEOF
1715 Telepathy-GLib configure 0.11.6
1731 Telepathy-GLib configure 0.11.7
17161732 generated by GNU Autoconf 2.65
17171733
17181734 Copyright (C) 2009 Free Software Foundation, Inc.
20792095 eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
20802096
20812097 } # ac_fn_c_check_header_mongrel
2098
2099 # ac_fn_cxx_try_compile LINENO
2100 # ----------------------------
2101 # Try to compile conftest.$ac_ext, and return whether this succeeded.
2102 ac_fn_cxx_try_compile ()
2103 {
2104 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2105 rm -f conftest.$ac_objext
2106 if { { ac_try="$ac_compile"
2107 case "(($ac_try" in
2108 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2109 *) ac_try_echo=$ac_try;;
2110 esac
2111 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2112 $as_echo "$ac_try_echo"; } >&5
2113 (eval "$ac_compile") 2>conftest.err
2114 ac_status=$?
2115 if test -s conftest.err; then
2116 grep -v '^ *+' conftest.err >conftest.er1
2117 cat conftest.er1 >&5
2118 mv -f conftest.er1 conftest.err
2119 fi
2120 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2121 test $ac_status = 0; } && {
2122 test -z "$ac_cxx_werror_flag" ||
2123 test ! -s conftest.err
2124 } && test -s conftest.$ac_objext; then :
2125 ac_retval=0
2126 else
2127 $as_echo "$as_me: failed program was:" >&5
2128 sed 's/^/| /' conftest.$ac_ext >&5
2129
2130 ac_retval=1
2131 fi
2132 eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
2133 as_fn_set_status $ac_retval
2134
2135 } # ac_fn_cxx_try_compile
2136
2137 # ac_fn_cxx_try_cpp LINENO
2138 # ------------------------
2139 # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
2140 ac_fn_cxx_try_cpp ()
2141 {
2142 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2143 if { { ac_try="$ac_cpp conftest.$ac_ext"
2144 case "(($ac_try" in
2145 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2146 *) ac_try_echo=$ac_try;;
2147 esac
2148 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2149 $as_echo "$ac_try_echo"; } >&5
2150 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
2151 ac_status=$?
2152 if test -s conftest.err; then
2153 grep -v '^ *+' conftest.err >conftest.er1
2154 cat conftest.er1 >&5
2155 mv -f conftest.er1 conftest.err
2156 fi
2157 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2158 test $ac_status = 0; } >/dev/null && {
2159 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
2160 test ! -s conftest.err
2161 }; then :
2162 ac_retval=0
2163 else
2164 $as_echo "$as_me: failed program was:" >&5
2165 sed 's/^/| /' conftest.$ac_ext >&5
2166
2167 ac_retval=1
2168 fi
2169 eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
2170 as_fn_set_status $ac_retval
2171
2172 } # ac_fn_cxx_try_cpp
2173
2174 # ac_fn_cxx_try_link LINENO
2175 # -------------------------
2176 # Try to link conftest.$ac_ext, and return whether this succeeded.
2177 ac_fn_cxx_try_link ()
2178 {
2179 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2180 rm -f conftest.$ac_objext conftest$ac_exeext
2181 if { { ac_try="$ac_link"
2182 case "(($ac_try" in
2183 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2184 *) ac_try_echo=$ac_try;;
2185 esac
2186 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2187 $as_echo "$ac_try_echo"; } >&5
2188 (eval "$ac_link") 2>conftest.err
2189 ac_status=$?
2190 if test -s conftest.err; then
2191 grep -v '^ *+' conftest.err >conftest.er1
2192 cat conftest.er1 >&5
2193 mv -f conftest.er1 conftest.err
2194 fi
2195 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2196 test $ac_status = 0; } && {
2197 test -z "$ac_cxx_werror_flag" ||
2198 test ! -s conftest.err
2199 } && test -s conftest$ac_exeext && {
2200 test "$cross_compiling" = yes ||
2201 $as_test_x conftest$ac_exeext
2202 }; then :
2203 ac_retval=0
2204 else
2205 $as_echo "$as_me: failed program was:" >&5
2206 sed 's/^/| /' conftest.$ac_ext >&5
2207
2208 ac_retval=1
2209 fi
2210 # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
2211 # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
2212 # interfere with the next link command; also delete a directory that is
2213 # left behind by Apple's compiler. We do this before executing the actions.
2214 rm -rf conftest.dSYM conftest_ipa8_conftest.oo
2215 eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
2216 as_fn_set_status $ac_retval
2217
2218 } # ac_fn_cxx_try_link
20822219 cat >config.log <<_ACEOF
20832220 This file contains any messages produced by compilers while
20842221 running configure, to aid debugging if configure makes a mistake.
20852222
2086 It was created by Telepathy-GLib $as_me 0.11.6, which was
2223 It was created by Telepathy-GLib $as_me 0.11.7, which was
20872224 generated by GNU Autoconf 2.65. Invocation command line was
20882225
20892226 $ $0 $@
28943031
28953032 # Define the identity of the package.
28963033 PACKAGE='telepathy-glib'
2897 VERSION='0.11.6'
3034 VERSION='0.11.7'
28983035
28993036
29003037 cat >>confdefs.h <<_ACEOF
49045041 else
49055042 lt_cv_nm_interface="BSD nm"
49065043 echo "int some_variable = 0;" > conftest.$ac_ext
4907 (eval echo "\"\$as_me:4908: $ac_compile\"" >&5)
5044 (eval echo "\"\$as_me:5045: $ac_compile\"" >&5)
49085045 (eval "$ac_compile" 2>conftest.err)
49095046 cat conftest.err >&5
4910 (eval echo "\"\$as_me:4911: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
5047 (eval echo "\"\$as_me:5048: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
49115048 (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
49125049 cat conftest.err >&5
4913 (eval echo "\"\$as_me:4914: output\"" >&5)
5050 (eval echo "\"\$as_me:5051: output\"" >&5)
49145051 cat conftest.out >&5
49155052 if $GREP 'External.*some_variable' conftest.out > /dev/null; then
49165053 lt_cv_nm_interface="MS dumpbin"
61166253 ;;
61176254 *-*-irix6*)
61186255 # Find out which ABI we are using.
6119 echo '#line 6120 "configure"' > conftest.$ac_ext
6256 echo '#line 6257 "configure"' > conftest.$ac_ext
61206257 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
61216258 (eval $ac_compile) 2>&5
61226259 ac_status=$?
76467783 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
76477784 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
76487785 -e 's:$: $lt_compiler_flag:'`
7649 (eval echo "\"\$as_me:7650: $lt_compile\"" >&5)
7786 (eval echo "\"\$as_me:7787: $lt_compile\"" >&5)
76507787 (eval "$lt_compile" 2>conftest.err)
76517788 ac_status=$?
76527789 cat conftest.err >&5
7653 echo "$as_me:7654: \$? = $ac_status" >&5
7790 echo "$as_me:7791: \$? = $ac_status" >&5
76547791 if (exit $ac_status) && test -s "$ac_outfile"; then
76557792 # The compiler can only warn and ignore the option if not recognized
76567793 # So say no if there are warnings other than the usual output.
79858122 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
79868123 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
79878124 -e 's:$: $lt_compiler_flag:'`
7988 (eval echo "\"\$as_me:7989: $lt_compile\"" >&5)
8125 (eval echo "\"\$as_me:8126: $lt_compile\"" >&5)
79898126 (eval "$lt_compile" 2>conftest.err)
79908127 ac_status=$?
79918128 cat conftest.err >&5
7992 echo "$as_me:7993: \$? = $ac_status" >&5
8129 echo "$as_me:8130: \$? = $ac_status" >&5
79938130 if (exit $ac_status) && test -s "$ac_outfile"; then
79948131 # The compiler can only warn and ignore the option if not recognized
79958132 # So say no if there are warnings other than the usual output.
80908227 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
80918228 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
80928229 -e 's:$: $lt_compiler_flag:'`
8093 (eval echo "\"\$as_me:8094: $lt_compile\"" >&5)
8230 (eval echo "\"\$as_me:8231: $lt_compile\"" >&5)
80948231 (eval "$lt_compile" 2>out/conftest.err)
80958232 ac_status=$?
80968233 cat out/conftest.err >&5
8097 echo "$as_me:8098: \$? = $ac_status" >&5
8234 echo "$as_me:8235: \$? = $ac_status" >&5
80988235 if (exit $ac_status) && test -s out/conftest2.$ac_objext
80998236 then
81008237 # The compiler can only warn and ignore the option if not recognized
81458282 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
81468283 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
81478284 -e 's:$: $lt_compiler_flag:'`
8148 (eval echo "\"\$as_me:8149: $lt_compile\"" >&5)
8285 (eval echo "\"\$as_me:8286: $lt_compile\"" >&5)
81498286 (eval "$lt_compile" 2>out/conftest.err)
81508287 ac_status=$?
81518288 cat out/conftest.err >&5
8152 echo "$as_me:8153: \$? = $ac_status" >&5
8289 echo "$as_me:8290: \$? = $ac_status" >&5
81538290 if (exit $ac_status) && test -s out/conftest2.$ac_objext
81548291 then
81558292 # The compiler can only warn and ignore the option if not recognized
1052910666 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1053010667 lt_status=$lt_dlunknown
1053110668 cat > conftest.$ac_ext <<_LT_EOF
10532 #line 10533 "configure"
10669 #line 10670 "configure"
1053310670 #include "confdefs.h"
1053410671
1053510672 #if HAVE_DLFCN_H
1062510762 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1062610763 lt_status=$lt_dlunknown
1062710764 cat > conftest.$ac_ext <<_LT_EOF
10628 #line 10629 "configure"
10765 #line 10766 "configure"
1062910766 #include "confdefs.h"
1063010767
1063110768 #if HAVE_DLFCN_H
1101011147 as_fn_error "gobject-introspection-1.0 is not installed" "$LINENO" 5
1101111148 fi
1101211149 if test -n "$PKG_CONFIG" && \
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
11150 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.13\""; } >&5
11151 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.13") 2>&5
1101511152 ac_status=$?
1101611153 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1101711154 test $ac_status = 0; }; then
1101811155 found_introspection=yes
1101911156 else
11020 as_fn_error "You need to have gobject-introspection >= 0.6.11 installed to build Telepathy-GLib" "$LINENO" 5
11157 as_fn_error "You need to have gobject-introspection >= 0.6.13 installed to build Telepathy-GLib" "$LINENO" 5
1102111158 fi
1102211159 ;; #(
1102311160 auto) :
1102411161 if test -n "$PKG_CONFIG" && \
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
11162 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 0.6.13\""; } >&5
11163 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 0.6.13") 2>&5
1102711164 ac_status=$?
1102811165 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1102911166 test $ac_status = 0; }; then
1129511432
1129611433
1129711434
11298 LT_CURRENT=38
11435 LT_CURRENT=39
1129911436 LT_REVISION=0
11300 LT_AGE=38
11437 LT_AGE=39
1130111438
1130211439
1130311440
1240112538 else
1240212539 HAVE_LD_VERSION_SCRIPT_TRUE='#'
1240312540 HAVE_LD_VERSION_SCRIPT_FALSE=
12541 fi
12542
12543
12544 ac_ext=cpp
12545 ac_cpp='$CXXCPP $CPPFLAGS'
12546 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
12547 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
12548 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
12549 if test -z "$CXX"; then
12550 if test -n "$CCC"; then
12551 CXX=$CCC
12552 else
12553 if test -n "$ac_tool_prefix"; then
12554 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
12555 do
12556 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
12557 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
12558 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
12559 $as_echo_n "checking for $ac_word... " >&6; }
12560 if test "${ac_cv_prog_CXX+set}" = set; then :
12561 $as_echo_n "(cached) " >&6
12562 else
12563 if test -n "$CXX"; then
12564 ac_cv_prog_CXX="$CXX" # Let the user override the test.
12565 else
12566 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
12567 for as_dir in $PATH
12568 do
12569 IFS=$as_save_IFS
12570 test -z "$as_dir" && as_dir=.
12571 for ac_exec_ext in '' $ac_executable_extensions; do
12572 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
12573 ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
12574 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
12575 break 2
12576 fi
12577 done
12578 done
12579 IFS=$as_save_IFS
12580
12581 fi
12582 fi
12583 CXX=$ac_cv_prog_CXX
12584 if test -n "$CXX"; then
12585 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
12586 $as_echo "$CXX" >&6; }
12587 else
12588 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12589 $as_echo "no" >&6; }
12590 fi
12591
12592
12593 test -n "$CXX" && break
12594 done
12595 fi
12596 if test -z "$CXX"; then
12597 ac_ct_CXX=$CXX
12598 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
12599 do
12600 # Extract the first word of "$ac_prog", so it can be a program name with args.
12601 set dummy $ac_prog; ac_word=$2
12602 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
12603 $as_echo_n "checking for $ac_word... " >&6; }
12604 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
12605 $as_echo_n "(cached) " >&6
12606 else
12607 if test -n "$ac_ct_CXX"; then
12608 ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
12609 else
12610 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
12611 for as_dir in $PATH
12612 do
12613 IFS=$as_save_IFS
12614 test -z "$as_dir" && as_dir=.
12615 for ac_exec_ext in '' $ac_executable_extensions; do
12616 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
12617 ac_cv_prog_ac_ct_CXX="$ac_prog"
12618 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
12619 break 2
12620 fi
12621 done
12622 done
12623 IFS=$as_save_IFS
12624
12625 fi
12626 fi
12627 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
12628 if test -n "$ac_ct_CXX"; then
12629 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
12630 $as_echo "$ac_ct_CXX" >&6; }
12631 else
12632 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12633 $as_echo "no" >&6; }
12634 fi
12635
12636
12637 test -n "$ac_ct_CXX" && break
12638 done
12639
12640 if test "x$ac_ct_CXX" = x; then
12641 CXX="g++"
12642 else
12643 case $cross_compiling:$ac_tool_warned in
12644 yes:)
12645 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
12646 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
12647 ac_tool_warned=yes ;;
12648 esac
12649 CXX=$ac_ct_CXX
12650 fi
12651 fi
12652
12653 fi
12654 fi
12655 # Provide some information about the compiler.
12656 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
12657 set X $ac_compile
12658 ac_compiler=$2
12659 for ac_option in --version -v -V -qversion; do
12660 { { ac_try="$ac_compiler $ac_option >&5"
12661 case "(($ac_try" in
12662 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
12663 *) ac_try_echo=$ac_try;;
12664 esac
12665 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
12666 $as_echo "$ac_try_echo"; } >&5
12667 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
12668 ac_status=$?
12669 if test -s conftest.err; then
12670 sed '10a\
12671 ... rest of stderr output deleted ...
12672 10q' conftest.err >conftest.er1
12673 cat conftest.er1 >&5
12674 fi
12675 rm -f conftest.er1 conftest.err
12676 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
12677 test $ac_status = 0; }
12678 done
12679
12680 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
12681 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
12682 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
12683 $as_echo_n "(cached) " >&6
12684 else
12685 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12686 /* end confdefs.h. */
12687
12688 int
12689 main ()
12690 {
12691 #ifndef __GNUC__
12692 choke me
12693 #endif
12694
12695 ;
12696 return 0;
12697 }
12698 _ACEOF
12699 if ac_fn_cxx_try_compile "$LINENO"; then :
12700 ac_compiler_gnu=yes
12701 else
12702 ac_compiler_gnu=no
12703 fi
12704 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12705 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
12706
12707 fi
12708 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
12709 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
12710 if test $ac_compiler_gnu = yes; then
12711 GXX=yes
12712 else
12713 GXX=
12714 fi
12715 ac_test_CXXFLAGS=${CXXFLAGS+set}
12716 ac_save_CXXFLAGS=$CXXFLAGS
12717 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
12718 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
12719 if test "${ac_cv_prog_cxx_g+set}" = set; then :
12720 $as_echo_n "(cached) " >&6
12721 else
12722 ac_save_cxx_werror_flag=$ac_cxx_werror_flag
12723 ac_cxx_werror_flag=yes
12724 ac_cv_prog_cxx_g=no
12725 CXXFLAGS="-g"
12726 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12727 /* end confdefs.h. */
12728
12729 int
12730 main ()
12731 {
12732
12733 ;
12734 return 0;
12735 }
12736 _ACEOF
12737 if ac_fn_cxx_try_compile "$LINENO"; then :
12738 ac_cv_prog_cxx_g=yes
12739 else
12740 CXXFLAGS=""
12741 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12742 /* end confdefs.h. */
12743
12744 int
12745 main ()
12746 {
12747
12748 ;
12749 return 0;
12750 }
12751 _ACEOF
12752 if ac_fn_cxx_try_compile "$LINENO"; then :
12753
12754 else
12755 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
12756 CXXFLAGS="-g"
12757 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12758 /* end confdefs.h. */
12759
12760 int
12761 main ()
12762 {
12763
12764 ;
12765 return 0;
12766 }
12767 _ACEOF
12768 if ac_fn_cxx_try_compile "$LINENO"; then :
12769 ac_cv_prog_cxx_g=yes
12770 fi
12771 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12772 fi
12773 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12774 fi
12775 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12776 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
12777 fi
12778 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
12779 $as_echo "$ac_cv_prog_cxx_g" >&6; }
12780 if test "$ac_test_CXXFLAGS" = set; then
12781 CXXFLAGS=$ac_save_CXXFLAGS
12782 elif test $ac_cv_prog_cxx_g = yes; then
12783 if test "$GXX" = yes; then
12784 CXXFLAGS="-g -O2"
12785 else
12786 CXXFLAGS="-g"
12787 fi
12788 else
12789 if test "$GXX" = yes; then
12790 CXXFLAGS="-O2"
12791 else
12792 CXXFLAGS=
12793 fi
12794 fi
12795 ac_ext=c
12796 ac_cpp='$CPP $CPPFLAGS'
12797 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
12798 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
12799 ac_compiler_gnu=$ac_cv_c_compiler_gnu
12800
12801 depcc="$CXX" am_compiler_list=
12802
12803 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
12804 $as_echo_n "checking dependency style of $depcc... " >&6; }
12805 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
12806 $as_echo_n "(cached) " >&6
12807 else
12808 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
12809 # We make a subdir and do the tests there. Otherwise we can end up
12810 # making bogus files that we don't know about and never remove. For
12811 # instance it was reported that on HP-UX the gcc test will end up
12812 # making a dummy file named `D' -- because `-MD' means `put the output
12813 # in D'.
12814 mkdir conftest.dir
12815 # Copy depcomp to subdir because otherwise we won't find it if we're
12816 # using a relative directory.
12817 cp "$am_depcomp" conftest.dir
12818 cd conftest.dir
12819 # We will build objects and dependencies in a subdirectory because
12820 # it helps to detect inapplicable dependency modes. For instance
12821 # both Tru64's cc and ICC support -MD to output dependencies as a
12822 # side effect of compilation, but ICC will put the dependencies in
12823 # the current directory while Tru64 will put them in the object
12824 # directory.
12825 mkdir sub
12826
12827 am_cv_CXX_dependencies_compiler_type=none
12828 if test "$am_compiler_list" = ""; then
12829 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
12830 fi
12831 am__universal=false
12832 case " $depcc " in #(
12833 *\ -arch\ *\ -arch\ *) am__universal=true ;;
12834 esac
12835
12836 for depmode in $am_compiler_list; do
12837 # Setup a source with many dependencies, because some compilers
12838 # like to wrap large dependency lists on column 80 (with \), and
12839 # we should not choose a depcomp mode which is confused by this.
12840 #
12841 # We need to recreate these files for each test, as the compiler may
12842 # overwrite some of them when testing with obscure command lines.
12843 # This happens at least with the AIX C compiler.
12844 : > sub/conftest.c
12845 for i in 1 2 3 4 5 6; do
12846 echo '#include "conftst'$i'.h"' >> sub/conftest.c
12847 # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
12848 # Solaris 8's {/usr,}/bin/sh.
12849 touch sub/conftst$i.h
12850 done
12851 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
12852
12853 # We check with `-c' and `-o' for the sake of the "dashmstdout"
12854 # mode. It turns out that the SunPro C++ compiler does not properly
12855 # handle `-M -o', and we need to detect this. Also, some Intel
12856 # versions had trouble with output in subdirs
12857 am__obj=sub/conftest.${OBJEXT-o}
12858 am__minus_obj="-o $am__obj"
12859 case $depmode in
12860 gcc)
12861 # This depmode causes a compiler race in universal mode.
12862 test "$am__universal" = false || continue
12863 ;;
12864 nosideeffect)
12865 # after this tag, mechanisms are not by side-effect, so they'll
12866 # only be used when explicitly requested
12867 if test "x$enable_dependency_tracking" = xyes; then
12868 continue
12869 else
12870 break
12871 fi
12872 ;;
12873 msvisualcpp | msvcmsys)
12874 # This compiler won't grok `-c -o', but also, the minuso test has
12875 # not run yet. These depmodes are late enough in the game, and
12876 # so weak that their functioning should not be impacted.
12877 am__obj=conftest.${OBJEXT-o}
12878 am__minus_obj=
12879 ;;
12880 none) break ;;
12881 esac
12882 if depmode=$depmode \
12883 source=sub/conftest.c object=$am__obj \
12884 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
12885 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
12886 >/dev/null 2>conftest.err &&
12887 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
12888 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
12889 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
12890 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
12891 # icc doesn't choke on unknown options, it will just issue warnings
12892 # or remarks (even with -Werror). So we grep stderr for any message
12893 # that says an option was ignored or not supported.
12894 # When given -MP, icc 7.0 and 7.1 complain thusly:
12895 # icc: Command line warning: ignoring option '-M'; no argument required
12896 # The diagnosis changed in icc 8.0:
12897 # icc: Command line remark: option '-MP' not supported
12898 if (grep 'ignoring option' conftest.err ||
12899 grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
12900 am_cv_CXX_dependencies_compiler_type=$depmode
12901 break
12902 fi
12903 fi
12904 done
12905
12906 cd ..
12907 rm -rf conftest.dir
12908 else
12909 am_cv_CXX_dependencies_compiler_type=none
12910 fi
12911
12912 fi
12913 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
12914 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
12915 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
12916
12917 if
12918 test "x$enable_dependency_tracking" != xno \
12919 && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
12920 am__fastdepCXX_TRUE=
12921 am__fastdepCXX_FALSE='#'
12922 else
12923 am__fastdepCXX_TRUE='#'
12924 am__fastdepCXX_FALSE=
12925 fi
12926
12927
12928
12929 ac_ext=cpp
12930 ac_cpp='$CXXCPP $CPPFLAGS'
12931 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
12932 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
12933 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
12934 if test -z "$CXX"; then
12935 if test -n "$CCC"; then
12936 CXX=$CCC
12937 else
12938 if test -n "$ac_tool_prefix"; then
12939 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
12940 do
12941 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
12942 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
12943 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
12944 $as_echo_n "checking for $ac_word... " >&6; }
12945 if test "${ac_cv_prog_CXX+set}" = set; then :
12946 $as_echo_n "(cached) " >&6
12947 else
12948 if test -n "$CXX"; then
12949 ac_cv_prog_CXX="$CXX" # Let the user override the test.
12950 else
12951 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
12952 for as_dir in $PATH
12953 do
12954 IFS=$as_save_IFS
12955 test -z "$as_dir" && as_dir=.
12956 for ac_exec_ext in '' $ac_executable_extensions; do
12957 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
12958 ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
12959 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
12960 break 2
12961 fi
12962 done
12963 done
12964 IFS=$as_save_IFS
12965
12966 fi
12967 fi
12968 CXX=$ac_cv_prog_CXX
12969 if test -n "$CXX"; then
12970 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
12971 $as_echo "$CXX" >&6; }
12972 else
12973 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12974 $as_echo "no" >&6; }
12975 fi
12976
12977
12978 test -n "$CXX" && break
12979 done
12980 fi
12981 if test -z "$CXX"; then
12982 ac_ct_CXX=$CXX
12983 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
12984 do
12985 # Extract the first word of "$ac_prog", so it can be a program name with args.
12986 set dummy $ac_prog; ac_word=$2
12987 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
12988 $as_echo_n "checking for $ac_word... " >&6; }
12989 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
12990 $as_echo_n "(cached) " >&6
12991 else
12992 if test -n "$ac_ct_CXX"; then
12993 ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
12994 else
12995 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
12996 for as_dir in $PATH
12997 do
12998 IFS=$as_save_IFS
12999 test -z "$as_dir" && as_dir=.
13000 for ac_exec_ext in '' $ac_executable_extensions; do
13001 if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
13002 ac_cv_prog_ac_ct_CXX="$ac_prog"
13003 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
13004 break 2
13005 fi
13006 done
13007 done
13008 IFS=$as_save_IFS
13009
13010 fi
13011 fi
13012 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
13013 if test -n "$ac_ct_CXX"; then
13014 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
13015 $as_echo "$ac_ct_CXX" >&6; }
13016 else
13017 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13018 $as_echo "no" >&6; }
13019 fi
13020
13021
13022 test -n "$ac_ct_CXX" && break
13023 done
13024
13025 if test "x$ac_ct_CXX" = x; then
13026 CXX="g++"
13027 else
13028 case $cross_compiling:$ac_tool_warned in
13029 yes:)
13030 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
13031 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
13032 ac_tool_warned=yes ;;
13033 esac
13034 CXX=$ac_ct_CXX
13035 fi
13036 fi
13037
13038 fi
13039 fi
13040 # Provide some information about the compiler.
13041 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
13042 set X $ac_compile
13043 ac_compiler=$2
13044 for ac_option in --version -v -V -qversion; do
13045 { { ac_try="$ac_compiler $ac_option >&5"
13046 case "(($ac_try" in
13047 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
13048 *) ac_try_echo=$ac_try;;
13049 esac
13050 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
13051 $as_echo "$ac_try_echo"; } >&5
13052 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
13053 ac_status=$?
13054 if test -s conftest.err; then
13055 sed '10a\
13056 ... rest of stderr output deleted ...
13057 10q' conftest.err >conftest.er1
13058 cat conftest.er1 >&5
13059 fi
13060 rm -f conftest.er1 conftest.err
13061 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
13062 test $ac_status = 0; }
13063 done
13064
13065 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
13066 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
13067 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
13068 $as_echo_n "(cached) " >&6
13069 else
13070 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13071 /* end confdefs.h. */
13072
13073 int
13074 main ()
13075 {
13076 #ifndef __GNUC__
13077 choke me
13078 #endif
13079
13080 ;
13081 return 0;
13082 }
13083 _ACEOF
13084 if ac_fn_cxx_try_compile "$LINENO"; then :
13085 ac_compiler_gnu=yes
13086 else
13087 ac_compiler_gnu=no
13088 fi
13089 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13090 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
13091
13092 fi
13093 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
13094 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
13095 if test $ac_compiler_gnu = yes; then
13096 GXX=yes
13097 else
13098 GXX=
13099 fi
13100 ac_test_CXXFLAGS=${CXXFLAGS+set}
13101 ac_save_CXXFLAGS=$CXXFLAGS
13102 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
13103 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
13104 if test "${ac_cv_prog_cxx_g+set}" = set; then :
13105 $as_echo_n "(cached) " >&6
13106 else
13107 ac_save_cxx_werror_flag=$ac_cxx_werror_flag
13108 ac_cxx_werror_flag=yes
13109 ac_cv_prog_cxx_g=no
13110 CXXFLAGS="-g"
13111 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13112 /* end confdefs.h. */
13113
13114 int
13115 main ()
13116 {
13117
13118 ;
13119 return 0;
13120 }
13121 _ACEOF
13122 if ac_fn_cxx_try_compile "$LINENO"; then :
13123 ac_cv_prog_cxx_g=yes
13124 else
13125 CXXFLAGS=""
13126 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13127 /* end confdefs.h. */
13128
13129 int
13130 main ()
13131 {
13132
13133 ;
13134 return 0;
13135 }
13136 _ACEOF
13137 if ac_fn_cxx_try_compile "$LINENO"; then :
13138
13139 else
13140 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
13141 CXXFLAGS="-g"
13142 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13143 /* end confdefs.h. */
13144
13145 int
13146 main ()
13147 {
13148
13149 ;
13150 return 0;
13151 }
13152 _ACEOF
13153 if ac_fn_cxx_try_compile "$LINENO"; then :
13154 ac_cv_prog_cxx_g=yes
13155 fi
13156 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13157 fi
13158 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13159 fi
13160 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13161 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
13162 fi
13163 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
13164 $as_echo "$ac_cv_prog_cxx_g" >&6; }
13165 if test "$ac_test_CXXFLAGS" = set; then
13166 CXXFLAGS=$ac_save_CXXFLAGS
13167 elif test $ac_cv_prog_cxx_g = yes; then
13168 if test "$GXX" = yes; then
13169 CXXFLAGS="-g -O2"
13170 else
13171 CXXFLAGS="-g"
13172 fi
13173 else
13174 if test "$GXX" = yes; then
13175 CXXFLAGS="-O2"
13176 else
13177 CXXFLAGS=
13178 fi
13179 fi
13180 ac_ext=c
13181 ac_cpp='$CPP $CPPFLAGS'
13182 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
13183 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
13184 ac_compiler_gnu=$ac_cv_c_compiler_gnu
13185
13186 depcc="$CXX" am_compiler_list=
13187
13188 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
13189 $as_echo_n "checking dependency style of $depcc... " >&6; }
13190 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
13191 $as_echo_n "(cached) " >&6
13192 else
13193 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
13194 # We make a subdir and do the tests there. Otherwise we can end up
13195 # making bogus files that we don't know about and never remove. For
13196 # instance it was reported that on HP-UX the gcc test will end up
13197 # making a dummy file named `D' -- because `-MD' means `put the output
13198 # in D'.
13199 mkdir conftest.dir
13200 # Copy depcomp to subdir because otherwise we won't find it if we're
13201 # using a relative directory.
13202 cp "$am_depcomp" conftest.dir
13203 cd conftest.dir
13204 # We will build objects and dependencies in a subdirectory because
13205 # it helps to detect inapplicable dependency modes. For instance
13206 # both Tru64's cc and ICC support -MD to output dependencies as a
13207 # side effect of compilation, but ICC will put the dependencies in
13208 # the current directory while Tru64 will put them in the object
13209 # directory.
13210 mkdir sub
13211
13212 am_cv_CXX_dependencies_compiler_type=none
13213 if test "$am_compiler_list" = ""; then
13214 am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
13215 fi
13216 am__universal=false
13217 case " $depcc " in #(
13218 *\ -arch\ *\ -arch\ *) am__universal=true ;;
13219 esac
13220
13221 for depmode in $am_compiler_list; do
13222 # Setup a source with many dependencies, because some compilers
13223 # like to wrap large dependency lists on column 80 (with \), and
13224 # we should not choose a depcomp mode which is confused by this.
13225 #
13226 # We need to recreate these files for each test, as the compiler may
13227 # overwrite some of them when testing with obscure command lines.
13228 # This happens at least with the AIX C compiler.
13229 : > sub/conftest.c
13230 for i in 1 2 3 4 5 6; do
13231 echo '#include "conftst'$i'.h"' >> sub/conftest.c
13232 # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
13233 # Solaris 8's {/usr,}/bin/sh.
13234 touch sub/conftst$i.h
13235 done
13236 echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
13237
13238 # We check with `-c' and `-o' for the sake of the "dashmstdout"
13239 # mode. It turns out that the SunPro C++ compiler does not properly
13240 # handle `-M -o', and we need to detect this. Also, some Intel
13241 # versions had trouble with output in subdirs
13242 am__obj=sub/conftest.${OBJEXT-o}
13243 am__minus_obj="-o $am__obj"
13244 case $depmode in
13245 gcc)
13246 # This depmode causes a compiler race in universal mode.
13247 test "$am__universal" = false || continue
13248 ;;
13249 nosideeffect)
13250 # after this tag, mechanisms are not by side-effect, so they'll
13251 # only be used when explicitly requested
13252 if test "x$enable_dependency_tracking" = xyes; then
13253 continue
13254 else
13255 break
13256 fi
13257 ;;
13258 msvisualcpp | msvcmsys)
13259 # This compiler won't grok `-c -o', but also, the minuso test has
13260 # not run yet. These depmodes are late enough in the game, and
13261 # so weak that their functioning should not be impacted.
13262 am__obj=conftest.${OBJEXT-o}
13263 am__minus_obj=
13264 ;;
13265 none) break ;;
13266 esac
13267 if depmode=$depmode \
13268 source=sub/conftest.c object=$am__obj \
13269 depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
13270 $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
13271 >/dev/null 2>conftest.err &&
13272 grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
13273 grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
13274 grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
13275 ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
13276 # icc doesn't choke on unknown options, it will just issue warnings
13277 # or remarks (even with -Werror). So we grep stderr for any message
13278 # that says an option was ignored or not supported.
13279 # When given -MP, icc 7.0 and 7.1 complain thusly:
13280 # icc: Command line warning: ignoring option '-M'; no argument required
13281 # The diagnosis changed in icc 8.0:
13282 # icc: Command line remark: option '-MP' not supported
13283 if (grep 'ignoring option' conftest.err ||
13284 grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
13285 am_cv_CXX_dependencies_compiler_type=$depmode
13286 break
13287 fi
13288 fi
13289 done
13290
13291 cd ..
13292 rm -rf conftest.dir
13293 else
13294 am_cv_CXX_dependencies_compiler_type=none
13295 fi
13296
13297 fi
13298 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
13299 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
13300 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
13301
13302 if
13303 test "x$enable_dependency_tracking" != xno \
13304 && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
13305 am__fastdepCXX_TRUE=
13306 am__fastdepCXX_FALSE='#'
13307 else
13308 am__fastdepCXX_TRUE='#'
13309 am__fastdepCXX_FALSE=
13310 fi
13311
13312
13313 if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
13314 ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
13315 (test "X$CXX" != "Xg++"))) ; then
13316 ac_ext=cpp
13317 ac_cpp='$CXXCPP $CPPFLAGS'
13318 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
13319 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
13320 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
13321 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
13322 $as_echo_n "checking how to run the C++ preprocessor... " >&6; }
13323 if test -z "$CXXCPP"; then
13324 if test "${ac_cv_prog_CXXCPP+set}" = set; then :
13325 $as_echo_n "(cached) " >&6
13326 else
13327 # Double quotes because CXXCPP needs to be expanded
13328 for CXXCPP in "$CXX -E" "/lib/cpp"
13329 do
13330 ac_preproc_ok=false
13331 for ac_cxx_preproc_warn_flag in '' yes
13332 do
13333 # Use a header file that comes with gcc, so configuring glibc
13334 # with a fresh cross-compiler works.
13335 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
13336 # <limits.h> exists even on freestanding compilers.
13337 # On the NeXT, cc -E runs the code through the compiler's parser,
13338 # not just through cpp. "Syntax error" is here to catch this case.
13339 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13340 /* end confdefs.h. */
13341 #ifdef __STDC__
13342 # include <limits.h>
13343 #else
13344 # include <assert.h>
13345 #endif
13346 Syntax error
13347 _ACEOF
13348 if ac_fn_cxx_try_cpp "$LINENO"; then :
13349
13350 else
13351 # Broken: fails on valid input.
13352 continue
13353 fi
13354 rm -f conftest.err conftest.$ac_ext
13355
13356 # OK, works on sane cases. Now check whether nonexistent headers
13357 # can be detected and how.
13358 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13359 /* end confdefs.h. */
13360 #include <ac_nonexistent.h>
13361 _ACEOF
13362 if ac_fn_cxx_try_cpp "$LINENO"; then :
13363 # Broken: success on invalid input.
13364 continue
13365 else
13366 # Passes both tests.
13367 ac_preproc_ok=:
13368 break
13369 fi
13370 rm -f conftest.err conftest.$ac_ext
13371
13372 done
13373 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
13374 rm -f conftest.err conftest.$ac_ext
13375 if $ac_preproc_ok; then :
13376 break
13377 fi
13378
13379 done
13380 ac_cv_prog_CXXCPP=$CXXCPP
13381
13382 fi
13383 CXXCPP=$ac_cv_prog_CXXCPP
13384 else
13385 ac_cv_prog_CXXCPP=$CXXCPP
13386 fi
13387 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
13388 $as_echo "$CXXCPP" >&6; }
13389 ac_preproc_ok=false
13390 for ac_cxx_preproc_warn_flag in '' yes
13391 do
13392 # Use a header file that comes with gcc, so configuring glibc
13393 # with a fresh cross-compiler works.
13394 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
13395 # <limits.h> exists even on freestanding compilers.
13396 # On the NeXT, cc -E runs the code through the compiler's parser,
13397 # not just through cpp. "Syntax error" is here to catch this case.
13398 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13399 /* end confdefs.h. */
13400 #ifdef __STDC__
13401 # include <limits.h>
13402 #else
13403 # include <assert.h>
13404 #endif
13405 Syntax error
13406 _ACEOF
13407 if ac_fn_cxx_try_cpp "$LINENO"; then :
13408
13409 else
13410 # Broken: fails on valid input.
13411 continue
13412 fi
13413 rm -f conftest.err conftest.$ac_ext
13414
13415 # OK, works on sane cases. Now check whether nonexistent headers
13416 # can be detected and how.
13417 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13418 /* end confdefs.h. */
13419 #include <ac_nonexistent.h>
13420 _ACEOF
13421 if ac_fn_cxx_try_cpp "$LINENO"; then :
13422 # Broken: success on invalid input.
13423 continue
13424 else
13425 # Passes both tests.
13426 ac_preproc_ok=:
13427 break
13428 fi
13429 rm -f conftest.err conftest.$ac_ext
13430
13431 done
13432 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
13433 rm -f conftest.err conftest.$ac_ext
13434 if $ac_preproc_ok; then :
13435
13436 else
13437 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
13438 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
13439 _lt_caught_CXX_error=yes; }
13440 fi
13441
13442 ac_ext=c
13443 ac_cpp='$CPP $CPPFLAGS'
13444 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
13445 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
13446 ac_compiler_gnu=$ac_cv_c_compiler_gnu
13447
13448 else
13449 _lt_caught_CXX_error=yes
13450 fi
13451
13452
13453
13454
13455 ac_ext=cpp
13456 ac_cpp='$CXXCPP $CPPFLAGS'
13457 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
13458 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
13459 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
13460
13461 archive_cmds_need_lc_CXX=no
13462 allow_undefined_flag_CXX=
13463 always_export_symbols_CXX=no
13464 archive_expsym_cmds_CXX=
13465 compiler_needs_object_CXX=no
13466 export_dynamic_flag_spec_CXX=
13467 hardcode_direct_CXX=no
13468 hardcode_direct_absolute_CXX=no
13469 hardcode_libdir_flag_spec_CXX=
13470 hardcode_libdir_flag_spec_ld_CXX=
13471 hardcode_libdir_separator_CXX=
13472 hardcode_minus_L_CXX=no
13473 hardcode_shlibpath_var_CXX=unsupported
13474 hardcode_automatic_CXX=no
13475 inherit_rpath_CXX=no
13476 module_cmds_CXX=
13477 module_expsym_cmds_CXX=
13478 link_all_deplibs_CXX=unknown
13479 old_archive_cmds_CXX=$old_archive_cmds
13480 no_undefined_flag_CXX=
13481 whole_archive_flag_spec_CXX=
13482 enable_shared_with_static_runtimes_CXX=no
13483
13484 # Source file extension for C++ test sources.
13485 ac_ext=cpp
13486
13487 # Object file extension for compiled C++ test sources.
13488 objext=o
13489 objext_CXX=$objext
13490
13491 # No sense in running all these tests if we already determined that
13492 # the CXX compiler isn't working. Some variables (like enable_shared)
13493 # are currently assumed to apply to all compilers on this platform,
13494 # and will be corrupted by setting them based on a non-working compiler.
13495 if test "$_lt_caught_CXX_error" != yes; then
13496 # Code to be used in simple compile tests
13497 lt_simple_compile_test_code="int some_variable = 0;"
13498
13499 # Code to be used in simple link tests
13500 lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
13501
13502 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
13503
13504
13505
13506
13507
13508
13509 # If no C compiler was specified, use CC.
13510 LTCC=${LTCC-"$CC"}
13511
13512 # If no C compiler flags were specified, use CFLAGS.
13513 LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
13514
13515 # Allow CC to be a program name with arguments.
13516 compiler=$CC
13517
13518
13519 # save warnings/boilerplate of simple test code
13520 ac_outfile=conftest.$ac_objext
13521 echo "$lt_simple_compile_test_code" >conftest.$ac_ext
13522 eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
13523 _lt_compiler_boilerplate=`cat conftest.err`
13524 $RM conftest*
13525
13526 ac_outfile=conftest.$ac_objext
13527 echo "$lt_simple_link_test_code" >conftest.$ac_ext
13528 eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
13529 _lt_linker_boilerplate=`cat conftest.err`
13530 $RM -r conftest*
13531
13532
13533 # Allow CC to be a program name with arguments.
13534 lt_save_CC=$CC
13535 lt_save_LD=$LD
13536 lt_save_GCC=$GCC
13537 GCC=$GXX
13538 lt_save_with_gnu_ld=$with_gnu_ld
13539 lt_save_path_LD=$lt_cv_path_LD
13540 if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
13541 lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
13542 else
13543 $as_unset lt_cv_prog_gnu_ld
13544 fi
13545 if test -n "${lt_cv_path_LDCXX+set}"; then
13546 lt_cv_path_LD=$lt_cv_path_LDCXX
13547 else
13548 $as_unset lt_cv_path_LD
13549 fi
13550 test -z "${LDCXX+set}" || LD=$LDCXX
13551 CC=${CXX-"c++"}
13552 compiler=$CC
13553 compiler_CXX=$CC
13554 for cc_temp in $compiler""; do
13555 case $cc_temp in
13556 compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
13557 distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
13558 \-*) ;;
13559 *) break;;
13560 esac
13561 done
13562 cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
13563
13564
13565 if test -n "$compiler"; then
13566 # We don't want -fno-exception when compiling C++ code, so set the
13567 # no_builtin_flag separately
13568 if test "$GXX" = yes; then
13569 lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
13570 else
13571 lt_prog_compiler_no_builtin_flag_CXX=
13572 fi
13573
13574 if test "$GXX" = yes; then
13575 # Set up default GNU C++ configuration
13576
13577
13578
13579 # Check whether --with-gnu-ld was given.
13580 if test "${with_gnu_ld+set}" = set; then :
13581 withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
13582 else
13583 with_gnu_ld=no
13584 fi
13585
13586 ac_prog=ld
13587 if test "$GCC" = yes; then
13588 # Check if gcc -print-prog-name=ld gives a path.
13589 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
13590 $as_echo_n "checking for ld used by $CC... " >&6; }
13591 case $host in
13592 *-*-mingw*)
13593 # gcc leaves a trailing carriage return which upsets mingw
13594 ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
13595 *)
13596 ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
13597 esac
13598 case $ac_prog in
13599 # Accept absolute paths.
13600 [\\/]* | ?:[\\/]*)
13601 re_direlt='/[^/][^/]*/\.\./'
13602 # Canonicalize the pathname of ld
13603 ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
13604 while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
13605 ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
13606 done
13607 test -z "$LD" && LD="$ac_prog"
13608 ;;
13609 "")
13610 # If it fails, then pretend we aren't using GCC.
13611 ac_prog=ld
13612 ;;
13613 *)
13614 # If it is relative, then search for the first ld in PATH.
13615 with_gnu_ld=unknown
13616 ;;
13617 esac
13618 elif test "$with_gnu_ld" = yes; then
13619 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
13620 $as_echo_n "checking for GNU ld... " >&6; }
13621 else
13622 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
13623 $as_echo_n "checking for non-GNU ld... " >&6; }
13624 fi
13625 if test "${lt_cv_path_LD+set}" = set; then :
13626 $as_echo_n "(cached) " >&6
13627 else
13628 if test -z "$LD"; then
13629 lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
13630 for ac_dir in $PATH; do
13631 IFS="$lt_save_ifs"
13632 test -z "$ac_dir" && ac_dir=.
13633 if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
13634 lt_cv_path_LD="$ac_dir/$ac_prog"
13635 # Check to see if the program is GNU ld. I'd rather use --version,
13636 # but apparently some variants of GNU ld only accept -v.
13637 # Break only if it was the GNU/non-GNU ld that we prefer.
13638 case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
13639 *GNU* | *'with BFD'*)
13640 test "$with_gnu_ld" != no && break
13641 ;;
13642 *)
13643 test "$with_gnu_ld" != yes && break
13644 ;;
13645 esac
13646 fi
13647 done
13648 IFS="$lt_save_ifs"
13649 else
13650 lt_cv_path_LD="$LD" # Let the user override the test with a path.
13651 fi
13652 fi
13653
13654 LD="$lt_cv_path_LD"
13655 if test -n "$LD"; then
13656 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
13657 $as_echo "$LD" >&6; }
13658 else
13659 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13660 $as_echo "no" >&6; }
13661 fi
13662 test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
13663 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
13664 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
13665 if test "${lt_cv_prog_gnu_ld+set}" = set; then :
13666 $as_echo_n "(cached) " >&6
13667 else
13668 # I'd rather use --version here, but apparently some GNU lds only accept -v.
13669 case `$LD -v 2>&1 </dev/null` in
13670 *GNU* | *'with BFD'*)
13671 lt_cv_prog_gnu_ld=yes
13672 ;;
13673 *)
13674 lt_cv_prog_gnu_ld=no
13675 ;;
13676 esac
13677 fi
13678 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
13679 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
13680 with_gnu_ld=$lt_cv_prog_gnu_ld
13681
13682
13683
13684
13685
13686
13687
13688 # Check if GNU C++ uses GNU ld as the underlying linker, since the
13689 # archiving commands below assume that GNU ld is being used.
13690 if test "$with_gnu_ld" = yes; then
13691 archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
13692 archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
13693
13694 hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
13695 export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
13696
13697 # If archive_cmds runs LD, not CC, wlarc should be empty
13698 # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
13699 # investigate it a little bit more. (MM)
13700 wlarc='${wl}'
13701
13702 # ancient GNU ld didn't support --whole-archive et. al.
13703 if eval "`$CC -print-prog-name=ld` --help 2>&1" |
13704 $GREP 'no-whole-archive' > /dev/null; then
13705 whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
13706 else
13707 whole_archive_flag_spec_CXX=
13708 fi
13709 else
13710 with_gnu_ld=no
13711 wlarc=
13712
13713 # A generic and very simple default shared library creation
13714 # command for GNU C++ for the case where it uses the native
13715 # linker, instead of GNU ld. If possible, this setting should
13716 # overridden to take advantage of the native linker features on
13717 # the platform it is being used on.
13718 archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
13719 fi
13720
13721 # Commands to make compiler produce verbose output that lists
13722 # what "hidden" libraries, object files and flags are used when
13723 # linking a shared library.
13724 output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
13725
13726 else
13727 GXX=no
13728 with_gnu_ld=no
13729 wlarc=
13730 fi
13731
13732 # PORTME: fill in a description of your system's C++ link characteristics
13733 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
13734 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
13735 ld_shlibs_CXX=yes
13736 case $host_os in
13737 aix3*)
13738 # FIXME: insert proper C++ library support
13739 ld_shlibs_CXX=no
13740 ;;
13741 aix[4-9]*)
13742 if test "$host_cpu" = ia64; then
13743 # On IA64, the linker does run time linking by default, so we don't
13744 # have to do anything special.
13745 aix_use_runtimelinking=no
13746 exp_sym_flag='-Bexport'
13747 no_entry_flag=""
13748 else
13749 aix_use_runtimelinking=no
13750
13751 # Test if we are trying to use run time linking or normal
13752 # AIX style linking. If -brtl is somewhere in LDFLAGS, we
13753 # need to do runtime linking.
13754 case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
13755 for ld_flag in $LDFLAGS; do
13756 case $ld_flag in
13757 *-brtl*)
13758 aix_use_runtimelinking=yes
13759 break
13760 ;;
13761 esac
13762 done
13763 ;;
13764 esac
13765
13766 exp_sym_flag='-bexport'
13767 no_entry_flag='-bnoentry'
13768 fi
13769
13770 # When large executables or shared objects are built, AIX ld can
13771 # have problems creating the table of contents. If linking a library
13772 # or program results in "error TOC overflow" add -mminimal-toc to
13773 # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
13774 # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
13775
13776 archive_cmds_CXX=''
13777 hardcode_direct_CXX=yes
13778 hardcode_direct_absolute_CXX=yes
13779 hardcode_libdir_separator_CXX=':'
13780 link_all_deplibs_CXX=yes
13781 file_list_spec_CXX='${wl}-f,'
13782
13783 if test "$GXX" = yes; then
13784 case $host_os in aix4.[012]|aix4.[012].*)
13785 # We only want to do this on AIX 4.2 and lower, the check
13786 # below for broken collect2 doesn't work under 4.3+
13787 collect2name=`${CC} -print-prog-name=collect2`
13788 if test -f "$collect2name" &&
13789 strings "$collect2name" | $GREP resolve_lib_name >/dev/null
13790 then
13791 # We have reworked collect2
13792 :
13793 else
13794 # We have old collect2
13795 hardcode_direct_CXX=unsupported
13796 # It fails to find uninstalled libraries when the uninstalled
13797 # path is not listed in the libpath. Setting hardcode_minus_L
13798 # to unsupported forces relinking
13799 hardcode_minus_L_CXX=yes
13800 hardcode_libdir_flag_spec_CXX='-L$libdir'
13801 hardcode_libdir_separator_CXX=
13802 fi
13803 esac
13804 shared_flag='-shared'
13805 if test "$aix_use_runtimelinking" = yes; then
13806 shared_flag="$shared_flag "'${wl}-G'
13807 fi
13808 else
13809 # not using gcc
13810 if test "$host_cpu" = ia64; then
13811 # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
13812 # chokes on -Wl,-G. The following line is correct:
13813 shared_flag='-G'
13814 else
13815 if test "$aix_use_runtimelinking" = yes; then
13816 shared_flag='${wl}-G'
13817 else
13818 shared_flag='${wl}-bM:SRE'
13819 fi
13820 fi
13821 fi
13822
13823 export_dynamic_flag_spec_CXX='${wl}-bexpall'
13824 # It seems that -bexpall does not export symbols beginning with
13825 # underscore (_), so it is better to generate a list of symbols to
13826 # export.
13827 always_export_symbols_CXX=yes
13828 if test "$aix_use_runtimelinking" = yes; then
13829 # Warning - without using the other runtime loading flags (-brtl),
13830 # -berok will link without error, but may produce a broken library.
13831 allow_undefined_flag_CXX='-berok'
13832 # Determine the default libpath from the value encoded in an empty
13833 # executable.
13834 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13835 /* end confdefs.h. */
13836
13837 int
13838 main ()
13839 {
13840
13841 ;
13842 return 0;
13843 }
13844 _ACEOF
13845 if ac_fn_cxx_try_link "$LINENO"; then :
13846
13847 lt_aix_libpath_sed='
13848 /Import File Strings/,/^$/ {
13849 /^0/ {
13850 s/^0 *\(.*\)$/\1/
13851 p
13852 }
13853 }'
13854 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
13855 # Check for a 64-bit object if we didn't find anything.
13856 if test -z "$aix_libpath"; then
13857 aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
13858 fi
13859 fi
13860 rm -f core conftest.err conftest.$ac_objext \
13861 conftest$ac_exeext conftest.$ac_ext
13862 if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
13863
13864 hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
13865
13866 archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
13867 else
13868 if test "$host_cpu" = ia64; then
13869 hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
13870 allow_undefined_flag_CXX="-z nodefs"
13871 archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
13872 else
13873 # Determine the default libpath from the value encoded in an
13874 # empty executable.
13875 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13876 /* end confdefs.h. */
13877
13878 int
13879 main ()
13880 {
13881
13882 ;
13883 return 0;
13884 }
13885 _ACEOF
13886 if ac_fn_cxx_try_link "$LINENO"; then :
13887
13888 lt_aix_libpath_sed='
13889 /Import File Strings/,/^$/ {
13890 /^0/ {
13891 s/^0 *\(.*\)$/\1/
13892 p
13893 }
13894 }'
13895 aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
13896 # Check for a 64-bit object if we didn't find anything.
13897 if test -z "$aix_libpath"; then
13898 aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
13899 fi
13900 fi
13901 rm -f core conftest.err conftest.$ac_objext \
13902 conftest$ac_exeext conftest.$ac_ext
13903 if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
13904
13905 hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
13906 # Warning - without using the other run time loading flags,
13907 # -berok will link without error, but may produce a broken library.
13908 no_undefined_flag_CXX=' ${wl}-bernotok'
13909 allow_undefined_flag_CXX=' ${wl}-berok'
13910 # Exported symbols can be pulled into shared objects from archives
13911 whole_archive_flag_spec_CXX='$convenience'
13912 archive_cmds_need_lc_CXX=yes
13913 # This is similar to how AIX traditionally builds its shared
13914 # libraries.
13915 archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
13916 fi
13917 fi
13918 ;;
13919
13920 beos*)
13921 if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
13922 allow_undefined_flag_CXX=unsupported
13923 # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
13924 # support --undefined. This deserves some investigation. FIXME
13925 archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
13926 else
13927 ld_shlibs_CXX=no
13928 fi
13929 ;;
13930
13931 chorus*)
13932 case $cc_basename in
13933 *)
13934 # FIXME: insert proper C++ library support
13935 ld_shlibs_CXX=no
13936 ;;
13937 esac
13938 ;;
13939
13940 cygwin* | mingw* | pw32* | cegcc*)
13941 # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
13942 # as there is no search path for DLLs.
13943 hardcode_libdir_flag_spec_CXX='-L$libdir'
13944 allow_undefined_flag_CXX=unsupported
13945 always_export_symbols_CXX=no
13946 enable_shared_with_static_runtimes_CXX=yes
13947
13948 if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
13949 archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
13950 # If the export-symbols file already is a .def file (1st line
13951 # is EXPORTS), use it as is; otherwise, prepend...
13952 archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
13953 cp $export_symbols $output_objdir/$soname.def;
13954 else
13955 echo EXPORTS > $output_objdir/$soname.def;
13956 cat $export_symbols >> $output_objdir/$soname.def;
13957 fi~
13958 $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
13959 else
13960 ld_shlibs_CXX=no
13961 fi
13962 ;;
13963 darwin* | rhapsody*)
13964
13965
13966 archive_cmds_need_lc_CXX=no
13967 hardcode_direct_CXX=no
13968 hardcode_automatic_CXX=yes
13969 hardcode_shlibpath_var_CXX=unsupported
13970 whole_archive_flag_spec_CXX=''
13971 link_all_deplibs_CXX=yes
13972 allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
13973 case $cc_basename in
13974 ifort*) _lt_dar_can_shared=yes ;;
13975 *) _lt_dar_can_shared=$GCC ;;
13976 esac
13977 if test "$_lt_dar_can_shared" = "yes"; then
13978 output_verbose_link_cmd=echo
13979 archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
13980 module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
13981 archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
13982 module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
13983 if test "$lt_cv_apple_cc_single_mod" != "yes"; then
13984 archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
13985 archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
13986 fi
13987
13988 else
13989 ld_shlibs_CXX=no
13990 fi
13991
13992 ;;
13993
13994 dgux*)
13995 case $cc_basename in
13996 ec++*)
13997 # FIXME: insert proper C++ library support
13998 ld_shlibs_CXX=no
13999 ;;
14000 ghcx*)
14001 # Green Hills C++ Compiler
14002 # FIXME: insert proper C++ library support
14003 ld_shlibs_CXX=no
14004 ;;
14005 *)
14006 # FIXME: insert proper C++ library support
14007 ld_shlibs_CXX=no
14008 ;;
14009 esac
14010 ;;
14011
14012 freebsd[12]*)
14013 # C++ shared libraries reported to be fairly broken before
14014 # switch to ELF
14015 ld_shlibs_CXX=no
14016 ;;
14017
14018 freebsd-elf*)
14019 archive_cmds_need_lc_CXX=no
14020 ;;
14021
14022 freebsd* | dragonfly*)
14023 # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
14024 # conventions
14025 ld_shlibs_CXX=yes
14026 ;;
14027
14028 gnu*)
14029 ;;
14030
14031 hpux9*)
14032 hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
14033 hardcode_libdir_separator_CXX=:
14034 export_dynamic_flag_spec_CXX='${wl}-E'
14035 hardcode_direct_CXX=yes
14036 hardcode_minus_L_CXX=yes # Not in the search PATH,
14037 # but as the default
14038 # location of the library.
14039
14040 case $cc_basename in
14041 CC*)
14042 # FIXME: insert proper C++ library support
14043 ld_shlibs_CXX=no
14044 ;;
14045 aCC*)
14046 archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
14047 # Commands to make compiler produce verbose output that lists
14048 # what "hidden" libraries, object files and flags are used when
14049 # linking a shared library.
14050 #
14051 # There doesn't appear to be a way to prevent this compiler from
14052 # explicitly linking system object files so we need to strip them
14053 # from the output so that they don't get included in the library
14054 # dependencies.
14055 output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
14056 ;;
14057 *)
14058 if test "$GXX" = yes; then
14059 archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
14060 else
14061 # FIXME: insert proper C++ library support
14062 ld_shlibs_CXX=no
14063 fi
14064 ;;
14065 esac
14066 ;;
14067
14068 hpux10*|hpux11*)
14069 if test $with_gnu_ld = no; then
14070 hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
14071 hardcode_libdir_separator_CXX=:
14072
14073 case $host_cpu in
14074 hppa*64*|ia64*)
14075 ;;
14076 *)
14077 export_dynamic_flag_spec_CXX='${wl}-E'
14078 ;;
14079 esac
14080 fi
14081 case $host_cpu in
14082 hppa*64*|ia64*)
14083 hardcode_direct_CXX=no
14084 hardcode_shlibpath_var_CXX=no
14085 ;;
14086 *)
14087 hardcode_direct_CXX=yes
14088 hardcode_direct_absolute_CXX=yes
14089 hardcode_minus_L_CXX=yes # Not in the search PATH,
14090 # but as the default
14091 # location of the library.
14092 ;;
14093 esac
14094
14095 case $cc_basename in
14096 CC*)
14097 # FIXME: insert proper C++ library support
14098 ld_shlibs_CXX=no
14099 ;;
14100 aCC*)
14101 case $host_cpu in
14102 hppa*64*)
14103 archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14104 ;;
14105 ia64*)
14106 archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14107 ;;
14108 *)
14109 archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14110 ;;
14111 esac
14112 # Commands to make compiler produce verbose output that lists
14113 # what "hidden" libraries, object files and flags are used when
14114 # linking a shared library.
14115 #
14116 # There doesn't appear to be a way to prevent this compiler from
14117 # explicitly linking system object files so we need to strip them
14118 # from the output so that they don't get included in the library
14119 # dependencies.
14120 output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
14121 ;;
14122 *)
14123 if test "$GXX" = yes; then
14124 if test $with_gnu_ld = no; then
14125 case $host_cpu in
14126 hppa*64*)
14127 archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14128 ;;
14129 ia64*)
14130 archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14131 ;;
14132 *)
14133 archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14134 ;;
14135 esac
14136 fi
14137 else
14138 # FIXME: insert proper C++ library support
14139 ld_shlibs_CXX=no
14140 fi
14141 ;;
14142 esac
14143 ;;
14144
14145 interix[3-9]*)
14146 hardcode_direct_CXX=no
14147 hardcode_shlibpath_var_CXX=no
14148 hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
14149 export_dynamic_flag_spec_CXX='${wl}-E'
14150 # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
14151 # Instead, shared libraries are loaded at an image base (0x10000000 by
14152 # default) and relocated if they conflict, which is a slow very memory
14153 # consuming and fragmenting process. To avoid this, we pick a random,
14154 # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
14155 # time. Moving up from 0x10000000 also allows more sbrk(2) space.
14156 archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
14157 archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
14158 ;;
14159 irix5* | irix6*)
14160 case $cc_basename in
14161 CC*)
14162 # SGI C++
14163 archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
14164
14165 # Archives containing C++ object files must be created using
14166 # "CC -ar", where "CC" is the IRIX C++ compiler. This is
14167 # necessary to make sure instantiated templates are included
14168 # in the archive.
14169 old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
14170 ;;
14171 *)
14172 if test "$GXX" = yes; then
14173 if test "$with_gnu_ld" = no; then
14174 archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
14175 else
14176 archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
14177 fi
14178 fi
14179 link_all_deplibs_CXX=yes
14180 ;;
14181 esac
14182 hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
14183 hardcode_libdir_separator_CXX=:
14184 inherit_rpath_CXX=yes
14185 ;;
14186
14187 linux* | k*bsd*-gnu | kopensolaris*-gnu)
14188 case $cc_basename in
14189 KCC*)
14190 # Kuck and Associates, Inc. (KAI) C++ Compiler
14191
14192 # KCC will only create a shared library if the output file
14193 # ends with ".so" (or ".sl" for HP-UX), so rename the library
14194 # to its proper name (with version) after linking.
14195 archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
14196 archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
14197 # Commands to make compiler produce verbose output that lists
14198 # what "hidden" libraries, object files and flags are used when
14199 # linking a shared library.
14200 #
14201 # There doesn't appear to be a way to prevent this compiler from
14202 # explicitly linking system object files so we need to strip them
14203 # from the output so that they don't get included in the library
14204 # dependencies.
14205 output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
14206
14207 hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
14208 export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
14209
14210 # Archives containing C++ object files must be created using
14211 # "CC -Bstatic", where "CC" is the KAI C++ compiler.
14212 old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
14213 ;;
14214 icpc* | ecpc* )
14215 # Intel C++
14216 with_gnu_ld=yes
14217 # version 8.0 and above of icpc choke on multiply defined symbols
14218 # if we add $predep_objects and $postdep_objects, however 7.1 and
14219 # earlier do not add the objects themselves.
14220 case `$CC -V 2>&1` in
14221 *"Version 7."*)
14222 archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
14223 archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
14224 ;;
14225 *) # Version 8.0 or newer
14226 tmp_idyn=
14227 case $host_cpu in
14228 ia64*) tmp_idyn=' -i_dynamic';;
14229 esac
14230 archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
14231 archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
14232 ;;
14233 esac
14234 archive_cmds_need_lc_CXX=no
14235 hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
14236 export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
14237 whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
14238 ;;
14239 pgCC* | pgcpp*)
14240 # Portland Group C++ compiler
14241 case `$CC -V` in
14242 *pgCC\ [1-5]* | *pgcpp\ [1-5]*)
14243 prelink_cmds_CXX='tpldir=Template.dir~
14244 rm -rf $tpldir~
14245 $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
14246 compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
14247 old_archive_cmds_CXX='tpldir=Template.dir~
14248 rm -rf $tpldir~
14249 $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
14250 $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
14251 $RANLIB $oldlib'
14252 archive_cmds_CXX='tpldir=Template.dir~
14253 rm -rf $tpldir~
14254 $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
14255 $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
14256 archive_expsym_cmds_CXX='tpldir=Template.dir~
14257 rm -rf $tpldir~
14258 $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
14259 $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
14260 ;;
14261 *) # Version 6 will use weak symbols
14262 archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
14263 archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
14264 ;;
14265 esac
14266
14267 hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
14268 export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
14269 whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
14270 ;;
14271 cxx*)
14272 # Compaq C++
14273 archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
14274 archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
14275
14276 runpath_var=LD_RUN_PATH
14277 hardcode_libdir_flag_spec_CXX='-rpath $libdir'
14278 hardcode_libdir_separator_CXX=:
14279
14280 # Commands to make compiler produce verbose output that lists
14281 # what "hidden" libraries, object files and flags are used when
14282 # linking a shared library.
14283 #
14284 # There doesn't appear to be a way to prevent this compiler from
14285 # explicitly linking system object files so we need to strip them
14286 # from the output so that they don't get included in the library
14287 # dependencies.
14288 output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
14289 ;;
14290 xl*)
14291 # IBM XL 8.0 on PPC, with GNU ld
14292 hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
14293 export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
14294 archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
14295 if test "x$supports_anon_versioning" = xyes; then
14296 archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
14297 cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
14298 echo "local: *; };" >> $output_objdir/$libname.ver~
14299 $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
14300 fi
14301 ;;
14302 *)
14303 case `$CC -V 2>&1 | sed 5q` in
14304 *Sun\ C*)
14305 # Sun C++ 5.9
14306 no_undefined_flag_CXX=' -zdefs'
14307 archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14308 archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
14309 hardcode_libdir_flag_spec_CXX='-R$libdir'
14310 whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
14311 compiler_needs_object_CXX=yes
14312
14313 # Not sure whether something based on
14314 # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
14315 # would be better.
14316 output_verbose_link_cmd='echo'
14317
14318 # Archives containing C++ object files must be created using
14319 # "CC -xar", where "CC" is the Sun C++ compiler. This is
14320 # necessary to make sure instantiated templates are included
14321 # in the archive.
14322 old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
14323 ;;
14324 esac
14325 ;;
14326 esac
14327 ;;
14328
14329 lynxos*)
14330 # FIXME: insert proper C++ library support
14331 ld_shlibs_CXX=no
14332 ;;
14333
14334 m88k*)
14335 # FIXME: insert proper C++ library support
14336 ld_shlibs_CXX=no
14337 ;;
14338
14339 mvs*)
14340 case $cc_basename in
14341 cxx*)
14342 # FIXME: insert proper C++ library support
14343 ld_shlibs_CXX=no
14344 ;;
14345 *)
14346 # FIXME: insert proper C++ library support
14347 ld_shlibs_CXX=no
14348 ;;
14349 esac
14350 ;;
14351
14352 netbsd*)
14353 if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
14354 archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
14355 wlarc=
14356 hardcode_libdir_flag_spec_CXX='-R$libdir'
14357 hardcode_direct_CXX=yes
14358 hardcode_shlibpath_var_CXX=no
14359 fi
14360 # Workaround some broken pre-1.5 toolchains
14361 output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
14362 ;;
14363
14364 *nto* | *qnx*)
14365 ld_shlibs_CXX=yes
14366 ;;
14367
14368 openbsd2*)
14369 # C++ shared libraries are fairly broken
14370 ld_shlibs_CXX=no
14371 ;;
14372
14373 openbsd*)
14374 if test -f /usr/libexec/ld.so; then
14375 hardcode_direct_CXX=yes
14376 hardcode_shlibpath_var_CXX=no
14377 hardcode_direct_absolute_CXX=yes
14378 archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
14379 hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
14380 if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
14381 archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
14382 export_dynamic_flag_spec_CXX='${wl}-E'
14383 whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
14384 fi
14385 output_verbose_link_cmd=echo
14386 else
14387 ld_shlibs_CXX=no
14388 fi
14389 ;;
14390
14391 osf3* | osf4* | osf5*)
14392 case $cc_basename in
14393 KCC*)
14394 # Kuck and Associates, Inc. (KAI) C++ Compiler
14395
14396 # KCC will only create a shared library if the output file
14397 # ends with ".so" (or ".sl" for HP-UX), so rename the library
14398 # to its proper name (with version) after linking.
14399 archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
14400
14401 hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
14402 hardcode_libdir_separator_CXX=:
14403
14404 # Archives containing C++ object files must be created using
14405 # the KAI C++ compiler.
14406 case $host in
14407 osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
14408 *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
14409 esac
14410 ;;
14411 RCC*)
14412 # Rational C++ 2.4.1
14413 # FIXME: insert proper C++ library support
14414 ld_shlibs_CXX=no
14415 ;;
14416 cxx*)
14417 case $host in
14418 osf3*)
14419 allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
14420 archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
14421 hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
14422 ;;
14423 *)
14424 allow_undefined_flag_CXX=' -expect_unresolved \*'
14425 archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
14426 archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
14427 echo "-hidden">> $lib.exp~
14428 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
14429 $RM $lib.exp'
14430 hardcode_libdir_flag_spec_CXX='-rpath $libdir'
14431 ;;
14432 esac
14433
14434 hardcode_libdir_separator_CXX=:
14435
14436 # Commands to make compiler produce verbose output that lists
14437 # what "hidden" libraries, object files and flags are used when
14438 # linking a shared library.
14439 #
14440 # There doesn't appear to be a way to prevent this compiler from
14441 # explicitly linking system object files so we need to strip them
14442 # from the output so that they don't get included in the library
14443 # dependencies.
14444 output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
14445 ;;
14446 *)
14447 if test "$GXX" = yes && test "$with_gnu_ld" = no; then
14448 allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
14449 case $host in
14450 osf3*)
14451 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
14452 ;;
14453 *)
14454 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
14455 ;;
14456 esac
14457
14458 hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
14459 hardcode_libdir_separator_CXX=:
14460
14461 # Commands to make compiler produce verbose output that lists
14462 # what "hidden" libraries, object files and flags are used when
14463 # linking a shared library.
14464 output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
14465
14466 else
14467 # FIXME: insert proper C++ library support
14468 ld_shlibs_CXX=no
14469 fi
14470 ;;
14471 esac
14472 ;;
14473
14474 psos*)
14475 # FIXME: insert proper C++ library support
14476 ld_shlibs_CXX=no
14477 ;;
14478
14479 sunos4*)
14480 case $cc_basename in
14481 CC*)
14482 # Sun C++ 4.x
14483 # FIXME: insert proper C++ library support
14484 ld_shlibs_CXX=no
14485 ;;
14486 lcc*)
14487 # Lucid
14488 # FIXME: insert proper C++ library support
14489 ld_shlibs_CXX=no
14490 ;;
14491 *)
14492 # FIXME: insert proper C++ library support
14493 ld_shlibs_CXX=no
14494 ;;
14495 esac
14496 ;;
14497
14498 solaris*)
14499 case $cc_basename in
14500 CC*)
14501 # Sun C++ 4.2, 5.x and Centerline C++
14502 archive_cmds_need_lc_CXX=yes
14503 no_undefined_flag_CXX=' -zdefs'
14504 archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
14505 archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
14506 $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
14507
14508 hardcode_libdir_flag_spec_CXX='-R$libdir'
14509 hardcode_shlibpath_var_CXX=no
14510 case $host_os in
14511 solaris2.[0-5] | solaris2.[0-5].*) ;;
14512 *)
14513 # The compiler driver will combine and reorder linker options,
14514 # but understands `-z linker_flag'.
14515 # Supported since Solaris 2.6 (maybe 2.5.1?)
14516 whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
14517 ;;
14518 esac
14519 link_all_deplibs_CXX=yes
14520
14521 output_verbose_link_cmd='echo'
14522
14523 # Archives containing C++ object files must be created using
14524 # "CC -xar", where "CC" is the Sun C++ compiler. This is
14525 # necessary to make sure instantiated templates are included
14526 # in the archive.
14527 old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
14528 ;;
14529 gcx*)
14530 # Green Hills C++ Compiler
14531 archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
14532
14533 # The C++ compiler must be used to create the archive.
14534 old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
14535 ;;
14536 *)
14537 # GNU C++ compiler with Solaris linker
14538 if test "$GXX" = yes && test "$with_gnu_ld" = no; then
14539 no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
14540 if $CC --version | $GREP -v '^2\.7' > /dev/null; then
14541 archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
14542 archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
14543 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
14544
14545 # Commands to make compiler produce verbose output that lists
14546 # what "hidden" libraries, object files and flags are used when
14547 # linking a shared library.
14548 output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
14549 else
14550 # g++ 2.7 appears to require `-G' NOT `-shared' on this
14551 # platform.
14552 archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
14553 archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
14554 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
14555
14556 # Commands to make compiler produce verbose output that lists
14557 # what "hidden" libraries, object files and flags are used when
14558 # linking a shared library.
14559 output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
14560 fi
14561
14562 hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
14563 case $host_os in
14564 solaris2.[0-5] | solaris2.[0-5].*) ;;
14565 *)
14566 whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
14567 ;;
14568 esac
14569 fi
14570 ;;
14571 esac
14572 ;;
14573
14574 sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
14575 no_undefined_flag_CXX='${wl}-z,text'
14576 archive_cmds_need_lc_CXX=no
14577 hardcode_shlibpath_var_CXX=no
14578 runpath_var='LD_RUN_PATH'
14579
14580 case $cc_basename in
14581 CC*)
14582 archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14583 archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14584 ;;
14585 *)
14586 archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14587 archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14588 ;;
14589 esac
14590 ;;
14591
14592 sysv5* | sco3.2v5* | sco5v6*)
14593 # Note: We can NOT use -z defs as we might desire, because we do not
14594 # link with -lc, and that would cause any symbols used from libc to
14595 # always be unresolved, which means just about no library would
14596 # ever link correctly. If we're not using GNU ld we use -z text
14597 # though, which does catch some bad symbols but isn't as heavy-handed
14598 # as -z defs.
14599 no_undefined_flag_CXX='${wl}-z,text'
14600 allow_undefined_flag_CXX='${wl}-z,nodefs'
14601 archive_cmds_need_lc_CXX=no
14602 hardcode_shlibpath_var_CXX=no
14603 hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir'
14604 hardcode_libdir_separator_CXX=':'
14605 link_all_deplibs_CXX=yes
14606 export_dynamic_flag_spec_CXX='${wl}-Bexport'
14607 runpath_var='LD_RUN_PATH'
14608
14609 case $cc_basename in
14610 CC*)
14611 archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14612 archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14613 ;;
14614 *)
14615 archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14616 archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
14617 ;;
14618 esac
14619 ;;
14620
14621 tandem*)
14622 case $cc_basename in
14623 NCC*)
14624 # NonStop-UX NCC 3.20
14625 # FIXME: insert proper C++ library support
14626 ld_shlibs_CXX=no
14627 ;;
14628 *)
14629 # FIXME: insert proper C++ library support
14630 ld_shlibs_CXX=no
14631 ;;
14632 esac
14633 ;;
14634
14635 vxworks*)
14636 # FIXME: insert proper C++ library support
14637 ld_shlibs_CXX=no
14638 ;;
14639
14640 *)
14641 # FIXME: insert proper C++ library support
14642 ld_shlibs_CXX=no
14643 ;;
14644 esac
14645
14646 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
14647 $as_echo "$ld_shlibs_CXX" >&6; }
14648 test "$ld_shlibs_CXX" = no && can_build_shared=no
14649
14650 GCC_CXX="$GXX"
14651 LD_CXX="$LD"
14652
14653 ## CAVEAT EMPTOR:
14654 ## There is no encapsulation within the following macros, do not change
14655 ## the running order or otherwise move them around unless you know exactly
14656 ## what you are doing...
14657 # Dependencies to place before and after the object being linked:
14658 predep_objects_CXX=
14659 postdep_objects_CXX=
14660 predeps_CXX=
14661 postdeps_CXX=
14662 compiler_lib_search_path_CXX=
14663
14664 cat > conftest.$ac_ext <<_LT_EOF
14665 class Foo
14666 {
14667 public:
14668 Foo (void) { a = 0; }
14669 private:
14670 int a;
14671 };
14672 _LT_EOF
14673
14674 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
14675 (eval $ac_compile) 2>&5
14676 ac_status=$?
14677 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
14678 test $ac_status = 0; }; then
14679 # Parse the compiler output and extract the necessary
14680 # objects, libraries and library flags.
14681
14682 # Sentinel used to keep track of whether or not we are before
14683 # the conftest object file.
14684 pre_test_object_deps_done=no
14685
14686 for p in `eval "$output_verbose_link_cmd"`; do
14687 case $p in
14688
14689 -L* | -R* | -l*)
14690 # Some compilers place space between "-{L,R}" and the path.
14691 # Remove the space.
14692 if test $p = "-L" ||
14693 test $p = "-R"; then
14694 prev=$p
14695 continue
14696 else
14697 prev=
14698 fi
14699
14700 if test "$pre_test_object_deps_done" = no; then
14701 case $p in
14702 -L* | -R*)
14703 # Internal compiler library paths should come after those
14704 # provided the user. The postdeps already come after the
14705 # user supplied libs so there is no need to process them.
14706 if test -z "$compiler_lib_search_path_CXX"; then
14707 compiler_lib_search_path_CXX="${prev}${p}"
14708 else
14709 compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
14710 fi
14711 ;;
14712 # The "-l" case would never come before the object being
14713 # linked, so don't bother handling this case.
14714 esac
14715 else
14716 if test -z "$postdeps_CXX"; then
14717 postdeps_CXX="${prev}${p}"
14718 else
14719 postdeps_CXX="${postdeps_CXX} ${prev}${p}"
14720 fi
14721 fi
14722 ;;
14723
14724 *.$objext)
14725 # This assumes that the test object file only shows up
14726 # once in the compiler output.
14727 if test "$p" = "conftest.$objext"; then
14728 pre_test_object_deps_done=yes
14729 continue
14730 fi
14731
14732 if test "$pre_test_object_deps_done" = no; then
14733 if test -z "$predep_objects_CXX"; then
14734 predep_objects_CXX="$p"
14735 else
14736 predep_objects_CXX="$predep_objects_CXX $p"
14737 fi
14738 else
14739 if test -z "$postdep_objects_CXX"; then
14740 postdep_objects_CXX="$p"
14741 else
14742 postdep_objects_CXX="$postdep_objects_CXX $p"
14743 fi
14744 fi
14745 ;;
14746
14747 *) ;; # Ignore the rest.
14748
14749 esac
14750 done
14751
14752 # Clean up.
14753 rm -f a.out a.exe
14754 else
14755 echo "libtool.m4: error: problem compiling CXX test program"
14756 fi
14757
14758 $RM -f confest.$objext
14759
14760 # PORTME: override above test on systems where it is broken
14761 case $host_os in
14762 interix[3-9]*)
14763 # Interix 3.5 installs completely hosed .la files for C++, so rather than
14764 # hack all around it, let's just trust "g++" to DTRT.
14765 predep_objects_CXX=
14766 postdep_objects_CXX=
14767 postdeps_CXX=
14768 ;;
14769
14770 linux*)
14771 case `$CC -V 2>&1 | sed 5q` in
14772 *Sun\ C*)
14773 # Sun C++ 5.9
14774
14775 # The more standards-conforming stlport4 library is
14776 # incompatible with the Cstd library. Avoid specifying
14777 # it if it's in CXXFLAGS. Ignore libCrun as
14778 # -library=stlport4 depends on it.
14779 case " $CXX $CXXFLAGS " in
14780 *" -library=stlport4 "*)
14781 solaris_use_stlport4=yes
14782 ;;
14783 esac
14784
14785 if test "$solaris_use_stlport4" != yes; then
14786 postdeps_CXX='-library=Cstd -library=Crun'
14787 fi
14788 ;;
14789 esac
14790 ;;
14791
14792 solaris*)
14793 case $cc_basename in
14794 CC*)
14795 # The more standards-conforming stlport4 library is
14796 # incompatible with the Cstd library. Avoid specifying
14797 # it if it's in CXXFLAGS. Ignore libCrun as
14798 # -library=stlport4 depends on it.
14799 case " $CXX $CXXFLAGS " in
14800 *" -library=stlport4 "*)
14801 solaris_use_stlport4=yes
14802 ;;
14803 esac
14804
14805 # Adding this requires a known-good setup of shared libraries for
14806 # Sun compiler versions before 5.6, else PIC objects from an old
14807 # archive will be linked into the output, leading to subtle bugs.
14808 if test "$solaris_use_stlport4" != yes; then
14809 postdeps_CXX='-library=Cstd -library=Crun'
14810 fi
14811 ;;
14812 esac
14813 ;;
14814 esac
14815
14816
14817 case " $postdeps_CXX " in
14818 *" -lc "*) archive_cmds_need_lc_CXX=no ;;
14819 esac
14820 compiler_lib_search_dirs_CXX=
14821 if test -n "${compiler_lib_search_path_CXX}"; then
14822 compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
14823 fi
14824
14825
14826
14827
14828
14829
14830
14831
14832
14833
14834
14835
14836
14837
14838
14839
14840
14841
14842
14843
14844
14845
14846
14847
14848
14849
14850
14851
14852
14853
14854
14855 lt_prog_compiler_wl_CXX=
14856 lt_prog_compiler_pic_CXX=
14857 lt_prog_compiler_static_CXX=
14858
14859 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
14860 $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
14861
14862 # C++ specific cases for pic, static, wl, etc.
14863 if test "$GXX" = yes; then
14864 lt_prog_compiler_wl_CXX='-Wl,'
14865 lt_prog_compiler_static_CXX='-static'
14866
14867 case $host_os in
14868 aix*)
14869 # All AIX code is PIC.
14870 if test "$host_cpu" = ia64; then
14871 # AIX 5 now supports IA64 processor
14872 lt_prog_compiler_static_CXX='-Bstatic'
14873 fi
14874 ;;
14875
14876 amigaos*)
14877 case $host_cpu in
14878 powerpc)
14879 # see comment about AmigaOS4 .so support
14880 lt_prog_compiler_pic_CXX='-fPIC'
14881 ;;
14882 m68k)
14883 # FIXME: we need at least 68020 code to build shared libraries, but
14884 # adding the `-m68020' flag to GCC prevents building anything better,
14885 # like `-m68040'.
14886 lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
14887 ;;
14888 esac
14889 ;;
14890
14891 beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
14892 # PIC is the default for these OSes.
14893 ;;
14894 mingw* | cygwin* | os2* | pw32* | cegcc*)
14895 # This hack is so that the source file can tell whether it is being
14896 # built for inclusion in a dll (and should export symbols for example).
14897 # Although the cygwin gcc ignores -fPIC, still need this for old-style
14898 # (--disable-auto-import) libraries
14899 lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
14900 ;;
14901 darwin* | rhapsody*)
14902 # PIC is the default on this platform
14903 # Common symbols not allowed in MH_DYLIB files
14904 lt_prog_compiler_pic_CXX='-fno-common'
14905 ;;
14906 *djgpp*)
14907 # DJGPP does not support shared libraries at all
14908 lt_prog_compiler_pic_CXX=
14909 ;;
14910 interix[3-9]*)
14911 # Interix 3.x gcc -fpic/-fPIC options generate broken code.
14912 # Instead, we relocate shared libraries at runtime.
14913 ;;
14914 sysv4*MP*)
14915 if test -d /usr/nec; then
14916 lt_prog_compiler_pic_CXX=-Kconform_pic
14917 fi
14918 ;;
14919 hpux*)
14920 # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
14921 # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
14922 # sets the default TLS model and affects inlining.
14923 case $host_cpu in
14924 hppa*64*)
14925 ;;
14926 *)
14927 lt_prog_compiler_pic_CXX='-fPIC'
14928 ;;
14929 esac
14930 ;;
14931 *qnx* | *nto*)
14932 # QNX uses GNU C++, but need to define -shared option too, otherwise
14933 # it will coredump.
14934 lt_prog_compiler_pic_CXX='-fPIC -shared'
14935 ;;
14936 *)
14937 lt_prog_compiler_pic_CXX='-fPIC'
14938 ;;
14939 esac
14940 else
14941 case $host_os in
14942 aix[4-9]*)
14943 # All AIX code is PIC.
14944 if test "$host_cpu" = ia64; then
14945 # AIX 5 now supports IA64 processor
14946 lt_prog_compiler_static_CXX='-Bstatic'
14947 else
14948 lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
14949 fi
14950 ;;
14951 chorus*)
14952 case $cc_basename in
14953 cxch68*)
14954 # Green Hills C++ Compiler
14955 # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
14956 ;;
14957 esac
14958 ;;
14959 dgux*)
14960 case $cc_basename in
14961 ec++*)
14962 lt_prog_compiler_pic_CXX='-KPIC'
14963 ;;
14964 ghcx*)
14965 # Green Hills C++ Compiler
14966 lt_prog_compiler_pic_CXX='-pic'
14967 ;;
14968 *)
14969 ;;
14970 esac
14971 ;;
14972 freebsd* | dragonfly*)
14973 # FreeBSD uses GNU C++
14974 ;;
14975 hpux9* | hpux10* | hpux11*)
14976 case $cc_basename in
14977 CC*)
14978 lt_prog_compiler_wl_CXX='-Wl,'
14979 lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
14980 if test "$host_cpu" != ia64; then
14981 lt_prog_compiler_pic_CXX='+Z'
14982 fi
14983 ;;
14984 aCC*)
14985 lt_prog_compiler_wl_CXX='-Wl,'
14986 lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
14987 case $host_cpu in
14988 hppa*64*|ia64*)
14989 # +Z the default
14990 ;;
14991 *)
14992 lt_prog_compiler_pic_CXX='+Z'
14993 ;;
14994 esac
14995 ;;
14996 *)
14997 ;;
14998 esac
14999 ;;
15000 interix*)
15001 # This is c89, which is MS Visual C++ (no shared libs)
15002 # Anyone wants to do a port?
15003 ;;
15004 irix5* | irix6* | nonstopux*)
15005 case $cc_basename in
15006 CC*)
15007 lt_prog_compiler_wl_CXX='-Wl,'
15008 lt_prog_compiler_static_CXX='-non_shared'
15009 # CC pic flag -KPIC is the default.
15010 ;;
15011 *)
15012 ;;
15013 esac
15014 ;;
15015 linux* | k*bsd*-gnu | kopensolaris*-gnu)
15016 case $cc_basename in
15017 KCC*)
15018 # KAI C++ Compiler
15019 lt_prog_compiler_wl_CXX='--backend -Wl,'
15020 lt_prog_compiler_pic_CXX='-fPIC'
15021 ;;
15022 ecpc* )
15023 # old Intel C++ for x86_64 which still supported -KPIC.
15024 lt_prog_compiler_wl_CXX='-Wl,'
15025 lt_prog_compiler_pic_CXX='-KPIC'
15026 lt_prog_compiler_static_CXX='-static'
15027 ;;
15028 icpc* )
15029 # Intel C++, used to be incompatible with GCC.
15030 # ICC 10 doesn't accept -KPIC any more.
15031 lt_prog_compiler_wl_CXX='-Wl,'
15032 lt_prog_compiler_pic_CXX='-fPIC'
15033 lt_prog_compiler_static_CXX='-static'
15034 ;;
15035 pgCC* | pgcpp*)
15036 # Portland Group C++ compiler
15037 lt_prog_compiler_wl_CXX='-Wl,'
15038 lt_prog_compiler_pic_CXX='-fpic'
15039 lt_prog_compiler_static_CXX='-Bstatic'
15040 ;;
15041 cxx*)
15042 # Compaq C++
15043 # Make sure the PIC flag is empty. It appears that all Alpha
15044 # Linux and Compaq Tru64 Unix objects are PIC.
15045 lt_prog_compiler_pic_CXX=
15046 lt_prog_compiler_static_CXX='-non_shared'
15047 ;;
15048 xlc* | xlC*)
15049 # IBM XL 8.0 on PPC
15050 lt_prog_compiler_wl_CXX='-Wl,'
15051 lt_prog_compiler_pic_CXX='-qpic'
15052 lt_prog_compiler_static_CXX='-qstaticlink'
15053 ;;
15054 *)
15055 case `$CC -V 2>&1 | sed 5q` in
15056 *Sun\ C*)
15057 # Sun C++ 5.9
15058 lt_prog_compiler_pic_CXX='-KPIC'
15059 lt_prog_compiler_static_CXX='-Bstatic'
15060 lt_prog_compiler_wl_CXX='-Qoption ld '
15061 ;;
15062 esac
15063 ;;
15064 esac
15065 ;;
15066 lynxos*)
15067 ;;
15068 m88k*)
15069 ;;
15070 mvs*)
15071 case $cc_basename in
15072 cxx*)
15073 lt_prog_compiler_pic_CXX='-W c,exportall'
15074 ;;
15075 *)
15076 ;;
15077 esac
15078 ;;
15079 netbsd* | netbsdelf*-gnu)
15080 ;;
15081 *qnx* | *nto*)
15082 # QNX uses GNU C++, but need to define -shared option too, otherwise
15083 # it will coredump.
15084 lt_prog_compiler_pic_CXX='-fPIC -shared'
15085 ;;
15086 osf3* | osf4* | osf5*)
15087 case $cc_basename in
15088 KCC*)
15089 lt_prog_compiler_wl_CXX='--backend -Wl,'
15090 ;;
15091 RCC*)
15092 # Rational C++ 2.4.1
15093 lt_prog_compiler_pic_CXX='-pic'
15094 ;;
15095 cxx*)
15096 # Digital/Compaq C++
15097 lt_prog_compiler_wl_CXX='-Wl,'
15098 # Make sure the PIC flag is empty. It appears that all Alpha
15099 # Linux and Compaq Tru64 Unix objects are PIC.
15100 lt_prog_compiler_pic_CXX=
15101 lt_prog_compiler_static_CXX='-non_shared'
15102 ;;
15103 *)
15104 ;;
15105 esac
15106 ;;
15107 psos*)
15108 ;;
15109 solaris*)
15110 case $cc_basename in
15111 CC*)
15112 # Sun C++ 4.2, 5.x and Centerline C++
15113 lt_prog_compiler_pic_CXX='-KPIC'
15114 lt_prog_compiler_static_CXX='-Bstatic'
15115 lt_prog_compiler_wl_CXX='-Qoption ld '
15116 ;;
15117 gcx*)
15118 # Green Hills C++ Compiler
15119 lt_prog_compiler_pic_CXX='-PIC'
15120 ;;
15121 *)
15122 ;;
15123 esac
15124 ;;
15125 sunos4*)
15126 case $cc_basename in
15127 CC*)
15128 # Sun C++ 4.x
15129 lt_prog_compiler_pic_CXX='-pic'
15130 lt_prog_compiler_static_CXX='-Bstatic'
15131 ;;
15132 lcc*)
15133 # Lucid
15134 lt_prog_compiler_pic_CXX='-pic'
15135 ;;
15136 *)
15137 ;;
15138 esac
15139 ;;
15140 sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
15141 case $cc_basename in
15142 CC*)
15143 lt_prog_compiler_wl_CXX='-Wl,'
15144 lt_prog_compiler_pic_CXX='-KPIC'
15145 lt_prog_compiler_static_CXX='-Bstatic'
15146 ;;
15147 esac
15148 ;;
15149 tandem*)
15150 case $cc_basename in
15151 NCC*)
15152 # NonStop-UX NCC 3.20
15153 lt_prog_compiler_pic_CXX='-KPIC'
15154 ;;
15155 *)
15156 ;;
15157 esac
15158 ;;
15159 vxworks*)
15160 ;;
15161 *)
15162 lt_prog_compiler_can_build_shared_CXX=no
15163 ;;
15164 esac
15165 fi
15166
15167 case $host_os in
15168 # For platforms which do not support PIC, -DPIC is meaningless:
15169 *djgpp*)
15170 lt_prog_compiler_pic_CXX=
15171 ;;
15172 *)
15173 lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
15174 ;;
15175 esac
15176 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5
15177 $as_echo "$lt_prog_compiler_pic_CXX" >&6; }
15178
15179
15180
15181 #
15182 # Check to make sure the PIC flag actually works.
15183 #
15184 if test -n "$lt_prog_compiler_pic_CXX"; then
15185 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
15186 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
15187 if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then :
15188 $as_echo_n "(cached) " >&6
15189 else
15190 lt_cv_prog_compiler_pic_works_CXX=no
15191 ac_outfile=conftest.$ac_objext
15192 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
15193 lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
15194 # Insert the option either (1) after the last *FLAGS variable, or
15195 # (2) before a word containing "conftest.", or (3) at the end.
15196 # Note that $ac_compile itself does not contain backslashes and begins
15197 # with a dollar sign (not a hyphen), so the echo should work correctly.
15198 # The option is referenced via a variable to avoid confusing sed.
15199 lt_compile=`echo "$ac_compile" | $SED \
15200 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
15201 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
15202 -e 's:$: $lt_compiler_flag:'`
15203 (eval echo "\"\$as_me:15204: $lt_compile\"" >&5)
15204 (eval "$lt_compile" 2>conftest.err)
15205 ac_status=$?
15206 cat conftest.err >&5
15207 echo "$as_me:15208: \$? = $ac_status" >&5
15208 if (exit $ac_status) && test -s "$ac_outfile"; then
15209 # The compiler can only warn and ignore the option if not recognized
15210 # So say no if there are warnings other than the usual output.
15211 $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
15212 $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
15213 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
15214 lt_cv_prog_compiler_pic_works_CXX=yes
15215 fi
15216 fi
15217 $RM conftest*
15218
15219 fi
15220 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
15221 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
15222
15223 if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then
15224 case $lt_prog_compiler_pic_CXX in
15225 "" | " "*) ;;
15226 *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
15227 esac
15228 else
15229 lt_prog_compiler_pic_CXX=
15230 lt_prog_compiler_can_build_shared_CXX=no
15231 fi
15232
15233 fi
15234
15235
15236
15237 #
15238 # Check to make sure the static flag actually works.
15239 #
15240 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
15241 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
15242 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
15243 if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then :
15244 $as_echo_n "(cached) " >&6
15245 else
15246 lt_cv_prog_compiler_static_works_CXX=no
15247 save_LDFLAGS="$LDFLAGS"
15248 LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
15249 echo "$lt_simple_link_test_code" > conftest.$ac_ext
15250 if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
15251 # The linker can only warn and ignore the option if not recognized
15252 # So say no if there are warnings
15253 if test -s conftest.err; then
15254 # Append any errors to the config.log.
15255 cat conftest.err 1>&5
15256 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
15257 $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
15258 if diff conftest.exp conftest.er2 >/dev/null; then
15259 lt_cv_prog_compiler_static_works_CXX=yes
15260 fi
15261 else
15262 lt_cv_prog_compiler_static_works_CXX=yes
15263 fi
15264 fi
15265 $RM -r conftest*
15266 LDFLAGS="$save_LDFLAGS"
15267
15268 fi
15269 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
15270 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
15271
15272 if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
15273 :
15274 else
15275 lt_prog_compiler_static_CXX=
15276 fi
15277
15278
15279
15280
15281 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
15282 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
15283 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
15284 $as_echo_n "(cached) " >&6
15285 else
15286 lt_cv_prog_compiler_c_o_CXX=no
15287 $RM -r conftest 2>/dev/null
15288 mkdir conftest
15289 cd conftest
15290 mkdir out
15291 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
15292
15293 lt_compiler_flag="-o out/conftest2.$ac_objext"
15294 # Insert the option either (1) after the last *FLAGS variable, or
15295 # (2) before a word containing "conftest.", or (3) at the end.
15296 # Note that $ac_compile itself does not contain backslashes and begins
15297 # with a dollar sign (not a hyphen), so the echo should work correctly.
15298 lt_compile=`echo "$ac_compile" | $SED \
15299 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
15300 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
15301 -e 's:$: $lt_compiler_flag:'`
15302 (eval echo "\"\$as_me:15303: $lt_compile\"" >&5)
15303 (eval "$lt_compile" 2>out/conftest.err)
15304 ac_status=$?
15305 cat out/conftest.err >&5
15306 echo "$as_me:15307: \$? = $ac_status" >&5
15307 if (exit $ac_status) && test -s out/conftest2.$ac_objext
15308 then
15309 # The compiler can only warn and ignore the option if not recognized
15310 # So say no if there are warnings
15311 $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
15312 $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
15313 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
15314 lt_cv_prog_compiler_c_o_CXX=yes
15315 fi
15316 fi
15317 chmod u+w . 2>&5
15318 $RM conftest*
15319 # SGI C++ compiler will create directory out/ii_files/ for
15320 # template instantiation
15321 test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
15322 $RM out/* && rmdir out
15323 cd ..
15324 $RM -r conftest
15325 $RM conftest*
15326
15327 fi
15328 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
15329 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
15330
15331
15332
15333 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
15334 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
15335 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then :
15336 $as_echo_n "(cached) " >&6
15337 else
15338 lt_cv_prog_compiler_c_o_CXX=no
15339 $RM -r conftest 2>/dev/null
15340 mkdir conftest
15341 cd conftest
15342 mkdir out
15343 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
15344
15345 lt_compiler_flag="-o out/conftest2.$ac_objext"
15346 # Insert the option either (1) after the last *FLAGS variable, or
15347 # (2) before a word containing "conftest.", or (3) at the end.
15348 # Note that $ac_compile itself does not contain backslashes and begins
15349 # with a dollar sign (not a hyphen), so the echo should work correctly.
15350 lt_compile=`echo "$ac_compile" | $SED \
15351 -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
15352 -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
15353 -e 's:$: $lt_compiler_flag:'`
15354 (eval echo "\"\$as_me:15355: $lt_compile\"" >&5)
15355 (eval "$lt_compile" 2>out/conftest.err)
15356 ac_status=$?
15357 cat out/conftest.err >&5
15358 echo "$as_me:15359: \$? = $ac_status" >&5
15359 if (exit $ac_status) && test -s out/conftest2.$ac_objext
15360 then
15361 # The compiler can only warn and ignore the option if not recognized
15362 # So say no if there are warnings
15363 $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
15364 $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
15365 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
15366 lt_cv_prog_compiler_c_o_CXX=yes
15367 fi
15368 fi
15369 chmod u+w . 2>&5
15370 $RM conftest*
15371 # SGI C++ compiler will create directory out/ii_files/ for
15372 # template instantiation
15373 test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
15374 $RM out/* && rmdir out
15375 cd ..
15376 $RM -r conftest
15377 $RM conftest*
15378
15379 fi
15380 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
15381 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
15382
15383
15384
15385
15386 hard_links="nottested"
15387 if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
15388 # do not overwrite the value of need_locks provided by the user
15389 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
15390 $as_echo_n "checking if we can lock with hard links... " >&6; }
15391 hard_links=yes
15392 $RM conftest*
15393 ln conftest.a conftest.b 2>/dev/null && hard_links=no
15394 touch conftest.a
15395 ln conftest.a conftest.b 2>&5 || hard_links=no
15396 ln conftest.a conftest.b 2>/dev/null && hard_links=no
15397 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
15398 $as_echo "$hard_links" >&6; }
15399 if test "$hard_links" = no; then
15400 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
15401 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
15402 need_locks=warn
15403 fi
15404 else
15405 need_locks=no
15406 fi
15407
15408
15409
15410 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
15411 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
15412
15413 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
15414 case $host_os in
15415 aix[4-9]*)
15416 # If we're using GNU nm, then we don't want the "-C" option.
15417 # -C means demangle to AIX nm, but means don't demangle with GNU nm
15418 if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
15419 export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
15420 else
15421 export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
15422 fi
15423 ;;
15424 pw32*)
15425 export_symbols_cmds_CXX="$ltdll_cmds"
15426 ;;
15427 cygwin* | mingw* | cegcc*)
15428 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
15429 ;;
15430 linux* | k*bsd*-gnu)
15431 link_all_deplibs_CXX=no
15432 ;;
15433 *)
15434 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
15435 ;;
15436 esac
15437 exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
15438
15439 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
15440 $as_echo "$ld_shlibs_CXX" >&6; }
15441 test "$ld_shlibs_CXX" = no && can_build_shared=no
15442
15443 with_gnu_ld_CXX=$with_gnu_ld
15444
15445
15446
15447
15448
15449
15450 #
15451 # Do we need to explicitly link libc?
15452 #
15453 case "x$archive_cmds_need_lc_CXX" in
15454 x|xyes)
15455 # Assume -lc should be added
15456 archive_cmds_need_lc_CXX=yes
15457
15458 if test "$enable_shared" = yes && test "$GCC" = yes; then
15459 case $archive_cmds_CXX in
15460 *'~'*)
15461 # FIXME: we may have to deal with multi-command sequences.
15462 ;;
15463 '$CC '*)
15464 # Test whether the compiler implicitly links with -lc since on some
15465 # systems, -lgcc has to come before -lc. If gcc already passes -lc
15466 # to ld, don't add -lc before -lgcc.
15467 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
15468 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
15469 $RM conftest*
15470 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
15471
15472 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
15473 (eval $ac_compile) 2>&5
15474 ac_status=$?
15475 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
15476 test $ac_status = 0; } 2>conftest.err; then
15477 soname=conftest
15478 lib=conftest
15479 libobjs=conftest.$ac_objext
15480 deplibs=
15481 wl=$lt_prog_compiler_wl_CXX
15482 pic_flag=$lt_prog_compiler_pic_CXX
15483 compiler_flags=-v
15484 linker_flags=-v
15485 verstring=
15486 output_objdir=.
15487 libname=conftest
15488 lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
15489 allow_undefined_flag_CXX=
15490 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
15491 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
15492 ac_status=$?
15493 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
15494 test $ac_status = 0; }
15495 then
15496 archive_cmds_need_lc_CXX=no
15497 else
15498 archive_cmds_need_lc_CXX=yes
15499 fi
15500 allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
15501 else
15502 cat conftest.err 1>&5
15503 fi
15504 $RM conftest*
15505 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5
15506 $as_echo "$archive_cmds_need_lc_CXX" >&6; }
15507 ;;
15508 esac
15509 fi
15510 ;;
15511 esac
15512
15513
15514
15515
15516
15517
15518
15519
15520
15521
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
15537
15538
15539
15540
15541
15542
15543
15544
15545
15546
15547
15548
15549
15550
15551
15552
15553
15554
15555
15556
15557
15558
15559
15560
15561
15562
15563
15564
15565
15566
15567
15568
15569
15570
15571
15572
15573
15574
15575
15576 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
15577 $as_echo_n "checking dynamic linker characteristics... " >&6; }
15578
15579 library_names_spec=
15580 libname_spec='lib$name'
15581 soname_spec=
15582 shrext_cmds=".so"
15583 postinstall_cmds=
15584 postuninstall_cmds=
15585 finish_cmds=
15586 finish_eval=
15587 shlibpath_var=
15588 shlibpath_overrides_runpath=unknown
15589 version_type=none
15590 dynamic_linker="$host_os ld.so"
15591 sys_lib_dlsearch_path_spec="/lib /usr/lib"
15592 need_lib_prefix=unknown
15593 hardcode_into_libs=no
15594
15595 # when you set need_version to no, make sure it does not cause -set_version
15596 # flags to be left without arguments
15597 need_version=unknown
15598
15599 case $host_os in
15600 aix3*)
15601 version_type=linux
15602 library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
15603 shlibpath_var=LIBPATH
15604
15605 # AIX 3 has no versioning support, so we append a major version to the name.
15606 soname_spec='${libname}${release}${shared_ext}$major'
15607 ;;
15608
15609 aix[4-9]*)
15610 version_type=linux
15611 need_lib_prefix=no
15612 need_version=no
15613 hardcode_into_libs=yes
15614 if test "$host_cpu" = ia64; then
15615 # AIX 5 supports IA64
15616 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
15617 shlibpath_var=LD_LIBRARY_PATH
15618 else
15619 # With GCC up to 2.95.x, collect2 would create an import file
15620 # for dependence libraries. The import file would start with
15621 # the line `#! .'. This would cause the generated library to
15622 # depend on `.', always an invalid library. This was fixed in
15623 # development snapshots of GCC prior to 3.0.
15624 case $host_os in
15625 aix4 | aix4.[01] | aix4.[01].*)
15626 if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
15627 echo ' yes '
15628 echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
15629 :
15630 else
15631 can_build_shared=no
15632 fi
15633 ;;
15634 esac
15635 # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
15636 # soname into executable. Probably we can add versioning support to
15637 # collect2, so additional links can be useful in future.
15638 if test "$aix_use_runtimelinking" = yes; then
15639 # If using run time linking (on AIX 4.2 or later) use lib<name>.so
15640 # instead of lib<name>.a to let people know that these are not
15641 # typical AIX shared libraries.
15642 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15643 else
15644 # We preserve .a as extension for shared libraries through AIX4.2
15645 # and later when we are not doing run time linking.
15646 library_names_spec='${libname}${release}.a $libname.a'
15647 soname_spec='${libname}${release}${shared_ext}$major'
15648 fi
15649 shlibpath_var=LIBPATH
15650 fi
15651 ;;
15652
15653 amigaos*)
15654 case $host_cpu in
15655 powerpc)
15656 # Since July 2007 AmigaOS4 officially supports .so libraries.
15657 # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
15658 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15659 ;;
15660 m68k)
15661 library_names_spec='$libname.ixlibrary $libname.a'
15662 # Create ${libname}_ixlibrary.a entries in /sys/libs.
15663 finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
15664 ;;
15665 esac
15666 ;;
15667
15668 beos*)
15669 library_names_spec='${libname}${shared_ext}'
15670 dynamic_linker="$host_os ld.so"
15671 shlibpath_var=LIBRARY_PATH
15672 ;;
15673
15674 bsdi[45]*)
15675 version_type=linux
15676 need_version=no
15677 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15678 soname_spec='${libname}${release}${shared_ext}$major'
15679 finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
15680 shlibpath_var=LD_LIBRARY_PATH
15681 sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
15682 sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
15683 # the default ld.so.conf also contains /usr/contrib/lib and
15684 # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
15685 # libtool to hard-code these into programs
15686 ;;
15687
15688 cygwin* | mingw* | pw32* | cegcc*)
15689 version_type=windows
15690 shrext_cmds=".dll"
15691 need_version=no
15692 need_lib_prefix=no
15693
15694 case $GCC,$host_os in
15695 yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
15696 library_names_spec='$libname.dll.a'
15697 # DLL is installed to $(libdir)/../bin by postinstall_cmds
15698 postinstall_cmds='base_file=`basename \${file}`~
15699 dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
15700 dldir=$destdir/`dirname \$dlpath`~
15701 test -d \$dldir || mkdir -p \$dldir~
15702 $install_prog $dir/$dlname \$dldir/$dlname~
15703 chmod a+x \$dldir/$dlname~
15704 if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
15705 eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
15706 fi'
15707 postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
15708 dlpath=$dir/\$dldll~
15709 $RM \$dlpath'
15710 shlibpath_overrides_runpath=yes
15711
15712 case $host_os in
15713 cygwin*)
15714 # Cygwin DLLs use 'cyg' prefix rather than 'lib'
15715 soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
15716 sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
15717 ;;
15718 mingw* | cegcc*)
15719 # MinGW DLLs use traditional 'lib' prefix
15720 soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
15721 sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
15722 if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
15723 # It is most probably a Windows format PATH printed by
15724 # mingw gcc, but we are running on Cygwin. Gcc prints its search
15725 # path with ; separators, and with drive letters. We can handle the
15726 # drive letters (cygwin fileutils understands them), so leave them,
15727 # especially as we might pass files found there to a mingw objdump,
15728 # which wouldn't understand a cygwinified path. Ahh.
15729 sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
15730 else
15731 sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
15732 fi
15733 ;;
15734 pw32*)
15735 # pw32 DLLs use 'pw' prefix rather than 'lib'
15736 library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
15737 ;;
15738 esac
15739 ;;
15740
15741 *)
15742 library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
15743 ;;
15744 esac
15745 dynamic_linker='Win32 ld.exe'
15746 # FIXME: first we should search . and the directory the executable is in
15747 shlibpath_var=PATH
15748 ;;
15749
15750 darwin* | rhapsody*)
15751 dynamic_linker="$host_os dyld"
15752 version_type=darwin
15753 need_lib_prefix=no
15754 need_version=no
15755 library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
15756 soname_spec='${libname}${release}${major}$shared_ext'
15757 shlibpath_overrides_runpath=yes
15758 shlibpath_var=DYLD_LIBRARY_PATH
15759 shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
15760
15761 sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
15762 ;;
15763
15764 dgux*)
15765 version_type=linux
15766 need_lib_prefix=no
15767 need_version=no
15768 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
15769 soname_spec='${libname}${release}${shared_ext}$major'
15770 shlibpath_var=LD_LIBRARY_PATH
15771 ;;
15772
15773 freebsd1*)
15774 dynamic_linker=no
15775 ;;
15776
15777 freebsd* | dragonfly*)
15778 # DragonFly does not have aout. When/if they implement a new
15779 # versioning mechanism, adjust this.
15780 if test -x /usr/bin/objformat; then
15781 objformat=`/usr/bin/objformat`
15782 else
15783 case $host_os in
15784 freebsd[123]*) objformat=aout ;;
15785 *) objformat=elf ;;
15786 esac
15787 fi
15788 version_type=freebsd-$objformat
15789 case $version_type in
15790 freebsd-elf*)
15791 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
15792 need_version=no
15793 need_lib_prefix=no
15794 ;;
15795 freebsd-*)
15796 library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
15797 need_version=yes
15798 ;;
15799 esac
15800 shlibpath_var=LD_LIBRARY_PATH
15801 case $host_os in
15802 freebsd2*)
15803 shlibpath_overrides_runpath=yes
15804 ;;
15805 freebsd3.[01]* | freebsdelf3.[01]*)
15806 shlibpath_overrides_runpath=yes
15807 hardcode_into_libs=yes
15808 ;;
15809 freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
15810 freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
15811 shlibpath_overrides_runpath=no
15812 hardcode_into_libs=yes
15813 ;;
15814 *) # from 4.6 on, and DragonFly
15815 shlibpath_overrides_runpath=yes
15816 hardcode_into_libs=yes
15817 ;;
15818 esac
15819 ;;
15820
15821 gnu*)
15822 version_type=linux
15823 need_lib_prefix=no
15824 need_version=no
15825 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
15826 soname_spec='${libname}${release}${shared_ext}$major'
15827 shlibpath_var=LD_LIBRARY_PATH
15828 hardcode_into_libs=yes
15829 ;;
15830
15831 hpux9* | hpux10* | hpux11*)
15832 # Give a soname corresponding to the major version so that dld.sl refuses to
15833 # link against other versions.
15834 version_type=sunos
15835 need_lib_prefix=no
15836 need_version=no
15837 case $host_cpu in
15838 ia64*)
15839 shrext_cmds='.so'
15840 hardcode_into_libs=yes
15841 dynamic_linker="$host_os dld.so"
15842 shlibpath_var=LD_LIBRARY_PATH
15843 shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
15844 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15845 soname_spec='${libname}${release}${shared_ext}$major'
15846 if test "X$HPUX_IA64_MODE" = X32; then
15847 sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
15848 else
15849 sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
15850 fi
15851 sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
15852 ;;
15853 hppa*64*)
15854 shrext_cmds='.sl'
15855 hardcode_into_libs=yes
15856 dynamic_linker="$host_os dld.sl"
15857 shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
15858 shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
15859 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15860 soname_spec='${libname}${release}${shared_ext}$major'
15861 sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
15862 sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
15863 ;;
15864 *)
15865 shrext_cmds='.sl'
15866 dynamic_linker="$host_os dld.sl"
15867 shlibpath_var=SHLIB_PATH
15868 shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
15869 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15870 soname_spec='${libname}${release}${shared_ext}$major'
15871 ;;
15872 esac
15873 # HP-UX runs *really* slowly unless shared libraries are mode 555.
15874 postinstall_cmds='chmod 555 $lib'
15875 ;;
15876
15877 interix[3-9]*)
15878 version_type=linux
15879 need_lib_prefix=no
15880 need_version=no
15881 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
15882 soname_spec='${libname}${release}${shared_ext}$major'
15883 dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
15884 shlibpath_var=LD_LIBRARY_PATH
15885 shlibpath_overrides_runpath=no
15886 hardcode_into_libs=yes
15887 ;;
15888
15889 irix5* | irix6* | nonstopux*)
15890 case $host_os in
15891 nonstopux*) version_type=nonstopux ;;
15892 *)
15893 if test "$lt_cv_prog_gnu_ld" = yes; then
15894 version_type=linux
15895 else
15896 version_type=irix
15897 fi ;;
15898 esac
15899 need_lib_prefix=no
15900 need_version=no
15901 soname_spec='${libname}${release}${shared_ext}$major'
15902 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
15903 case $host_os in
15904 irix5* | nonstopux*)
15905 libsuff= shlibsuff=
15906 ;;
15907 *)
15908 case $LD in # libtool.m4 will add one of these switches to LD
15909 *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
15910 libsuff= shlibsuff= libmagic=32-bit;;
15911 *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
15912 libsuff=32 shlibsuff=N32 libmagic=N32;;
15913 *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
15914 libsuff=64 shlibsuff=64 libmagic=64-bit;;
15915 *) libsuff= shlibsuff= libmagic=never-match;;
15916 esac
15917 ;;
15918 esac
15919 shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
15920 shlibpath_overrides_runpath=no
15921 sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
15922 sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
15923 hardcode_into_libs=yes
15924 ;;
15925
15926 # No shared lib support for Linux oldld, aout, or coff.
15927 linux*oldld* | linux*aout* | linux*coff*)
15928 dynamic_linker=no
15929 ;;
15930
15931 # This must be Linux ELF.
15932 linux* | k*bsd*-gnu | kopensolaris*-gnu)
15933 version_type=linux
15934 need_lib_prefix=no
15935 need_version=no
15936 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
15937 soname_spec='${libname}${release}${shared_ext}$major'
15938 finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
15939 shlibpath_var=LD_LIBRARY_PATH
15940 shlibpath_overrides_runpath=no
15941 # Some binutils ld are patched to set DT_RUNPATH
15942 save_LDFLAGS=$LDFLAGS
15943 save_libdir=$libdir
15944 eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
15945 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
15946 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15947 /* end confdefs.h. */
15948
15949 int
15950 main ()
15951 {
15952
15953 ;
15954 return 0;
15955 }
15956 _ACEOF
15957 if ac_fn_cxx_try_link "$LINENO"; then :
15958 if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
15959 shlibpath_overrides_runpath=yes
15960 fi
15961 fi
15962 rm -f core conftest.err conftest.$ac_objext \
15963 conftest$ac_exeext conftest.$ac_ext
15964 LDFLAGS=$save_LDFLAGS
15965 libdir=$save_libdir
15966
15967 # This implies no fast_install, which is unacceptable.
15968 # Some rework will be needed to allow for fast_install
15969 # before this can be enabled.
15970 hardcode_into_libs=yes
15971
15972 # Append ld.so.conf contents to the search path
15973 if test -f /etc/ld.so.conf; then
15974 lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
15975 sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
15976 fi
15977
15978 # We used to test for /lib/ld.so.1 and disable shared libraries on
15979 # powerpc, because MkLinux only supported shared libraries with the
15980 # GNU dynamic linker. Since this was broken with cross compilers,
15981 # most powerpc-linux boxes support dynamic linking these days and
15982 # people can always --disable-shared, the test was removed, and we
15983 # assume the GNU/Linux dynamic linker is in use.
15984 dynamic_linker='GNU/Linux ld.so'
15985 ;;
15986
15987 netbsdelf*-gnu)
15988 version_type=linux
15989 need_lib_prefix=no
15990 need_version=no
15991 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
15992 soname_spec='${libname}${release}${shared_ext}$major'
15993 shlibpath_var=LD_LIBRARY_PATH
15994 shlibpath_overrides_runpath=no
15995 hardcode_into_libs=yes
15996 dynamic_linker='NetBSD ld.elf_so'
15997 ;;
15998
15999 netbsd*)
16000 version_type=sunos
16001 need_lib_prefix=no
16002 need_version=no
16003 if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
16004 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
16005 finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
16006 dynamic_linker='NetBSD (a.out) ld.so'
16007 else
16008 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
16009 soname_spec='${libname}${release}${shared_ext}$major'
16010 dynamic_linker='NetBSD ld.elf_so'
16011 fi
16012 shlibpath_var=LD_LIBRARY_PATH
16013 shlibpath_overrides_runpath=yes
16014 hardcode_into_libs=yes
16015 ;;
16016
16017 newsos6)
16018 version_type=linux
16019 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16020 shlibpath_var=LD_LIBRARY_PATH
16021 shlibpath_overrides_runpath=yes
16022 ;;
16023
16024 *nto* | *qnx*)
16025 version_type=qnx
16026 need_lib_prefix=no
16027 need_version=no
16028 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16029 soname_spec='${libname}${release}${shared_ext}$major'
16030 shlibpath_var=LD_LIBRARY_PATH
16031 shlibpath_overrides_runpath=no
16032 hardcode_into_libs=yes
16033 dynamic_linker='ldqnx.so'
16034 ;;
16035
16036 openbsd*)
16037 version_type=sunos
16038 sys_lib_dlsearch_path_spec="/usr/lib"
16039 need_lib_prefix=no
16040 # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
16041 case $host_os in
16042 openbsd3.3 | openbsd3.3.*) need_version=yes ;;
16043 *) need_version=no ;;
16044 esac
16045 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
16046 finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
16047 shlibpath_var=LD_LIBRARY_PATH
16048 if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
16049 case $host_os in
16050 openbsd2.[89] | openbsd2.[89].*)
16051 shlibpath_overrides_runpath=no
16052 ;;
16053 *)
16054 shlibpath_overrides_runpath=yes
16055 ;;
16056 esac
16057 else
16058 shlibpath_overrides_runpath=yes
16059 fi
16060 ;;
16061
16062 os2*)
16063 libname_spec='$name'
16064 shrext_cmds=".dll"
16065 need_lib_prefix=no
16066 library_names_spec='$libname${shared_ext} $libname.a'
16067 dynamic_linker='OS/2 ld.exe'
16068 shlibpath_var=LIBPATH
16069 ;;
16070
16071 osf3* | osf4* | osf5*)
16072 version_type=osf
16073 need_lib_prefix=no
16074 need_version=no
16075 soname_spec='${libname}${release}${shared_ext}$major'
16076 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16077 shlibpath_var=LD_LIBRARY_PATH
16078 sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
16079 sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
16080 ;;
16081
16082 rdos*)
16083 dynamic_linker=no
16084 ;;
16085
16086 solaris*)
16087 version_type=linux
16088 need_lib_prefix=no
16089 need_version=no
16090 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16091 soname_spec='${libname}${release}${shared_ext}$major'
16092 shlibpath_var=LD_LIBRARY_PATH
16093 shlibpath_overrides_runpath=yes
16094 hardcode_into_libs=yes
16095 # ldd complains unless libraries are executable
16096 postinstall_cmds='chmod +x $lib'
16097 ;;
16098
16099 sunos4*)
16100 version_type=sunos
16101 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
16102 finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
16103 shlibpath_var=LD_LIBRARY_PATH
16104 shlibpath_overrides_runpath=yes
16105 if test "$with_gnu_ld" = yes; then
16106 need_lib_prefix=no
16107 fi
16108 need_version=yes
16109 ;;
16110
16111 sysv4 | sysv4.3*)
16112 version_type=linux
16113 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16114 soname_spec='${libname}${release}${shared_ext}$major'
16115 shlibpath_var=LD_LIBRARY_PATH
16116 case $host_vendor in
16117 sni)
16118 shlibpath_overrides_runpath=no
16119 need_lib_prefix=no
16120 runpath_var=LD_RUN_PATH
16121 ;;
16122 siemens)
16123 need_lib_prefix=no
16124 ;;
16125 motorola)
16126 need_lib_prefix=no
16127 need_version=no
16128 shlibpath_overrides_runpath=no
16129 sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
16130 ;;
16131 esac
16132 ;;
16133
16134 sysv4*MP*)
16135 if test -d /usr/nec ;then
16136 version_type=linux
16137 library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
16138 soname_spec='$libname${shared_ext}.$major'
16139 shlibpath_var=LD_LIBRARY_PATH
16140 fi
16141 ;;
16142
16143 sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
16144 version_type=freebsd-elf
16145 need_lib_prefix=no
16146 need_version=no
16147 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
16148 soname_spec='${libname}${release}${shared_ext}$major'
16149 shlibpath_var=LD_LIBRARY_PATH
16150 shlibpath_overrides_runpath=yes
16151 hardcode_into_libs=yes
16152 if test "$with_gnu_ld" = yes; then
16153 sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
16154 else
16155 sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
16156 case $host_os in
16157 sco3.2v5*)
16158 sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
16159 ;;
16160 esac
16161 fi
16162 sys_lib_dlsearch_path_spec='/usr/lib'
16163 ;;
16164
16165 tpf*)
16166 # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
16167 version_type=linux
16168 need_lib_prefix=no
16169 need_version=no
16170 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16171 shlibpath_var=LD_LIBRARY_PATH
16172 shlibpath_overrides_runpath=no
16173 hardcode_into_libs=yes
16174 ;;
16175
16176 uts4*)
16177 version_type=linux
16178 library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
16179 soname_spec='${libname}${release}${shared_ext}$major'
16180 shlibpath_var=LD_LIBRARY_PATH
16181 ;;
16182
16183 *)
16184 dynamic_linker=no
16185 ;;
16186 esac
16187 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
16188 $as_echo "$dynamic_linker" >&6; }
16189 test "$dynamic_linker" = no && can_build_shared=no
16190
16191 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
16192 if test "$GCC" = yes; then
16193 variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
16194 fi
16195
16196 if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
16197 sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
16198 fi
16199 if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
16200 sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
16201 fi
16202
16203
16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
16229
16230
16231
16232
16233
16234
16235
16236
16237
16238 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
16239 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
16240 hardcode_action_CXX=
16241 if test -n "$hardcode_libdir_flag_spec_CXX" ||
16242 test -n "$runpath_var_CXX" ||
16243 test "X$hardcode_automatic_CXX" = "Xyes" ; then
16244
16245 # We can hardcode non-existent directories.
16246 if test "$hardcode_direct_CXX" != no &&
16247 # If the only mechanism to avoid hardcoding is shlibpath_var, we
16248 # have to relink, otherwise we might link with an installed library
16249 # when we should be linking with a yet-to-be-installed one
16250 ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
16251 test "$hardcode_minus_L_CXX" != no; then
16252 # Linking always hardcodes the temporary library directory.
16253 hardcode_action_CXX=relink
16254 else
16255 # We can link without hardcoding, and we can hardcode nonexisting dirs.
16256 hardcode_action_CXX=immediate
16257 fi
16258 else
16259 # We cannot hardcode anything, or else we can only hardcode existing
16260 # directories.
16261 hardcode_action_CXX=unsupported
16262 fi
16263 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
16264 $as_echo "$hardcode_action_CXX" >&6; }
16265
16266 if test "$hardcode_action_CXX" = relink ||
16267 test "$inherit_rpath_CXX" = yes; then
16268 # Fast installation is not supported
16269 enable_fast_install=no
16270 elif test "$shlibpath_overrides_runpath" = yes ||
16271 test "$enable_shared" = no; then
16272 # Fast installation is not necessary
16273 enable_fast_install=needless
16274 fi
16275
16276
16277
16278
16279
16280
16281
16282 fi # test -n "$compiler"
16283
16284 CC=$lt_save_CC
16285 LDCXX=$LD
16286 LD=$lt_save_LD
16287 GCC=$lt_save_GCC
16288 with_gnu_ld=$lt_save_with_gnu_ld
16289 lt_cv_path_LDCXX=$lt_cv_path_LD
16290 lt_cv_path_LD=$lt_save_path_LD
16291 lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
16292 lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
16293 fi # test "$_lt_caught_CXX_error" != yes
16294
16295 ac_ext=c
16296 ac_cpp='$CPP $CPPFLAGS'
16297 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
16298 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
16299 ac_compiler_gnu=$ac_cv_c_compiler_gnu
16300
16301
16302 ac_ext=cpp
16303 ac_cpp='$CXXCPP $CPPFLAGS'
16304 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
16305 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
16306 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
16307
16308 _TP_OLD_LIBS="$LIBS"
16309 LIBS="$GLIB_LIBS"
16310 _TP_OLD_CXXFLAGS="$CXXFLAGS"
16311 CXXFLAGS="$GLIB_CFLAGS"
16312 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
16313 /* end confdefs.h. */
16314 #include <gio/gio.h>
16315 int
16316 main ()
16317 {
16318 g_type_init (); g_object_unref (g_file_new_for_path ("/"));
16319 ;
16320 return 0;
16321 }
16322
16323 _ACEOF
16324 if ac_fn_cxx_try_link "$LINENO"; then :
16325 tp_cxx_works=yes
16326 else
16327 tp_cxx_works=no
16328 fi
16329 rm -f core conftest.err conftest.$ac_objext \
16330 conftest$ac_exeext conftest.$ac_ext
16331 LIBS="$_TP_OLD_LIBS"
16332 CXXFLAGS="$_TP_OLD_CXXFLAGS"
16333 ac_ext=c
16334 ac_cpp='$CPP $CPPFLAGS'
16335 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
16336 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
16337 ac_compiler_gnu=$ac_cv_c_compiler_gnu
16338
16339 if test $tp_cxx_works = yes; then
16340 HAVE_CXX_TRUE=
16341 HAVE_CXX_FALSE='#'
16342 else
16343 HAVE_CXX_TRUE='#'
16344 HAVE_CXX_FALSE=
1240416345 fi
1240516346
1240616347
1256116502 fi
1256216503 if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then
1256316504 as_fn_error "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined.
16505 Usually this means the macro was only invoked conditionally." "$LINENO" 5
16506 fi
16507 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
16508 as_fn_error "conditional \"am__fastdepCXX\" was never defined.
16509 Usually this means the macro was only invoked conditionally." "$LINENO" 5
16510 fi
16511 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
16512 as_fn_error "conditional \"am__fastdepCXX\" was never defined.
16513 Usually this means the macro was only invoked conditionally." "$LINENO" 5
16514 fi
16515 if test -z "${HAVE_CXX_TRUE}" && test -z "${HAVE_CXX_FALSE}"; then
16516 as_fn_error "conditional \"HAVE_CXX\" was never defined.
1256416517 Usually this means the macro was only invoked conditionally." "$LINENO" 5
1256516518 fi
1256616519
1297116924 # report actual input values of CONFIG_FILES etc. instead of their
1297216925 # values after options handling.
1297316926 ac_log="
12974 This file was extended by Telepathy-GLib $as_me 0.11.6, which was
16927 This file was extended by Telepathy-GLib $as_me 0.11.7, which was
1297516928 generated by GNU Autoconf 2.65. Invocation command line was
1297616929
1297716930 CONFIG_FILES = $CONFIG_FILES
1303716990 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
1303816991 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
1303916992 ac_cs_version="\\
13040 Telepathy-GLib config.status 0.11.6
16993 Telepathy-GLib config.status 0.11.7
1304116994 configured by $0, generated by GNU Autoconf 2.65,
1304216995 with options \\"\$ac_cs_config\\"
1304316996
1327817231 enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
1327917232 old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
1328017233 striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
17234 compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`'
17235 predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`'
17236 postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`'
17237 predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`'
17238 postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`'
17239 compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`'
17240 LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17241 old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17242 compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17243 GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17244 lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17245 lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17246 lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17247 lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17248 lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17249 archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17250 enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17251 export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17252 whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17253 compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17254 old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17255 old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17256 archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17257 archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17258 module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17259 module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17260 with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17261 allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17262 no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17263 hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17264 hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17265 hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17266 hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17267 hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17268 hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17269 hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17270 hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17271 inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17272 link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17273 fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17274 always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17275 export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17276 exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17277 include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17278 prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17279 file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17280 hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17281 compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17282 predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17283 postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17284 predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17285 postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`'
17286 compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`'
1328117287
1328217288 LTCC='$LTCC'
1328317289 LTCFLAGS='$LTCFLAGS'
1334117347 soname_spec \
1334217348 finish_eval \
1334317349 old_striplib \
13344 striplib; do
17350 striplib \
17351 compiler_lib_search_dirs \
17352 predep_objects \
17353 postdep_objects \
17354 predeps \
17355 postdeps \
17356 compiler_lib_search_path \
17357 LD_CXX \
17358 compiler_CXX \
17359 lt_prog_compiler_no_builtin_flag_CXX \
17360 lt_prog_compiler_wl_CXX \
17361 lt_prog_compiler_pic_CXX \
17362 lt_prog_compiler_static_CXX \
17363 lt_cv_prog_compiler_c_o_CXX \
17364 export_dynamic_flag_spec_CXX \
17365 whole_archive_flag_spec_CXX \
17366 compiler_needs_object_CXX \
17367 with_gnu_ld_CXX \
17368 allow_undefined_flag_CXX \
17369 no_undefined_flag_CXX \
17370 hardcode_libdir_flag_spec_CXX \
17371 hardcode_libdir_flag_spec_ld_CXX \
17372 hardcode_libdir_separator_CXX \
17373 fix_srcfile_path_CXX \
17374 exclude_expsyms_CXX \
17375 include_expsyms_CXX \
17376 file_list_spec_CXX \
17377 compiler_lib_search_dirs_CXX \
17378 predep_objects_CXX \
17379 postdep_objects_CXX \
17380 predeps_CXX \
17381 postdeps_CXX \
17382 compiler_lib_search_path_CXX; do
1334517383 case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
1334617384 *[\\\\\\\`\\"\\\$]*)
1334717385 eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
1337017408 postuninstall_cmds \
1337117409 finish_cmds \
1337217410 sys_lib_search_path_spec \
13373 sys_lib_dlsearch_path_spec; do
17411 sys_lib_dlsearch_path_spec \
17412 old_archive_cmds_CXX \
17413 old_archive_from_new_cmds_CXX \
17414 old_archive_from_expsyms_cmds_CXX \
17415 archive_cmds_CXX \
17416 archive_expsym_cmds_CXX \
17417 module_cmds_CXX \
17418 module_expsym_cmds_CXX \
17419 export_symbols_cmds_CXX \
17420 prelink_cmds_CXX; do
1337417421 case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
1337517422 *[\\\\\\\`\\"\\\$]*)
1337617423 eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
1340317450 TIMESTAMP='$TIMESTAMP'
1340417451 RM='$RM'
1340517452 ofile='$ofile'
17453
17454
1340617455
1340717456
1340817457
1417318222
1417418223
1417518224 # The names of the tagged configurations supported by this script.
14176 available_tags=""
18225 available_tags="CXX "
1417718226
1417818227 # ### BEGIN LIBTOOL CONFIG
1417918228
1452218571
1452318572 # How to hardcode a shared library path into an executable.
1452418573 hardcode_action=$hardcode_action
18574
18575 # The directories searched by this compiler when creating a shared library.
18576 compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
18577
18578 # Dependencies to place before and after the objects being linked to
18579 # create a shared library.
18580 predep_objects=$lt_predep_objects
18581 postdep_objects=$lt_postdep_objects
18582 predeps=$lt_predeps
18583 postdeps=$lt_postdeps
18584
18585 # The library search path used internally by the compiler when linking
18586 # a shared library.
18587 compiler_lib_search_path=$lt_compiler_lib_search_path
1452518588
1452618589 # ### END LIBTOOL CONFIG
1452718590
1475818821 (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
1475918822 chmod +x "$ofile"
1476018823
18824
18825 cat <<_LT_EOF >> "$ofile"
18826
18827 # ### BEGIN LIBTOOL TAG CONFIG: CXX
18828
18829 # The linker used to build libraries.
18830 LD=$lt_LD_CXX
18831
18832 # Commands used to build an old-style archive.
18833 old_archive_cmds=$lt_old_archive_cmds_CXX
18834
18835 # A language specific compiler.
18836 CC=$lt_compiler_CXX
18837
18838 # Is the compiler the GNU compiler?
18839 with_gcc=$GCC_CXX
18840
18841 # Compiler flag to turn off builtin functions.
18842 no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
18843
18844 # How to pass a linker flag through the compiler.
18845 wl=$lt_lt_prog_compiler_wl_CXX
18846
18847 # Additional compiler flags for building library objects.
18848 pic_flag=$lt_lt_prog_compiler_pic_CXX
18849
18850 # Compiler flag to prevent dynamic linking.
18851 link_static_flag=$lt_lt_prog_compiler_static_CXX
18852
18853 # Does compiler simultaneously support -c and -o options?
18854 compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
18855
18856 # Whether or not to add -lc for building shared libraries.
18857 build_libtool_need_lc=$archive_cmds_need_lc_CXX
18858
18859 # Whether or not to disallow shared libs when runtime libs are static.
18860 allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
18861
18862 # Compiler flag to allow reflexive dlopens.
18863 export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
18864
18865 # Compiler flag to generate shared objects directly from archives.
18866 whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
18867
18868 # Whether the compiler copes with passing no objects directly.
18869 compiler_needs_object=$lt_compiler_needs_object_CXX
18870
18871 # Create an old-style archive from a shared archive.
18872 old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
18873
18874 # Create a temporary old-style archive to link instead of a shared archive.
18875 old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
18876
18877 # Commands used to build a shared archive.
18878 archive_cmds=$lt_archive_cmds_CXX
18879 archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
18880
18881 # Commands used to build a loadable module if different from building
18882 # a shared archive.
18883 module_cmds=$lt_module_cmds_CXX
18884 module_expsym_cmds=$lt_module_expsym_cmds_CXX
18885
18886 # Whether we are building with GNU ld or not.
18887 with_gnu_ld=$lt_with_gnu_ld_CXX
18888
18889 # Flag that allows shared libraries with undefined symbols to be built.
18890 allow_undefined_flag=$lt_allow_undefined_flag_CXX
18891
18892 # Flag that enforces no undefined symbols.
18893 no_undefined_flag=$lt_no_undefined_flag_CXX
18894
18895 # Flag to hardcode \$libdir into a binary during linking.
18896 # This must work even if \$libdir does not exist
18897 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
18898
18899 # If ld is used when linking, flag to hardcode \$libdir into a binary
18900 # during linking. This must work even if \$libdir does not exist.
18901 hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
18902
18903 # Whether we need a single "-rpath" flag with a separated argument.
18904 hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
18905
18906 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
18907 # DIR into the resulting binary.
18908 hardcode_direct=$hardcode_direct_CXX
18909
18910 # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
18911 # DIR into the resulting binary and the resulting library dependency is
18912 # "absolute",i.e impossible to change by setting \${shlibpath_var} if the
18913 # library is relocated.
18914 hardcode_direct_absolute=$hardcode_direct_absolute_CXX
18915
18916 # Set to "yes" if using the -LDIR flag during linking hardcodes DIR
18917 # into the resulting binary.
18918 hardcode_minus_L=$hardcode_minus_L_CXX
18919
18920 # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
18921 # into the resulting binary.
18922 hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
18923
18924 # Set to "yes" if building a shared library automatically hardcodes DIR
18925 # into the library and all subsequent libraries and executables linked
18926 # against it.
18927 hardcode_automatic=$hardcode_automatic_CXX
18928
18929 # Set to yes if linker adds runtime paths of dependent libraries
18930 # to runtime path list.
18931 inherit_rpath=$inherit_rpath_CXX
18932
18933 # Whether libtool must link a program against all its dependency libraries.
18934 link_all_deplibs=$link_all_deplibs_CXX
18935
18936 # Fix the shell variable \$srcfile for the compiler.
18937 fix_srcfile_path=$lt_fix_srcfile_path_CXX
18938
18939 # Set to "yes" if exported symbols are required.
18940 always_export_symbols=$always_export_symbols_CXX
18941
18942 # The commands to list exported symbols.
18943 export_symbols_cmds=$lt_export_symbols_cmds_CXX
18944
18945 # Symbols that should not be listed in the preloaded symbols.
18946 exclude_expsyms=$lt_exclude_expsyms_CXX
18947
18948 # Symbols that must always be exported.
18949 include_expsyms=$lt_include_expsyms_CXX
18950
18951 # Commands necessary for linking programs (against libraries) with templates.
18952 prelink_cmds=$lt_prelink_cmds_CXX
18953
18954 # Specify filename containing input files.
18955 file_list_spec=$lt_file_list_spec_CXX
18956
18957 # How to hardcode a shared library path into an executable.
18958 hardcode_action=$hardcode_action_CXX
18959
18960 # The directories searched by this compiler when creating a shared library.
18961 compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
18962
18963 # Dependencies to place before and after the objects being linked to
18964 # create a shared library.
18965 predep_objects=$lt_predep_objects_CXX
18966 postdep_objects=$lt_postdep_objects_CXX
18967 predeps=$lt_predeps_CXX
18968 postdeps=$lt_postdeps_CXX
18969
18970 # The library search path used internally by the compiler when linking
18971 # a shared library.
18972 compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
18973
18974 # ### END LIBTOOL TAG CONFIG: CXX
18975 _LT_EOF
18976
1476118977 ;;
1476218978
1476318979 esac
1010
1111 m4_define([tp_glib_major_version], [0])
1212 m4_define([tp_glib_minor_version], [11])
13 m4_define([tp_glib_micro_version], [6])
13 m4_define([tp_glib_micro_version], [7])
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], [38])
28 m4_define([tp_glib_lt_current], [39])
2929 m4_define([tp_glib_lt_revision], [0])
30 m4_define([tp_glib_lt_age], [38])
30 m4_define([tp_glib_lt_age], [39])
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.11])
59 GOBJECT_INTROSPECTION_CHECK([0.6.13])
6060 GTK_DOC_CHECK([1.15])
6161
6262 LT_CURRENT=tp_glib_lt_current
219219 HAVE_LD_VERSION_SCRIPT=no
220220 fi
221221 AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT], [test $HAVE_LD_VERSION_SCRIPT = yes])
222
223 dnl Check for C++ compiler, for syntax checking
224 AC_PROG_CXX
225 AC_LANG_PUSH([C++])
226 _TP_OLD_LIBS="$LIBS"
227 LIBS="$GLIB_LIBS"
228 _TP_OLD_CXXFLAGS="$CXXFLAGS"
229 CXXFLAGS="$GLIB_CFLAGS"
230 AC_LINK_IFELSE(
231 [AC_LANG_PROGRAM(
232 [[#include <gio/gio.h>]],
233 [[g_type_init (); g_object_unref (g_file_new_for_path ("/"));]])
234 ],
235 [tp_cxx_works=yes],
236 [tp_cxx_works=no])
237 LIBS="$_TP_OLD_LIBS"
238 CXXFLAGS="$_TP_OLD_CXXFLAGS"
239 AC_LANG_POP([C++])
240 AM_CONDITIONAL([HAVE_CXX], [test $tp_cxx_works = yes])
222241
223242 AC_OUTPUT( Makefile \
224243 docs/Makefile \
112112 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
113113 CPP = @CPP@
114114 CPPFLAGS = @CPPFLAGS@
115 CXX = @CXX@
116 CXXCPP = @CXXCPP@
117 CXXDEPMODE = @CXXDEPMODE@
118 CXXFLAGS = @CXXFLAGS@
115119 CYGPATH_W = @CYGPATH_W@
116120 DBUS_CFLAGS = @DBUS_CFLAGS@
117121 DBUS_LIBS = @DBUS_LIBS@
199203 abs_top_builddir = @abs_top_builddir@
200204 abs_top_srcdir = @abs_top_srcdir@
201205 ac_ct_CC = @ac_ct_CC@
206 ac_ct_CXX = @ac_ct_CXX@
202207 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
203208 am__include = @am__include@
204209 am__leading_dot = @am__leading_dot@
8787 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
8888 CPP = @CPP@
8989 CPPFLAGS = @CPPFLAGS@
90 CXX = @CXX@
91 CXXCPP = @CXXCPP@
92 CXXDEPMODE = @CXXDEPMODE@
93 CXXFLAGS = @CXXFLAGS@
9094 CYGPATH_W = @CYGPATH_W@
9195 DBUS_CFLAGS = @DBUS_CFLAGS@
9296 DBUS_LIBS = @DBUS_LIBS@
174178 abs_top_builddir = @abs_top_builddir@
175179 abs_top_srcdir = @abs_top_srcdir@
176180 ac_ct_CC = @ac_ct_CC@
181 ac_ct_CXX = @ac_ct_CXX@
177182 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
178183 am__include = @am__include@
179184 am__leading_dot = @am__leading_dot@
107107 on the underlying network connection (e.g. incoming calls).
108108 </p>
109109 <p>
110 The connection has an array of channel factories. In a trivial
111 implementation there might be a single channel factory which handles
112 all requests and all incoming events, but in general, there will be
113 multiple channel factories handling different types of channel.
114 </p>
115 <p>
116 <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> is a newer interface (introduced in telepathy-glib
117 0.7.15) for allocating and tracking channels which supports the
118 Requests D-Bus interface introduced in version 0.17.11 of the
119 specification. New connection managers should implement that interface
120 instead, and existing connection managers should migrate to it.
110 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>, a newer
111 interface which can be used to implement modern D-Bus APIs, instead.
121112 </p>
122113 </div>
123114 <div class="refsect1" title="Details">
127118 <pre class="programlisting"><span class="returnvalue">void</span> (*TpChannelFactoryIfaceForeachImpl) (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>,
128119 <em class="parameter"><code><a class="link" href="TpChannelIface.html#TpChannelFunc" title="TpChannelFunc ()"><span class="type">TpChannelFunc</span></a> func</code></em>,
129120 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
121 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
122 <h3 class="title">Warning</h3>
123 <p><code class="literal">TpChannelFactoryIfaceForeachImpl</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
124 </div>
130125 <p>
131126 Signature of an implementation of foreach, which must call
132127 func(channel, data) for each channel managed by this factory.
128 </p>
129 <p>
130 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
133131 </p>
134132 <div class="variablelist"><table border="0">
135133 <col align="left" valign="top">
156154 <div class="refsect2" title="TpChannelFactoryIfaceProc ()">
157155 <a name="TpChannelFactoryIfaceProc"></a><h3>TpChannelFactoryIfaceProc ()</h3>
158156 <pre class="programlisting"><span class="returnvalue">void</span> (*TpChannelFactoryIfaceProc) (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>);</pre>
157 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
158 <h3 class="title">Warning</h3>
159 <p><code class="literal">TpChannelFactoryIfaceProc</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
160 </div>
159161 <p>
160162 A virtual method on a channel factory that takes no extra parameters
161163 and returns nothing.
164 </p>
165 <p>
166 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
162167 </p>
163168 <div class="variablelist"><table border="0">
164169 <col align="left" valign="top">
180185 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> request</code></em>,
181186 <em class="parameter"><code><a class="link" href="TpChannelIface.html" title="TpChannelIface"><span class="type">TpChannelIface</span></a> **ret</code></em>,
182187 <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>
188 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
189 <h3 class="title">Warning</h3>
190 <p><code class="literal">TpChannelFactoryIfaceRequestImpl</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
191 </div>
183192 <p>
184193 Signature of an implementation of RequestChannel.
194 </p>
195 <p>
196 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
185197 </p>
186198 <div class="variablelist"><table border="0">
187199 <col align="left" valign="top">
252264 TP_CHANNEL_FACTORY_REQUEST_STATUS_EXISTING
253265 } TpChannelFactoryRequestStatus;
254266 </pre>
267 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
268 <h3 class="title">Warning</h3>
269 <p><code class="literal">TpChannelFactoryRequestStatus</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
270 </div>
255271 <p>
256272 Indicates the result of a channel request.
273 </p>
274 <p>
275 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
257276 </p>
258277 <div class="variablelist"><table border="0">
259278 <col align="left" valign="top">
312331 <div class="refsect2" title="TpChannelFactoryIface">
313332 <a name="TpChannelFactoryIface-struct"></a><h3>TpChannelFactoryIface</h3>
314333 <pre class="programlisting">typedef struct _TpChannelFactoryIface TpChannelFactoryIface;</pre>
334 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
335 <h3 class="title">Warning</h3>
336 <p><code class="literal">TpChannelFactoryIface</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
337 </div>
315338 <p>
316339 Opaque typedef representing any channel factory implementation.
340 </p>
341 <p>
342 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
317343 </p>
318344 </div>
319345 <hr>
330356 TpChannelFactoryIfaceRequestImpl request;
331357 } TpChannelFactoryIfaceClass;
332358 </pre>
359 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
360 <h3 class="title">Warning</h3>
361 <p><code class="literal">TpChannelFactoryIfaceClass</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
362 </div>
333363 <p>
334364 The class structure and vtable for a channel factory implementation.
365 </p>
366 <p>
367 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
335368 </p>
336369 <div class="variablelist"><table border="0">
337370 <col align="left" valign="top">
387420 <div class="refsect2" title="tp_channel_factory_iface_close_all ()">
388421 <a name="tp-channel-factory-iface-close-all"></a><h3>tp_channel_factory_iface_close_all ()</h3>
389422 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_factory_iface_close_all (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>);</pre>
423 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
424 <h3 class="title">Warning</h3>
425 <p><code class="literal">tp_channel_factory_iface_close_all</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
426 </div>
390427 <p>
391428 Close all channels and shut down the channel factory. It is not expected
392429 to be usable afterwards. This is called when the connection goes to
393430 disconnected state, before either emitting the StatusChanged signal or
394431 calling <code class="function">disconnected()</code>.
395432 </p>
433 <p>
434 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
435 </p>
396436 <div class="variablelist"><table border="0">
397437 <col align="left" valign="top">
398438 <tbody><tr>
406446 <div class="refsect2" title="tp_channel_factory_iface_connecting ()">
407447 <a name="tp-channel-factory-iface-connecting"></a><h3>tp_channel_factory_iface_connecting ()</h3>
408448 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_factory_iface_connecting (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>);</pre>
449 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
450 <h3 class="title">Warning</h3>
451 <p><code class="literal">tp_channel_factory_iface_connecting</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
452 </div>
409453 <p>
410454 Indicate that the connection has gone from disconnected to connecting
411455 state.
456 </p>
457 <p>
458 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
412459 </p>
413460 <div class="variablelist"><table border="0">
414461 <col align="left" valign="top">
423470 <div class="refsect2" title="tp_channel_factory_iface_connected ()">
424471 <a name="tp-channel-factory-iface-connected"></a><h3>tp_channel_factory_iface_connected ()</h3>
425472 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_factory_iface_connected (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>);</pre>
473 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
474 <h3 class="title">Warning</h3>
475 <p><code class="literal">tp_channel_factory_iface_connected</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
476 </div>
426477 <p>
427478 Indicate that the connection has gone from connecting to connected state.
479 </p>
480 <p>
481 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
428482 </p>
429483 <div class="variablelist"><table border="0">
430484 <col align="left" valign="top">
440494 <a name="tp-channel-factory-iface-disconnected"></a><h3>tp_channel_factory_iface_disconnected ()</h3>
441495 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_factory_iface_disconnected
442496 (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>);</pre>
497 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
498 <h3 class="title">Warning</h3>
499 <p><code class="literal">tp_channel_factory_iface_disconnected</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
500 </div>
443501 <p>
444502 Indicate that the connection has become disconnected.
503 </p>
504 <p>
505 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
445506 </p>
446507 <div class="variablelist"><table border="0">
447508 <col align="left" valign="top">
458519 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_factory_iface_foreach (<em class="parameter"><code><a class="link" href="TpChannelFactoryIface.html" title="TpChannelFactoryIface"><span class="type">TpChannelFactoryIface</span></a> *self</code></em>,
459520 <em class="parameter"><code><a class="link" href="TpChannelIface.html#TpChannelFunc" title="TpChannelFunc ()"><span class="type">TpChannelFunc</span></a> func</code></em>,
460521 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> data</code></em>);</pre>
522 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
523 <h3 class="title">Warning</h3>
524 <p><code class="literal">tp_channel_factory_iface_foreach</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
525 </div>
461526 <p>
462527 Call func(channel, data) for each channel managed by this factory.
528 </p>
529 <p>
530 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
463531 </p>
464532 <div class="variablelist"><table border="0">
465533 <col align="left" valign="top">
493561 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> request</code></em>,
494562 <em class="parameter"><code><a class="link" href="TpChannelIface.html" title="TpChannelIface"><span class="type">TpChannelIface</span></a> **ret</code></em>,
495563 <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>
564 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
565 <h3 class="title">Warning</h3>
566 <p><code class="literal">tp_channel_factory_iface_request</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
567 </div>
496568 <p>
497569 Request a channel.
570 </p>
571 <p>
572 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
498573 </p>
499574 <div class="variablelist"><table border="0">
500575 <col align="left" valign="top">
559634 (<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>,
560635 <em class="parameter"><code><a class="link" href="TpChannelIface.html" title="TpChannelIface"><span class="type">TpChannelIface</span></a> *channel</code></em>,
561636 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> request</code></em>);</pre>
637 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
638 <h3 class="title">Warning</h3>
639 <p><code class="literal">tp_channel_factory_iface_emit_new_channel</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
640 </div>
562641 <p>
563642 Signal that a new channel has been created (new-channel signal).
564643 </p>
573652 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> or a request that led to the channel's creation; callers are expected
574653 to determine which channels satisfy which requests based on the handle
575654 and handle-type.
655 </p>
656 <p>
657 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
576658 </p>
577659 <div class="variablelist"><table border="0">
578660 <col align="left" valign="top">
604686 <em class="parameter"><code><a class="link" href="TpChannelIface.html" title="TpChannelIface"><span class="type">TpChannelIface</span></a> *channel</code></em>,
605687 <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>,
606688 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> request</code></em>);</pre>
689 <div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
690 <h3 class="title">Warning</h3>
691 <p><code class="literal">tp_channel_factory_iface_emit_channel_error</code> is deprecated and should not be used in newly-written code. 0.11.7</p>
692 </div>
607693 <p>
608694 Signal that a new channel was created, but an error occurred before it
609695 could become useful.
610696 </p>
611697 <p>
612698 request is as for <a class="link" href="TpChannelFactoryIface.html#tp-channel-factory-iface-emit-new-channel" title="tp_channel_factory_iface_emit_new_channel ()"><code class="function">tp_channel_factory_iface_emit_new_channel()</code></a>.
699 </p>
700 <p>
701 Deprecated since version 0.11.7. Use <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a> instead.
613702 </p>
614703 <div class="variablelist"><table border="0">
615704 <col align="left" valign="top">
736825 </div>
737826 <div class="refsect1" title="See Also">
738827 <a name="TpChannelFactoryIface.see-also"></a><h2>See Also</h2>
739 <a class="link" href="telepathy-glib-svc-connection.html#TpSvcConnection"><span class="type">TpSvcConnection</span></a>
828 <a class="link" href="telepathy-glib-svc-connection.html#TpSvcConnection"><span class="type">TpSvcConnection</span></a>, <a class="link" href="TpChannelManager.html" title="TpChannelManager"><span class="type">TpChannelManager</span></a>
740829 </div>
741830 </div>
742831 <div class="footer">
9292 <span class="refentrytitle"><a href="telepathy-glib-channel-roomlist.html">Room List channels</a></span><span class="refpurpose"> — client-side wrappers for the Room List channel type</span>
9393 </dt>
9494 <dt>
95 <span class="refentrytitle"><a href="telepathy-glib-cli-anonymity.html">Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — client-side wrappers for the Anonymity interfaces</span>
96 </dt>
97 <dt>
98 <span class="refentrytitle"><a href="telepathy-glib-cli-service-point.html">Connection and Channel ServicePoint interfaces</a></span><span class="refpurpose"> — client-side wrappers for the ServicePoint interfaces</span>
99 </dt>
100 <dt>
95101 <span class="refentrytitle"><a href="telepathy-glib-media-interfaces.html">TpMediaSessionHandler, TpMediaStreamHandler</a></span><span class="refpurpose"> — proxy objects for Telepathy media streaming</span>
96102 </dt>
97103 <dt>
6868 <span class="refentrytitle"><a href="telepathy-glib-svc-connection.html">Service-side Connection interfaces</a></span><span class="refpurpose"> — GInterfaces for Telepathy Connection objects</span>
6969 </dt>
7070 <dt>
71 <span class="refentrytitle"><a href="telepathy-glib-svc-anonymity.html">Service-side Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — GInterfaces to implement the Anonymity interfaces</span>
72 </dt>
73 <dt>
74 <span class="refentrytitle"><a href="telepathy-glib-svc-service-point.html">Service-side Connection and Channel ServicePoint interfaces</a></span><span class="refpurpose"> — GInterfaces to implement the ServicePoint interfaces</span>
75 </dt>
76 <dt>
7177 <span class="refentrytitle"><a href="telepathy-glib-svc-media-interfaces.html">Service-side media streaming helper interfaces</a></span><span class="refpurpose"> — media session and media stream</span>
7278 </dt>
7379 <dt>
139139 <span class="refentrytitle"><a href="telepathy-glib-channel-roomlist.html">Room List channels</a></span><span class="refpurpose"> — client-side wrappers for the Room List channel type</span>
140140 </dt>
141141 <dt>
142 <span class="refentrytitle"><a href="telepathy-glib-cli-anonymity.html">Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — client-side wrappers for the Anonymity interfaces</span>
143 </dt>
144 <dt>
145 <span class="refentrytitle"><a href="telepathy-glib-cli-service-point.html">Connection and Channel ServicePoint interfaces</a></span><span class="refpurpose"> — client-side wrappers for the ServicePoint interfaces</span>
146 </dt>
147 <dt>
142148 <span class="refentrytitle"><a href="telepathy-glib-media-interfaces.html">TpMediaSessionHandler, TpMediaStreamHandler</a></span><span class="refpurpose"> — proxy objects for Telepathy media streaming</span>
143149 </dt>
144150 <dt>
209215 </dt>
210216 <dt>
211217 <span class="refentrytitle"><a href="telepathy-glib-svc-connection.html">Service-side Connection interfaces</a></span><span class="refpurpose"> — GInterfaces for Telepathy Connection objects</span>
218 </dt>
219 <dt>
220 <span class="refentrytitle"><a href="telepathy-glib-svc-anonymity.html">Service-side Connection and Channel Anonymity interfaces</a></span><span class="refpurpose"> — GInterfaces to implement the Anonymity interfaces</span>
221 </dt>
222 <dt>
223 <span class="refentrytitle"><a href="telepathy-glib-svc-service-point.html">Service-side Connection and Channel ServicePoint interfaces</a></span><span class="refpurpose"> — GInterfaces to implement the ServicePoint interfaces</span>
212224 </dt>
213225 <dt>
214226 <span class="refentrytitle"><a href="telepathy-glib-svc-media-interfaces.html">Service-side media streaming helper interfaces</a></span><span class="refpurpose"> — media session and media stream</span>
292292 <ANCHOR id="TP-IFACE-QUARK-CONNECTION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS">
293293 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS">
294294 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-ALIASING:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ALIASING:CAPS">
295 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS">
296 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS">
295297 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS">
296298 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-AVATARS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-AVATARS:CAPS">
297299 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-BALANCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-BALANCE:CAPS">
312314 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-PRESENCE:CAPS">
313315 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-LOCATION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-LOCATION:CAPS">
314316 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-LOCATION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-LOCATION:CAPS">
317 <ANCHOR id="TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS">
318 <ANCHOR id="TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS">
315319 <ANCHOR id="TP-IFACE-CHANNEL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL:CAPS">
316320 <ANCHOR id="TP-IFACE-QUARK-CHANNEL:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS">
317321 <ANCHOR id="TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS">
332336 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-TUBE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-TUBE:CAPS">
333337 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-TYPE-DBUS-TUBE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-DBUS-TUBE:CAPS">
334338 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-TYPE-STREAM-TUBE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-STREAM-TUBE:CAPS">
339 <ANCHOR id="TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS">
340 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS">
335341 <ANCHOR id="TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS">
336342 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-CALL-STATE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-CALL-STATE:CAPS">
337343 <ANCHOR id="TP-IFACE-CHANNEL-INTERFACE-CHAT-STATE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CHAT-STATE:CAPS">
350356 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-MEDIA-SIGNALLING:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MEDIA-SIGNALLING:CAPS">
351357 <ANCHOR id="TP-IFACE-CHANNEL-INTERFACE-MESSAGES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-MESSAGES:CAPS">
352358 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-MESSAGES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MESSAGES:CAPS">
359 <ANCHOR id="TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS">
360 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS">
353361 <ANCHOR id="TP-IFACE-CHANNEL-DISPATCHER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER:CAPS">
354362 <ANCHOR id="TP-IFACE-QUARK-CHANNEL-DISPATCHER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-DISPATCHER:CAPS">
355363 <ANCHOR id="TP-IFACE-CHANNEL-DISPATCHER-INTERFACE-OPERATION-LIST:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER-INTERFACE-OPERATION-LIST:CAPS">
377385 <ANCHOR id="TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS">
378386 <ANCHOR id="TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS">
379387 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS">
388 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS">
389 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS">
380390 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS">
381391 <ANCHOR id="TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS">
382392 <ANCHOR id="TP-PROP-ACCOUNT-CONNECT-AUTOMATICALLY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECT-AUTOMATICALLY:CAPS">
407417 <ANCHOR id="TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS">
408418 <ANCHOR id="TP-PROP-CHANNEL-INITIATOR-ID:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS">
409419 <ANCHOR id="TP-PROP-CHANNEL-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS">
420 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS">
421 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS">
422 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS">
423 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS">
410424 <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">
411425 <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">
412426 <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">
419433 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-MESSAGES-MESSAGE-PART-SUPPORT-FLAGS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-MESSAGE-PART-SUPPORT-FLAGS:CAPS">
420434 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-MESSAGES-PENDING-MESSAGES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-PENDING-MESSAGES:CAPS">
421435 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-MESSAGES-SUPPORTED-CONTENT-TYPES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-SUPPORTED-CONTENT-TYPES:CAPS">
436 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS">
437 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS">
422438 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS">
423439 <ANCHOR id="TP-PROP-CHANNEL-INTERFACE-TUBE-STATE:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-STATE:CAPS">
424440 <ANCHOR id="TP-PROP-CHANNEL-REQUESTED:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CHANNEL-REQUESTED:CAPS">
458474 <ANCHOR id="TP-PROP-CLIENT-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CLIENT-INTERFACES:CAPS">
459475 <ANCHOR id="TP-PROP-CLIENT-OBSERVER-OBSERVER-CHANNEL-FILTER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-OBSERVER-CHANNEL-FILTER:CAPS">
460476 <ANCHOR id="TP-PROP-CLIENT-OBSERVER-RECOVER:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-RECOVER:CAPS">
477 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS">
478 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS">
479 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS">
461480 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS">
462481 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-HEIGHT:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-HEIGHT:CAPS">
463482 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-WIDTH:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-WIDTH:CAPS">
475494 <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">
476495 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS">
477496 <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">
497 <ANCHOR id="TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS">
478498 <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">
479499 <ANCHOR id="TP-PROP-CONNECTION-MANAGER-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-MANAGER-INTERFACES:CAPS">
480500 <ANCHOR id="TP-PROP-CONNECTION-INTERFACES:CAPS" href="telepathy-glib/telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACES:CAPS">
776796 <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">
777797 <ANCHOR id="TpLocationFeatures" href="telepathy-glib/telepathy-glib-enums.html#TpLocationFeatures">
778798 <ANCHOR id="TP-LOCATION-FEATURE-CAN-SET:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-LOCATION-FEATURE-CAN-SET:CAPS">
799 <ANCHOR id="TpServicePointType" href="telepathy-glib/telepathy-glib-enums.html#TpServicePointType">
800 <ANCHOR id="TP-SERVICE-POINT-TYPE-NONE:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-NONE:CAPS">
801 <ANCHOR id="TP-SERVICE-POINT-TYPE-EMERGENCY:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-EMERGENCY:CAPS">
802 <ANCHOR id="TP-SERVICE-POINT-TYPE-COUNSELING:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-COUNSELING:CAPS">
803 <ANCHOR id="NUM-TP-SERVICE-POINT-TYPES:CAPS" href="telepathy-glib/telepathy-glib-enums.html#NUM-TP-SERVICE-POINT-TYPES:CAPS">
804 <ANCHOR id="TpAnonymityModeFlags" href="telepathy-glib/telepathy-glib-enums.html#TpAnonymityModeFlags">
805 <ANCHOR id="TP-ANONYMITY-MODE-CLIENT-INFO:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-ANONYMITY-MODE-CLIENT-INFO:CAPS">
806 <ANCHOR id="TP-ANONYMITY-MODE-SHOW-CLIENT-INFO:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-ANONYMITY-MODE-SHOW-CLIENT-INFO:CAPS">
807 <ANCHOR id="TP-ANONYMITY-MODE-NETWORK-INFO:CAPS" href="telepathy-glib/telepathy-glib-enums.html#TP-ANONYMITY-MODE-NETWORK-INFO:CAPS">
779808 <ANCHOR id="telepathy-glib-errors" href="telepathy-glib/telepathy-glib-errors.html">
780809 <ANCHOR id="telepathy-glib-errors.synopsis" href="telepathy-glib/telepathy-glib-errors.html#telepathy-glib-errors.synopsis">
781810 <ANCHOR id="telepathy-glib-errors.description" href="telepathy-glib/telepathy-glib-errors.html#telepathy-glib-errors.description">
822851 <ANCHOR id="TP-ERROR-REGISTRATION-EXISTS:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-REGISTRATION-EXISTS:CAPS">
823852 <ANCHOR id="TP-ERROR-SERVICE-BUSY:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-SERVICE-BUSY:CAPS">
824853 <ANCHOR id="TP-ERROR-RESOURCE-UNAVAILABLE:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-RESOURCE-UNAVAILABLE:CAPS">
854 <ANCHOR id="TP-ERROR-WOULD-BREAK-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-WOULD-BREAK-ANONYMITY:CAPS">
825855 <ANCHOR id="tp-g-set-error-invalid-handle-type" href="telepathy-glib/telepathy-glib-errors.html#tp-g-set-error-invalid-handle-type">
826856 <ANCHOR id="tp-g-set-error-unsupported-handle-type" href="telepathy-glib/telepathy-glib-errors.html#tp-g-set-error-unsupported-handle-type">
827857 <ANCHOR id="tp-error-get-dbus-name" href="telepathy-glib/telepathy-glib-errors.html#tp-error-get-dbus-name">
863893 <ANCHOR id="TP-ERROR-STR-REGISTRATION-EXISTS:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-STR-REGISTRATION-EXISTS:CAPS">
864894 <ANCHOR id="TP-ERROR-STR-SERVICE-BUSY:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-STR-SERVICE-BUSY:CAPS">
865895 <ANCHOR id="TP-ERROR-STR-RESOURCE-UNAVAILABLE:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-STR-RESOURCE-UNAVAILABLE:CAPS">
896 <ANCHOR id="TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS" href="telepathy-glib/telepathy-glib-errors.html#TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS">
866897 <ANCHOR id="telepathy-glib-gtypes" href="telepathy-glib/telepathy-glib-gtypes.html">
867898 <ANCHOR id="telepathy-glib-gtypes.synopsis" href="telepathy-glib/telepathy-glib-gtypes.html#telepathy-glib-gtypes.synopsis">
868899 <ANCHOR id="telepathy-glib-gtypes.description" href="telepathy-glib/telepathy-glib-gtypes.html#telepathy-glib-gtypes.description">
935966 <ANCHOR id="TP-HASH-TYPE-MESSAGE-PART:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART:CAPS">
936967 <ANCHOR id="TP-ARRAY-TYPE-MESSAGE-PART-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-MESSAGE-PART-LIST:CAPS">
937968 <ANCHOR id="TP-HASH-TYPE-MESSAGE-PART-CONTENT-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART-CONTENT-MAP:CAPS">
969 <ANCHOR id="TP-HASH-TYPE-CHAT-STATE-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-CHAT-STATE-MAP:CAPS">
938970 <ANCHOR id="TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS">
939971 <ANCHOR id="TP-STRUCT-TYPE-TUBE-INFO:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-TUBE-INFO:CAPS">
940972 <ANCHOR id="TP-ARRAY-TYPE-TUBE-INFO-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-TUBE-INFO-LIST:CAPS">
960992 <ANCHOR id="TP-HASH-TYPE-CHANNEL-CALL-STATE-MAP:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CALL-STATE-MAP:CAPS">
961993 <ANCHOR id="TP-ARRAY-TYPE-ROOM-INFO-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-ROOM-INFO-LIST:CAPS">
962994 <ANCHOR id="TP-STRUCT-TYPE-ROOM-INFO:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-ROOM-INFO:CAPS">
995 <ANCHOR id="TP-STRUCT-TYPE-SERVICE-POINT:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS">
996 <ANCHOR id="TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS">
997 <ANCHOR id="TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS">
963998 <ANCHOR id="TP-STRUCT-TYPE-AVATAR:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS">
964999 <ANCHOR id="TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS">
9651000 <ANCHOR id="TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS" href="telepathy-glib/telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS">
10671102 <ANCHOR id="TP-CONNECTION-FEATURE-CONNECTED:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONNECTED:CAPS">
10681103 <ANCHOR id="TP-CONNECTION-FEATURE-CAPABILITIES:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CAPABILITIES:CAPS">
10691104 <ANCHOR id="TP-CONNECTION-FEATURE-AVATAR-REQUIREMENTS:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-CONNECTION-FEATURE-AVATAR-REQUIREMENTS:CAPS">
1105 <ANCHOR id="TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS">
10701106 <ANCHOR id="tp-connection-run-until-ready" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-run-until-ready">
10711107 <ANCHOR id="TpConnectionWhenReadyCb" href="telepathy-glib/telepathy-glib-connection.html#TpConnectionWhenReadyCb">
10721108 <ANCHOR id="tp-connection-call-when-ready" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-call-when-ready">
10841120 <ANCHOR id="tp-connection-parse-object-path" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-parse-object-path">
10851121 <ANCHOR id="tp-connection-get-capabilities" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-get-capabilities">
10861122 <ANCHOR id="tp-connection-get-avatar-requirements" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-get-avatar-requirements">
1123 <ANCHOR id="tp-connection-get-contact-info-flags" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-get-contact-info-flags">
1124 <ANCHOR id="tp-connection-get-contact-info-supported-fields" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-get-contact-info-supported-fields">
1125 <ANCHOR id="tp-connection-set-contact-info-async" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-set-contact-info-async">
1126 <ANCHOR id="tp-connection-set-contact-info-finish" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-set-contact-info-finish">
10871127 <ANCHOR id="TP-UNKNOWN-CONNECTION-STATUS:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-UNKNOWN-CONNECTION-STATUS:CAPS">
10881128 <ANCHOR id="TP-ERRORS-DISCONNECTED:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-ERRORS-DISCONNECTED:CAPS">
10891129 <ANCHOR id="tp-connection-get-detailed-error" href="telepathy-glib/telepathy-glib-connection.html#tp-connection-get-detailed-error">
10921132 <ANCHOR id="tp-avatar-requirements-new" href="telepathy-glib/telepathy-glib-connection.html#tp-avatar-requirements-new">
10931133 <ANCHOR id="tp-avatar-requirements-copy" href="telepathy-glib/telepathy-glib-connection.html#tp-avatar-requirements-copy">
10941134 <ANCHOR id="tp-avatar-requirements-destroy" href="telepathy-glib/telepathy-glib-connection.html#tp-avatar-requirements-destroy">
1135 <ANCHOR id="TpContactInfoFieldSpec" href="telepathy-glib/telepathy-glib-connection.html#TpContactInfoFieldSpec">
1136 <ANCHOR id="TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS">
1137 <ANCHOR id="tp-contact-info-field-spec-copy" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-field-spec-copy">
1138 <ANCHOR id="tp-contact-info-field-spec-free" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-field-spec-free">
1139 <ANCHOR id="TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS">
1140 <ANCHOR id="tp-contact-info-spec-list-copy" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-spec-list-copy">
1141 <ANCHOR id="tp-contact-info-spec-list-free" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-spec-list-free">
1142 <ANCHOR id="TpContactInfoField" href="telepathy-glib/telepathy-glib-connection.html#TpContactInfoField">
1143 <ANCHOR id="TP-TYPE-CONTACT-INFO-FIELD:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD:CAPS">
1144 <ANCHOR id="tp-contact-info-field-new" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-field-new">
1145 <ANCHOR id="tp-contact-info-field-copy" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-field-copy">
1146 <ANCHOR id="tp-contact-info-field-free" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-field-free">
1147 <ANCHOR id="TP-TYPE-CONTACT-INFO-LIST:CAPS" href="telepathy-glib/telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-LIST:CAPS">
1148 <ANCHOR id="tp-contact-info-list-copy" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-list-copy">
1149 <ANCHOR id="tp-contact-info-list-free" href="telepathy-glib/telepathy-glib-connection.html#tp-contact-info-list-free">
10951150 <ANCHOR id="tp-cli-connection-callback-for-connect" href="telepathy-glib/telepathy-glib-connection.html#tp-cli-connection-callback-for-connect">
10961151 <ANCHOR id="tp-cli-connection-call-connect" href="telepathy-glib/telepathy-glib-connection.html#tp-cli-connection-call-connect">
10971152 <ANCHOR id="tp-cli-connection-run-connect" href="telepathy-glib/telepathy-glib-connection.html#tp-cli-connection-run-connect">
11481203 <ANCHOR id="TpContact" href="telepathy-glib/telepathy-glib-contact.html#TpContact">
11491204 <ANCHOR id="telepathy-glib-contact.object-hierarchy" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.object-hierarchy">
11501205 <ANCHOR id="telepathy-glib-contact.properties" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.properties">
1206 <ANCHOR id="telepathy-glib-contact.signals" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.signals">
11511207 <ANCHOR id="telepathy-glib-contact.description" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.description">
11521208 <ANCHOR id="telepathy-glib-contact.details" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.details">
11531209 <ANCHOR id="TpContact-struct" href="telepathy-glib/telepathy-glib-contact.html#TpContact-struct">
11581214 <ANCHOR id="TP-CONTACT-FEATURE-LOCATION:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-LOCATION:CAPS">
11591215 <ANCHOR id="TP-CONTACT-FEATURE-CAPABILITIES:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-CAPABILITIES:CAPS">
11601216 <ANCHOR id="TP-CONTACT-FEATURE-AVATAR-DATA:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS">
1217 <ANCHOR id="TP-CONTACT-FEATURE-CONTACT-INFO:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-CONTACT-FEATURE-CONTACT-INFO:CAPS">
11611218 <ANCHOR id="TP-TYPE-CONTACT-FEATURE:CAPS" href="telepathy-glib/telepathy-glib-contact.html#TP-TYPE-CONTACT-FEATURE:CAPS">
11621219 <ANCHOR id="TpConnectionContactsByHandleCb" href="telepathy-glib/telepathy-glib-contact.html#TpConnectionContactsByHandleCb">
11631220 <ANCHOR id="tp-connection-get-contacts-by-handle" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-get-contacts-by-handle">
11651222 <ANCHOR id="tp-connection-get-contacts-by-id" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-get-contacts-by-id">
11661223 <ANCHOR id="TpConnectionUpgradeContactsCb" href="telepathy-glib/telepathy-glib-contact.html#TpConnectionUpgradeContactsCb">
11671224 <ANCHOR id="tp-connection-upgrade-contacts" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-upgrade-contacts">
1225 <ANCHOR id="tp-connection-refresh-contact-info" href="telepathy-glib/telepathy-glib-contact.html#tp-connection-refresh-contact-info">
11681226 <ANCHOR id="tp-contact-get-alias" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-alias">
11691227 <ANCHOR id="tp-contact-get-avatar-token" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-avatar-token">
11701228 <ANCHOR id="tp-contact-get-avatar-file" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-avatar-file">
11771235 <ANCHOR id="tp-contact-get-presence-type" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-presence-type">
11781236 <ANCHOR id="tp-contact-get-location" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-location">
11791237 <ANCHOR id="tp-contact-get-capabilities" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-capabilities">
1238 <ANCHOR id="tp-contact-get-contact-info" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-get-contact-info">
1239 <ANCHOR id="tp-contact-request-contact-info-async" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-request-contact-info-async">
1240 <ANCHOR id="tp-contact-request-contact-info-finish" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-request-contact-info-finish">
11801241 <ANCHOR id="tp-contact-has-feature" href="telepathy-glib/telepathy-glib-contact.html#tp-contact-has-feature">
11811242 <ANCHOR id="telepathy-glib-contact.property-details" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.property-details">
11821243 <ANCHOR id="TpContact--alias" href="telepathy-glib/telepathy-glib-contact.html#TpContact--alias">
11851246 <ANCHOR id="TpContact--avatar-token" href="telepathy-glib/telepathy-glib-contact.html#TpContact--avatar-token">
11861247 <ANCHOR id="TpContact--capabilities" href="telepathy-glib/telepathy-glib-contact.html#TpContact--capabilities">
11871248 <ANCHOR id="TpContact--connection" href="telepathy-glib/telepathy-glib-contact.html#TpContact--connection">
1249 <ANCHOR id="TpContact--contact-info" href="telepathy-glib/telepathy-glib-contact.html#TpContact--contact-info">
11881250 <ANCHOR id="TpContact--handle" href="telepathy-glib/telepathy-glib-contact.html#TpContact--handle">
11891251 <ANCHOR id="TpContact--identifier" href="telepathy-glib/telepathy-glib-contact.html#TpContact--identifier">
11901252 <ANCHOR id="TpContact--location" href="telepathy-glib/telepathy-glib-contact.html#TpContact--location">
11911253 <ANCHOR id="TpContact--presence-message" href="telepathy-glib/telepathy-glib-contact.html#TpContact--presence-message">
11921254 <ANCHOR id="TpContact--presence-status" href="telepathy-glib/telepathy-glib-contact.html#TpContact--presence-status">
11931255 <ANCHOR id="TpContact--presence-type" href="telepathy-glib/telepathy-glib-contact.html#TpContact--presence-type">
1256 <ANCHOR id="telepathy-glib-contact.signal-details" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.signal-details">
1257 <ANCHOR id="TpContact-presence-changed" href="telepathy-glib/telepathy-glib-contact.html#TpContact-presence-changed">
11941258 <ANCHOR id="telepathy-glib-contact.see-also" href="telepathy-glib/telepathy-glib-contact.html#telepathy-glib-contact.see-also">
11951259 <ANCHOR id="telepathy-glib-capabilities" href="telepathy-glib/telepathy-glib-capabilities.html">
11961260 <ANCHOR id="telepathy-glib-capabilities.synopsis" href="telepathy-glib/telepathy-glib-capabilities.html#telepathy-glib-capabilities.synopsis">
17101774 <ANCHOR id="tp-cli-channel-type-room-list-signal-callback-got-rooms" href="telepathy-glib/telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms">
17111775 <ANCHOR id="tp-cli-channel-type-room-list-signal-callback-listing-rooms" href="telepathy-glib/telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms">
17121776 <ANCHOR id="telepathy-glib-channel-roomlist.see-also" href="telepathy-glib/telepathy-glib-channel-roomlist.html#telepathy-glib-channel-roomlist.see-also">
1777 <ANCHOR id="telepathy-glib-cli-anonymity" href="telepathy-glib/telepathy-glib-cli-anonymity.html">
1778 <ANCHOR id="telepathy-glib-cli-anonymity.synopsis" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.synopsis">
1779 <ANCHOR id="telepathy-glib-cli-anonymity.description" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.description">
1780 <ANCHOR id="telepathy-glib-cli-anonymity.details" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.details">
1781 <ANCHOR id="tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed" href="telepathy-glib/telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed">
1782 <ANCHOR id="tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed" href="telepathy-glib/telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed">
1783 <ANCHOR id="telepathy-glib-cli-anonymity.see-also" href="telepathy-glib/telepathy-glib-cli-anonymity.html#telepathy-glib-cli-anonymity.see-also">
1784 <ANCHOR id="telepathy-glib-cli-service-point" href="telepathy-glib/telepathy-glib-cli-service-point.html">
1785 <ANCHOR id="telepathy-glib-cli-service-point.synopsis" href="telepathy-glib/telepathy-glib-cli-service-point.html#telepathy-glib-cli-service-point.synopsis">
1786 <ANCHOR id="telepathy-glib-cli-service-point.description" href="telepathy-glib/telepathy-glib-cli-service-point.html#telepathy-glib-cli-service-point.description">
1787 <ANCHOR id="telepathy-glib-cli-service-point.details" href="telepathy-glib/telepathy-glib-cli-service-point.html#telepathy-glib-cli-service-point.details">
1788 <ANCHOR id="tp-cli-channel-interface-service-point-connect-to-service-point-changed" href="telepathy-glib/telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed">
1789 <ANCHOR id="tp-cli-channel-interface-service-point-signal-callback-service-point-changed" href="telepathy-glib/telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed">
1790 <ANCHOR id="tp-cli-connection-interface-service-point-connect-to-service-points-changed" href="telepathy-glib/telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-connect-to-service-points-changed">
1791 <ANCHOR id="tp-cli-connection-interface-service-point-signal-callback-service-points-changed" href="telepathy-glib/telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed">
1792 <ANCHOR id="telepathy-glib-cli-service-point.see-also" href="telepathy-glib/telepathy-glib-cli-service-point.html#telepathy-glib-cli-service-point.see-also">
17131793 <ANCHOR id="telepathy-glib-media-interfaces" href="telepathy-glib/telepathy-glib-media-interfaces.html">
17141794 <ANCHOR id="telepathy-glib-media-interfaces.synopsis" href="telepathy-glib/telepathy-glib-media-interfaces.html#telepathy-glib-media-interfaces.synopsis">
17151795 <ANCHOR id="TpMediaSessionHandler" href="telepathy-glib/telepathy-glib-media-interfaces.html#TpMediaSessionHandler">
18681948 <ANCHOR id="tp-account-set-connect-automatically-finish" href="telepathy-glib/telepathy-glib-account.html#tp-account-set-connect-automatically-finish">
18691949 <ANCHOR id="tp-account-get-has-been-online" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-has-been-online">
18701950 <ANCHOR id="tp-account-get-connection-status" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-connection-status">
1951 <ANCHOR id="tp-account-get-detailed-error" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-detailed-error">
18711952 <ANCHOR id="tp-account-get-changing-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-changing-presence">
18721953 <ANCHOR id="tp-account-get-current-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-current-presence">
18731954 <ANCHOR id="tp-account-get-requested-presence" href="telepathy-glib/telepathy-glib-account.html#tp-account-get-requested-presence">
18991980 <ANCHOR id="TpAccount--changing-presence" href="telepathy-glib/telepathy-glib-account.html#TpAccount--changing-presence">
19001981 <ANCHOR id="TpAccount--connect-automatically" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connect-automatically">
19011982 <ANCHOR id="TpAccount--connection" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection">
1983 <ANCHOR id="TpAccount--connection-error" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-error">
1984 <ANCHOR id="TpAccount--connection-error-details" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-error-details">
19021985 <ANCHOR id="TpAccount--connection-manager" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-manager">
19031986 <ANCHOR id="TpAccount--connection-status" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-status">
19041987 <ANCHOR id="TpAccount--connection-status-reason" href="telepathy-glib/telepathy-glib-account.html#TpAccount--connection-status-reason">
19682051 <ANCHOR id="tp-channel-dispatch-operation-borrow-possible-handlers" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-possible-handlers">
19692052 <ANCHOR id="tp-channel-dispatch-operation-handle-with-async" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-async">
19702053 <ANCHOR id="tp-channel-dispatch-operation-handle-with-finish" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-finish">
2054 <ANCHOR id="tp-channel-dispatch-operation-handle-with-time-async" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-async">
2055 <ANCHOR id="tp-channel-dispatch-operation-handle-with-time-finish" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-finish">
19712056 <ANCHOR id="tp-channel-dispatch-operation-claim-async" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-async">
19722057 <ANCHOR id="tp-channel-dispatch-operation-claim-finish" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-finish">
19732058 <ANCHOR id="telepathy-glib-channel-dispatch-operation.property-details" href="telepathy-glib/telepathy-glib-channel-dispatch-operation.html#telepathy-glib-channel-dispatch-operation.property-details">
26682753 <ANCHOR id="TpSvcConnectionInterfaceLocation-location-updated" href="telepathy-glib/telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceLocation-location-updated">
26692754 <ANCHOR id="TpSvcConnectionInterfaceContactInfo-contact-info-changed" href="telepathy-glib/telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceContactInfo-contact-info-changed">
26702755 <ANCHOR id="telepathy-glib-svc-connection.see-also" href="telepathy-glib/telepathy-glib-svc-connection.html#telepathy-glib-svc-connection.see-also">
2756 <ANCHOR id="telepathy-glib-svc-anonymity" href="telepathy-glib/telepathy-glib-svc-anonymity.html">
2757 <ANCHOR id="telepathy-glib-svc-anonymity.synopsis" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.synopsis">
2758 <ANCHOR id="TpSvcConnectionInterfaceAnonymity" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity">
2759 <ANCHOR id="TpSvcChannelInterfaceAnonymity" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymity">
2760 <ANCHOR id="telepathy-glib-svc-anonymity.object-hierarchy" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.object-hierarchy">
2761 <ANCHOR id="telepathy-glib-svc-anonymity.signals" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.signals">
2762 <ANCHOR id="telepathy-glib-svc-anonymity.description" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.description">
2763 <ANCHOR id="telepathy-glib-svc-anonymity.details" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.details">
2764 <ANCHOR id="TpSvcConnectionInterfaceAnonymity-struct" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-struct">
2765 <ANCHOR id="TpSvcConnectionInterfaceAnonymityClass" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymityClass">
2766 <ANCHOR id="tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed" href="telepathy-glib/telepathy-glib-svc-anonymity.html#tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed">
2767 <ANCHOR id="TpSvcChannelInterfaceAnonymity-struct" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymity-struct">
2768 <ANCHOR id="TpSvcChannelInterfaceAnonymityClass" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymityClass">
2769 <ANCHOR id="telepathy-glib-svc-anonymity.signal-details" href="telepathy-glib/telepathy-glib-svc-anonymity.html#telepathy-glib-svc-anonymity.signal-details">
2770 <ANCHOR id="TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed" href="telepathy-glib/telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed">
2771 <ANCHOR id="telepathy-glib-svc-service-point" href="telepathy-glib/telepathy-glib-svc-service-point.html">
2772 <ANCHOR id="telepathy-glib-svc-service-point.synopsis" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.synopsis">
2773 <ANCHOR id="TpSvcConnectionInterfaceServicePoint" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint">
2774 <ANCHOR id="TpSvcChannelInterfaceServicePoint" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint">
2775 <ANCHOR id="telepathy-glib-svc-service-point.object-hierarchy" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.object-hierarchy">
2776 <ANCHOR id="telepathy-glib-svc-service-point.signals" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.signals">
2777 <ANCHOR id="telepathy-glib-svc-service-point.description" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.description">
2778 <ANCHOR id="telepathy-glib-svc-service-point.details" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.details">
2779 <ANCHOR id="TpSvcConnectionInterfaceServicePoint-struct" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-struct">
2780 <ANCHOR id="TpSvcConnectionInterfaceServicePointClass" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePointClass">
2781 <ANCHOR id="tp-svc-connection-interface-service-point-emit-service-points-changed" href="telepathy-glib/telepathy-glib-svc-service-point.html#tp-svc-connection-interface-service-point-emit-service-points-changed">
2782 <ANCHOR id="TpSvcChannelInterfaceServicePoint-struct" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-struct">
2783 <ANCHOR id="TpSvcChannelInterfaceServicePointClass" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePointClass">
2784 <ANCHOR id="tp-svc-channel-interface-service-point-emit-service-point-changed" href="telepathy-glib/telepathy-glib-svc-service-point.html#tp-svc-channel-interface-service-point-emit-service-point-changed">
2785 <ANCHOR id="telepathy-glib-svc-service-point.signal-details" href="telepathy-glib/telepathy-glib-svc-service-point.html#telepathy-glib-svc-service-point.signal-details">
2786 <ANCHOR id="TpSvcConnectionInterfaceServicePoint-service-points-changed" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-service-points-changed">
2787 <ANCHOR id="TpSvcChannelInterfaceServicePoint-service-point-changed" href="telepathy-glib/telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-service-point-changed">
26712788 <ANCHOR id="telepathy-glib-svc-media-interfaces" href="telepathy-glib/telepathy-glib-svc-media-interfaces.html">
26722789 <ANCHOR id="telepathy-glib-svc-media-interfaces.synopsis" href="telepathy-glib/telepathy-glib-svc-media-interfaces.html#telepathy-glib-svc-media-interfaces.synopsis">
26732790 <ANCHOR id="TpSvcMediaSessionHandler" href="telepathy-glib/telepathy-glib-svc-media-interfaces.html#TpSvcMediaSessionHandler">
34483565 <ANCHOR id="TP-TYPE-HANDLE-SET:CAPS" href="telepathy-glib/telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS">
34493566 <ANCHOR id="TpHandleSetMemberFunc" href="telepathy-glib/telepathy-glib-handle-repo.html#TpHandleSetMemberFunc">
34503567 <ANCHOR id="tp-handle-set-new" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-new">
3568 <ANCHOR id="tp-handle-set-new-from-array" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-new-from-array">
34513569 <ANCHOR id="tp-handle-set-copy" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-copy">
34523570 <ANCHOR id="tp-handle-set-clear" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-clear">
34533571 <ANCHOR id="tp-handle-set-destroy" href="telepathy-glib/telepathy-glib-handle-repo.html#tp-handle-set-destroy">
35353653 <ANCHOR id="tp-weak-ref-dup-object" href="telepathy-glib/telepathy-glib-util.html#tp-weak-ref-dup-object">
35363654 <ANCHOR id="tp-weak-ref-get-user-data" href="telepathy-glib/telepathy-glib-util.html#tp-weak-ref-get-user-data">
35373655 <ANCHOR id="tp-weak-ref-destroy" href="telepathy-glib/telepathy-glib-util.html#tp-weak-ref-destroy">
3656 <ANCHOR id="tp-clear-pointer" href="telepathy-glib/telepathy-glib-util.html#tp-clear-pointer">
3657 <ANCHOR id="tp-clear-object" href="telepathy-glib/telepathy-glib-util.html#tp-clear-object">
3658 <ANCHOR id="tp-clear-boxed" href="telepathy-glib/telepathy-glib-util.html#tp-clear-boxed">
35383659 <ANCHOR id="telepathy-glib-gnio-util" href="telepathy-glib/telepathy-glib-gnio-util.html">
35393660 <ANCHOR id="telepathy-glib-gnio-util.synopsis" href="telepathy-glib/telepathy-glib-gnio-util.html#telepathy-glib-gnio-util.synopsis">
35403661 <ANCHOR id="telepathy-glib-gnio-util.description" href="telepathy-glib/telepathy-glib-gnio-util.html#telepathy-glib-gnio-util.description">
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 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-account.html#tp-account-get-detailed-error" title="tp_account_get_detailed_error ()">tp_account_get_detailed_error</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *self</code></em>,
135 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **details</code></em>);
134136 <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>);
135137 <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>
136138 (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *account</code></em>,
265267 "<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
266268 "<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
267269 "<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
270 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection-error" title='The "connection-error" property'>connection-error</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
271 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection-error-details" title='The "connection-error-details" property'>connection-error-details</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read
268272 "<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
269273 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection-status" title='The "connection-status" property'>connection-status</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
270274 "<a class="link" href="telepathy-glib-account.html#TpAccount--connection-status-reason" title='The "connection-status-reason" property'>connection-status-reason</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
13631367 <p class="since">Since 0.9.0</p>
13641368 </div>
13651369 <hr>
1370 <div class="refsect2" title="tp_account_get_detailed_error ()">
1371 <a name="tp-account-get-detailed-error"></a><h3>tp_account_get_detailed_error ()</h3>
1372 <pre class="programlisting">const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * tp_account_get_detailed_error (<em class="parameter"><code><a class="link" href="telepathy-glib-account.html#TpAccount"><span class="type">TpAccount</span></a> *self</code></em>,
1373 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a> **details</code></em>);</pre>
1374 <p>
1375 If the account's connection is not connected, return the D-Bus error name
1376 with which it last disconnected or failed to connect (in particular, this
1377 is <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-CANCELLED:CAPS" title="TP_ERROR_STR_CANCELLED"><code class="literal">TP_ERROR_STR_CANCELLED</code></a> if it was disconnected by a user request).
1378 This is the same as <a class="link" href="telepathy-glib-account.html#TpAccount--connection-error" title='The "connection-error" property'><span class="type">"connection-error"</span></a>.
1379 </p>
1380 <p>
1381 If <em class="parameter"><code>details</code></em> is not <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, it will be used to return additional details about
1382 the error (the same as <a class="link" href="telepathy-glib-account.html#TpAccount--connection-error-details" title='The "connection-error-details" property'><span class="type">"connection-error-details"</span></a>).
1383 </p>
1384 <p>
1385 Otherwise, return <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, without altering <em class="parameter"><code>details</code></em>.
1386 </p>
1387 <p>
1388 The returned string and <em class="parameter"><code>details</code></em> may become invalid when the main loop is
1389 re-entered or the account is destroyed.
1390 </p>
1391 <div class="variablelist"><table border="0">
1392 <col align="left" valign="top">
1393 <tbody>
1394 <tr>
1395 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1396 <td>an account
1397 </td>
1398 </tr>
1399 <tr>
1400 <td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
1401 <td>
1402 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
1403 modified, destroyed or unreffed 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>
1404 </td>
1405 </tr>
1406 <tr>
1407 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1408 <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>
1409 </td>
1410 </tr>
1411 </tbody>
1412 </table></div>
1413 <p class="since">Since 0.11.7</p>
1414 </div>
1415 <hr>
13661416 <div class="refsect2" title="tp_account_get_changing_presence ()">
13671417 <a name="tp-account-get-changing-presence"></a><h3>tp_account_get_changing_presence ()</h3>
13681418 <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>
26192669 <p class="since">Since 0.9.0</p>
26202670 </div>
26212671 <hr>
2672 <div class="refsect2" title='The "connection-error" property'>
2673 <a name="TpAccount--connection-error"></a><h3>The <code class="literal">"connection-error"</code> property</h3>
2674 <pre class="programlisting"> "connection-error" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
2675 <p>
2676 The D-Bus error name for the last disconnection or connection failure,
2677 (in particular, <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-CANCELLED:CAPS" title="TP_ERROR_STR_CANCELLED"><code class="literal">TP_ERROR_STR_CANCELLED</code></a> if it was disconnected by user
2678 request), or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the account is connected.
2679 </p>
2680 <p>
2681 One can receive change notifications on this property by connecting
2682 to the <a class="link" href="telepathy-glib-account.html#TpAccount-status-changed" title='The "status-changed" signal'><span class="type">"status-changed"</span></a> signal, or by connecting
2683 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
2684 detail.
2685 </p>
2686 <p>
2687 This is not guaranteed to have been retrieved until
2688 <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
2689 <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.
2690 </p>
2691 <p>Default value: NULL</p>
2692 <p class="since">Since 0.11.7</p>
2693 </div>
2694 <hr>
2695 <div class="refsect2" title='The "connection-error-details" property'>
2696 <a name="TpAccount--connection-error-details"></a><h3>The <code class="literal">"connection-error-details"</code> property</h3>
2697 <pre class="programlisting"> "connection-error-details" <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>* : Read</pre>
2698 <p>
2699 A map from string to <a href="/usr/share/gtk-doc/html/gobject/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing extensible error details
2700 related to <a class="link" href="telepathy-glib-account.html#TpAccount--connection-error" title='The "connection-error" property'><span class="type">"connection-error"</span></a>. Functions like <a class="link" href="telepathy-glib-asv.html#tp-asv-get-string" title="tp_asv_get_string ()"><code class="function">tp_asv_get_string()</code></a>
2701 can be used to read from this map.
2702 </p>
2703 <p>
2704 The keys for this map are defined by
2705 <a class="ulink" href="http://telepathy.freedesktop.org/spec/" target="_top">the Telepathy D-Bus
2706 Interface Specification</a>. They will typically include
2707 <code class="literal">debug-message</code>, which is a debugging message in the C
2708 locale, analogous to <span class="type">GError.message</span>.
2709 </p>
2710 <p>
2711 One can receive change notifications on this property by connecting
2712 to the <a class="link" href="telepathy-glib-account.html#TpAccount-status-changed" title='The "status-changed" signal'><span class="type">"status-changed"</span></a> signal, or by connecting
2713 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
2714 detail.
2715 </p>
2716 <p>
2717 This is not guaranteed to have been retrieved until
2718 <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
2719 an empty map.
2720 </p>
2721 <p class="since">Since 0.11.7</p>
2722 </div>
2723 <hr>
26222724 <div class="refsect2" title='The "connection-manager" property'>
26232725 <a name="TpAccount--connection-manager"></a><h3>The <code class="literal">"connection-manager"</code> property</h3>
26242726 <pre class="programlisting"> "connection-manager" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read</pre>
26372739 </p>
26382740 <p>
26392741 One can receive change notifications on this property by connecting
2742 to the <a class="link" href="telepathy-glib-account.html#TpAccount-status-changed" title='The "status-changed" signal'><span class="type">"status-changed"</span></a> signal, or by connecting
26402743 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
26412744 detail.
26422745 </p>
26582761 </p>
26592762 <p>
26602763 One can receive change notifications on this property by connecting
2764 to the <a class="link" href="telepathy-glib-account.html#TpAccount-status-changed" title='The "status-changed" signal'><span class="type">"status-changed"</span></a> signal, or by connecting
26612765 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
26622766 detail.
26632767 </p>
29653069 <p>
29663070 Emitted when the connection status on the account changes.
29673071 </p>
3072 <p>
3073 The <em class="parameter"><code>dbus_error_name</code></em> and <em class="parameter"><code>details</code></em> parameters were present, but
3074 non-functional (always <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>), in older versions. They have been
3075 available with their current behaviour since version 0.11.7.
3076 </p>
29683077 <div class="variablelist"><table border="0">
29693078 <col align="left" valign="top">
29703079 <tbody>
29753084 </tr>
29763085 <tr>
29773086 <td><p><span class="term"><em class="parameter"><code>old_status</code></em> :</span></p></td>
2978 <td>old connection status
3087 <td>old <a class="link" href="telepathy-glib-account.html#TpAccount--connection-status" title='The "connection-status" property'><span class="type">"connection-status"</span></a>
29793088 </td>
29803089 </tr>
29813090 <tr>
29823091 <td><p><span class="term"><em class="parameter"><code>new_status</code></em> :</span></p></td>
2983 <td>new connection status
3092 <td>new <a class="link" href="telepathy-glib-account.html#TpAccount--connection-status" title='The "connection-status" property'><span class="type">"connection-status"</span></a>
29843093 </td>
29853094 </tr>
29863095 <tr>
29873096 <td><p><span class="term"><em class="parameter"><code>reason</code></em> :</span></p></td>
2988 <td>the reason for the status change
3097 <td>the <a class="link" href="telepathy-glib-account.html#TpAccount--connection-status-reason" title='The "connection-status-reason" property'><span class="type">"connection-status-reason"</span></a>
29893098 </td>
29903099 </tr>
29913100 <tr>
29923101 <td><p><span class="term"><em class="parameter"><code>dbus_error_name</code></em> :</span></p></td>
2993 <td>currently unused, but for exposing the dbus error name
2994 on a connection error in the future
3102 <td> the <a class="link" href="telepathy-glib-account.html#TpAccount--connection-error" title='The "connection-error" property'><span class="type">"connection-error"</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
29953103 </td>
29963104 </tr>
29973105 <tr>
29983106 <td><p><span class="term"><em class="parameter"><code>details</code></em> :</span></p></td>
2999 <td>currently unused, but for exposing the error details
3000 on a connection error in the future
3107 <td> the
3108 <a class="link" href="telepathy-glib-account.html#TpAccount--connection-error-details" title='The "connection-error-details" property'><span class="type">"connection-error-details"</span></a>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8 GObject.Value]</span>
30013109 </td>
30023110 </tr>
30033111 <tr>
234234 <p>
235235 </p>
236236 <div class="example">
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>
237 <a name="id608544"></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>
140140 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
141141 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
142142 <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>);
143 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-async" title="tp_channel_dispatch_operation_handle_with_time_async ()">tp_channel_dispatch_operation_handle_with_time_async</a>
144 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
145 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *handler</code></em>,
146 <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_timestamp</code></em>,
147 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
148 <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>);
149 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-finish" title="tp_channel_dispatch_operation_handle_with_time_finish ()">tp_channel_dispatch_operation_handle_with_time_finish</a>
150 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
151 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
152 <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>);
143153 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-async" title="tp_channel_dispatch_operation_claim_async ()">tp_channel_dispatch_operation_claim_async</a>
144154 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
145155 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
10841094 </tr>
10851095 <tr>
10861096 <td><p><span class="term"><em class="parameter"><code>handler</code></em> :</span></p></td>
1087 <td>The well-known bus name (starting with <a class="link" href="telepathy-glib-defs.html#TP-CLIENT-BUS-NAME-BASE:CAPS" title="TP_CLIENT_BUS_NAME_BASE"><span class="type">TP_CLIENT_BUS_NAME_BASE</span></a>)
1088 of the channel handler that should handle the channel, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
1089 if the client has no preferred channel handler
1097 <td> The well-known bus name (starting with
1098 <a class="link" href="telepathy-glib-defs.html#TP-CLIENT-BUS-NAME-BASE:CAPS" title="TP_CLIENT_BUS_NAME_BASE"><span class="type">TP_CLIENT_BUS_NAME_BASE</span></a>) of the channel handler that should handle the
1099 channel, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the client has no preferred channel handler. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
10901100 </td>
10911101 </tr>
10921102 <tr>
11401150 </tbody>
11411151 </table></div>
11421152 <p class="since">Since 0.11.5</p>
1153 </div>
1154 <hr>
1155 <div class="refsect2" title="tp_channel_dispatch_operation_handle_with_time_async ()">
1156 <a name="tp-channel-dispatch-operation-handle-with-time-async"></a><h3>tp_channel_dispatch_operation_handle_with_time_async ()</h3>
1157 <pre class="programlisting"><span class="returnvalue">void</span> tp_channel_dispatch_operation_handle_with_time_async
1158 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
1159 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *handler</code></em>,
1160 <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_timestamp</code></em>,
1161 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
1162 <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>
1163 <p>
1164 A variant of <a class="link" href="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-async" title="tp_channel_dispatch_operation_handle_with_async ()"><code class="function">tp_channel_dispatch_operation_handle_with_async()</code></a>
1165 allowing the approver to pass an user action time.
1166 This timestamp will be passed to the Handler when HandleChannels is called.
1167 </p>
1168 <p>
1169 If an X server timestamp for the user action causing this method call is
1170 available, <em class="parameter"><code>user_action_timestamp</code></em> should be this timestamp (for instance, the
1171 result of <a href="/usr/share/gtk-doc/html/gdk/gdk-Events.html#gdk-event-get-time"><code class="function">gdk_event_get_time()</code></a> if it is not <a href="/usr/share/gtk-doc/html/gdk/gdk-Events.html#GDK-CURRENT-TIME:CAPS"><code class="literal">GDK_CURRENT_TIME</code></a>). Otherwise, it
1172 may be 0 to behave as if there was no user action or it happened a long time
1173 ago, or <a href="/usr/share/gtk-doc/html/glib/glib-Limits-of-Basic-Types.html#G-MAXINT64:CAPS"><code class="literal">G_MAXINT64</code></a> to have the Handler behave as though the user action had
1174 just happened (resembling, but not numerically equal to, <a href="/usr/share/gtk-doc/html/gdk/gdk-Events.html#GDK-CURRENT-TIME:CAPS"><code class="literal">GDK_CURRENT_TIME</code></a>).
1175 </p>
1176 <p>
1177 This method has been introduced in telepathy-mission-control 5.5.0.
1178 </p>
1179 <div class="variablelist"><table border="0">
1180 <col align="left" valign="top">
1181 <tbody>
1182 <tr>
1183 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1184 <td>a <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a>
1185 </td>
1186 </tr>
1187 <tr>
1188 <td><p><span class="term"><em class="parameter"><code>handler</code></em> :</span></p></td>
1189 <td> The well-known bus name (starting with
1190 <a class="link" href="telepathy-glib-defs.html#TP-CLIENT-BUS-NAME-BASE:CAPS" title="TP_CLIENT_BUS_NAME_BASE"><span class="type">TP_CLIENT_BUS_NAME_BASE</span></a>) of the channel handler that should handle the
1191 channel, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the client has no preferred channel handler. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1192 </td>
1193 </tr>
1194 <tr>
1195 <td><p><span class="term"><em class="parameter"><code>user_action_timestamp</code></em> :</span></p></td>
1196 <td>the time at which user action occurred
1197 </td>
1198 </tr>
1199 <tr>
1200 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
1201 <td>a callback to call when the call returns
1202 </td>
1203 </tr>
1204 <tr>
1205 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1206 <td>data to pass to <em class="parameter"><code>callback</code></em>
1207 </td>
1208 </tr>
1209 </tbody>
1210 </table></div>
1211 <p class="since">Since 0.11.7</p>
1212 </div>
1213 <hr>
1214 <div class="refsect2" title="tp_channel_dispatch_operation_handle_with_time_finish ()">
1215 <a name="tp-channel-dispatch-operation-handle-with-time-finish"></a><h3>tp_channel_dispatch_operation_handle_with_time_finish ()</h3>
1216 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_channel_dispatch_operation_handle_with_time_finish
1217 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a> *self</code></em>,
1218 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
1219 <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>
1220 <p>
1221 Finishes an async call to <code class="function">HandleWithTime()</code>.
1222 </p>
1223 <div class="variablelist"><table border="0">
1224 <col align="left" valign="top">
1225 <tbody>
1226 <tr>
1227 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1228 <td>a <a class="link" href="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation"><span class="type">TpChannelDispatchOperation</span></a>
1229 </td>
1230 </tr>
1231 <tr>
1232 <td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
1233 <td>a <a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
1234 </td>
1235 </tr>
1236 <tr>
1237 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
1238 <td>a <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> to fill
1239 </td>
1240 </tr>
1241 <tr>
1242 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1243 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <code class="function">HandleWithTime()</code> call was successful, otherwise <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
1244
1245 </td>
1246 </tr>
1247 </tbody>
1248 </table></div>
1249 <p class="since">Since 0.11.7</p>
11431250 </div>
11441251 <hr>
11451252 <div class="refsect2" title="tp_channel_dispatch_operation_claim_async ()">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
88 <link rel="prev" href="telepathy-glib-channel-tube.html" title="Tube channels">
9 <link rel="next" href="telepathy-glib-media-interfaces.html" title="TpMediaSessionHandler, TpMediaStreamHandler">
9 <link rel="next" href="telepathy-glib-cli-anonymity.html" title="Connection and Channel Anonymity interfaces">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-media-interfaces.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-cli-anonymity.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-channel-roomlist.synopsis" class="shortcut">Top</a>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Connection and Channel Anonymity interfaces</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
9 <link rel="next" href="telepathy-glib-cli-service-point.html" title="Connection and Channel ServicePoint interfaces">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-channel-roomlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-cli-service-point.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-cli-anonymity.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-cli-anonymity.description" class="shortcut">Description</a>
26 </td></tr>
27 </table>
28 <div class="refentry" title="Connection and Channel Anonymity interfaces">
29 <a name="telepathy-glib-cli-anonymity"></a><div class="titlepage"></div>
30 <div class="refnamediv"><table width="100%"><tr>
31 <td valign="top">
32 <h2><span class="refentrytitle"><a name="telepathy-glib-cli-anonymity.top_of_page"></a>Connection and Channel Anonymity interfaces</span></h2>
33 <p>Connection and Channel Anonymity interfaces — client-side wrappers for the Anonymity interfaces</p>
34 </td>
35 <td valign="top" align="right"></td>
36 </tr></table></div>
37 <div class="refsynopsisdiv" title="Synopsis">
38 <a name="telepathy-glib-cli-anonymity.synopsis"></a><h2>Synopsis</h2>
39 <pre class="synopsis">
40 #include &lt;telepathy-glib/telepathy-glib.h&gt;
41
42 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed" title="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()">tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed</a>
43 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
44 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed" title="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()"><span class="type">tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed</span></a> callback</code></em>,
45 <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>,
46 <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>,
47 <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>,
48 <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>);
49 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed" title="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()">*tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed</a>)
50 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
51 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_Modes</code></em>,
52 <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>,
53 <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>);
54 </pre>
55 </div>
56 <div class="refsect1" title="Description">
57 <a name="telepathy-glib-cli-anonymity.description"></a><h2>Description</h2>
58 <p>
59 In some protocols, mainly those that interact with the PSTN, it's possible
60 to make a call without disclosing the originating identity (e.g. phone
61 number). The Anonymity interfaces on the Connection and Channel can be used
62 to control this feature in Telepathy.
63 </p>
64 <p>
65 This section documents the auto-generated C wrappers for the
66 Anonymity interfaces, used with <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> and <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> objects.
67 </p>
68 </div>
69 <div class="refsect1" title="Details">
70 <a name="telepathy-glib-cli-anonymity.details"></a><h2>Details</h2>
71 <div class="refsect2" title="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()">
72 <a name="tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed"></a><h3>tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()</h3>
73 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed
74 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
75 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed" title="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()"><span class="type">tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed</span></a> callback</code></em>,
76 <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>,
77 <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>,
78 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
79 <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>
80 <p>
81 Connect a handler to the signal AnonymityModesChanged.
82 </p>
83 <p>
84 Emitted when the anonymity mode has changed.
85 </p>
86 <div class="variablelist"><table border="0">
87 <col align="left" valign="top">
88 <tbody>
89 <tr>
90 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
91 <td>A <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> or subclass
92 </td>
93 </tr>
94 <tr>
95 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
96 <td>Callback to be called when the signal is
97 received
98 </td>
99 </tr>
100 <tr>
101 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
102 <td>User-supplied data for the callback
103 </td>
104 </tr>
105 <tr>
106 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
107 <td>Destructor for the user-supplied data, which
108 will be called when this signal is disconnected, or
109 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
110 </td>
111 </tr>
112 <tr>
113 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
114 <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;
115 if it is destroyed, this callback will automatically be
116 disconnected
117 </td>
118 </tr>
119 <tr>
120 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
121 <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
122 returned
123 </td>
124 </tr>
125 <tr>
126 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
127 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
128 above, which can be used to disconnect the signal; or
129 <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
130 or has become invalid.
131 </td>
132 </tr>
133 </tbody>
134 </table></div>
135 </div>
136 <hr>
137 <div class="refsect2" title="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()">
138 <a name="tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed"></a><h3>tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()</h3>
139 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed)
140 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
141 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_Modes</code></em>,
142 <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>,
143 <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>
144 <p>
145 Represents the signature of a callback for the signal AnonymityModesChanged.
146 </p>
147 <div class="variablelist"><table border="0">
148 <col align="left" valign="top">
149 <tbody>
150 <tr>
151 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
152 <td>The proxy on which <a class="link" href="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed" title="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()"><code class="function">tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed()</code></a>
153 was called
154 </td>
155 </tr>
156 <tr>
157 <td><p><span class="term"><em class="parameter"><code>arg_Modes</code></em> :</span></p></td>
158 <td>The new anonymity modes for this connection.
159 </td>
160 </tr>
161 <tr>
162 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
163 <td>User-supplied data
164 </td>
165 </tr>
166 <tr>
167 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
168 <td>User-supplied weakly referenced object
169 </td>
170 </tr>
171 </tbody>
172 </table></div>
173 </div>
174 </div>
175 <div class="refsect1" title="See Also">
176 <a name="telepathy-glib-cli-anonymity.see-also"></a><h2>See Also</h2>
177 <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>, <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>
178 </div>
179 </div>
180 <div class="footer">
181 <hr>
182 Generated by GTK-Doc V1.15</div>
183 </body>
184 </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>Connection and Channel ServicePoint interfaces</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-cli-anonymity.html" title="Connection and Channel Anonymity interfaces">
9 <link rel="next" href="telepathy-glib-media-interfaces.html" title="TpMediaSessionHandler, TpMediaStreamHandler">
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-cli-anonymity.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-media-interfaces.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-cli-service-point.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-cli-service-point.description" class="shortcut">Description</a>
26 </td></tr>
27 </table>
28 <div class="refentry" title="Connection and Channel ServicePoint interfaces">
29 <a name="telepathy-glib-cli-service-point"></a><div class="titlepage"></div>
30 <div class="refnamediv"><table width="100%"><tr>
31 <td valign="top">
32 <h2><span class="refentrytitle"><a name="telepathy-glib-cli-service-point.top_of_page"></a>Connection and Channel ServicePoint interfaces</span></h2>
33 <p>Connection and Channel ServicePoint interfaces — client-side wrappers for the ServicePoint interfaces</p>
34 </td>
35 <td valign="top" align="right"></td>
36 </tr></table></div>
37 <div class="refsynopsisdiv" title="Synopsis">
38 <a name="telepathy-glib-cli-service-point.synopsis"></a><h2>Synopsis</h2>
39 <pre class="synopsis">
40 #include &lt;telepathy-glib/telepathy-glib.h&gt;
41
42 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed" title="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()">tp_cli_channel_interface_service_point_connect_to_service_point_changed</a>
43 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
44 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed" title="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()"><span class="type">tp_cli_channel_interface_service_point_signal_callback_service_point_changed</span></a> callback</code></em>,
45 <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>,
46 <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>,
47 <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>,
48 <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>);
49 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed" title="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()">*tp_cli_channel_interface_service_point_signal_callback_service_point_changed</a>)
50 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
51 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *arg_Service_Point</code></em>,
52 <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>,
53 <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>);
54 <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * <a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-connect-to-service-points-changed" title="tp_cli_connection_interface_service_point_connect_to_service_points_changed ()">tp_cli_connection_interface_service_point_connect_to_service_points_changed</a>
55 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
56 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed" title="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()"><span class="type">tp_cli_connection_interface_service_point_signal_callback_service_points_changed</span></a> callback</code></em>,
57 <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>,
58 <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>,
59 <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>,
60 <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>);
61 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed" title="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()">*tp_cli_connection_interface_service_point_signal_callback_service_points_changed</a>)
62 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
63 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *arg_Service_Points</code></em>,
64 <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>,
65 <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>);
66 </pre>
67 </div>
68 <div class="refsect1" title="Description">
69 <a name="telepathy-glib-cli-service-point.description"></a><h2>Description</h2>
70 <p>
71 In some protocols, mainly those that interact with the PSTN, it's possible
72 to contact the emergency services or other public service answering points.
73 The ServicePoint interfaces on the Connection and Channel can be used
74 to discover how to contact these service points, and detect whether a call
75 in progress is communicating with a service point.
76 </p>
77 <p>
78 This section documents the auto-generated C wrappers for the
79 ServicePoint interfaces, used with <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> and <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> objects.
80 </p>
81 </div>
82 <div class="refsect1" title="Details">
83 <a name="telepathy-glib-cli-service-point.details"></a><h2>Details</h2>
84 <div class="refsect2" title="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()">
85 <a name="tp-cli-channel-interface-service-point-connect-to-service-point-changed"></a><h3>tp_cli_channel_interface_service_point_connect_to_service_point_changed ()</h3>
86 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_channel_interface_service_point_connect_to_service_point_changed
87 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
88 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed" title="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()"><span class="type">tp_cli_channel_interface_service_point_signal_callback_service_point_changed</span></a> callback</code></em>,
89 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>,
90 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> destroy</code></em>,
91 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>,
92 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
93 <p>
94 Connect a handler to the signal ServicePointChanged.
95 </p>
96 <p>
97 &lt;p&gt;Emitted when a channel changes the service point that it's connected to. This might be a new call being connected to a service, a call connected to a service being routed to a different service (ie, an emergency call being routed from a generic emergency PSAP to a poison control PSAP), or any number of other things.&lt;/p&gt; &lt;p&gt;Note that this should be emitted as soon as the CM has been notified of the switch, and has updated its internal state. The CM MAY still be in the process of connecting to the new service point.&lt;/p&gt;
98 </p>
99 <div class="variablelist"><table border="0">
100 <col align="left" valign="top">
101 <tbody>
102 <tr>
103 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
104 <td>A <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> or subclass
105 </td>
106 </tr>
107 <tr>
108 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
109 <td>Callback to be called when the signal is
110 received
111 </td>
112 </tr>
113 <tr>
114 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
115 <td>User-supplied data for the callback
116 </td>
117 </tr>
118 <tr>
119 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
120 <td>Destructor for the user-supplied data, which
121 will be called when this signal is disconnected, or
122 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
123 </td>
124 </tr>
125 <tr>
126 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
127 <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;
128 if it is destroyed, this callback will automatically be
129 disconnected
130 </td>
131 </tr>
132 <tr>
133 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
134 <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
135 returned
136 </td>
137 </tr>
138 <tr>
139 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
140 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
141 above, which can be used to disconnect the signal; or
142 <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
143 or has become invalid.
144 </td>
145 </tr>
146 </tbody>
147 </table></div>
148 </div>
149 <hr>
150 <div class="refsect2" title="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()">
151 <a name="tp-cli-channel-interface-service-point-signal-callback-service-point-changed"></a><h3>tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()</h3>
152 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_channel_interface_service_point_signal_callback_service_point_changed)
153 (<em class="parameter"><code><a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a> *proxy</code></em>,
154 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *arg_Service_Point</code></em>,
155 <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>,
156 <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>
157 <p>
158 Represents the signature of a callback for the signal ServicePointChanged.
159 </p>
160 <div class="variablelist"><table border="0">
161 <col align="left" valign="top">
162 <tbody>
163 <tr>
164 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
165 <td>The proxy on which <a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed" title="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()"><code class="function">tp_cli_channel_interface_service_point_connect_to_service_point_changed()</code></a>
166 was called
167 </td>
168 </tr>
169 <tr>
170 <td><p><span class="term"><em class="parameter"><code>arg_Service_Point</code></em> :</span></p></td>
171 <td>The new service point that is being used.
172 </td>
173 </tr>
174 <tr>
175 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
176 <td>User-supplied data
177 </td>
178 </tr>
179 <tr>
180 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
181 <td>User-supplied weakly referenced object
182 </td>
183 </tr>
184 </tbody>
185 </table></div>
186 </div>
187 <hr>
188 <div class="refsect2" title="tp_cli_connection_interface_service_point_connect_to_service_points_changed ()">
189 <a name="tp-cli-connection-interface-service-point-connect-to-service-points-changed"></a><h3>tp_cli_connection_interface_service_point_connect_to_service_points_changed ()</h3>
190 <pre class="programlisting"><a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="returnvalue">TpProxySignalConnection</span></a> * tp_cli_connection_interface_service_point_connect_to_service_points_changed
191 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
192 <em class="parameter"><code><a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed" title="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()"><span class="type">tp_cli_connection_interface_service_point_signal_callback_service_points_changed</span></a> callback</code></em>,
193 <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>,
194 <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>,
195 <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>,
196 <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>
197 <p>
198 Connect a handler to the signal ServicePointsChanged.
199 </p>
200 <p>
201 Emitted when the list of known service points (or their IDs) has changed.
202 </p>
203 <div class="variablelist"><table border="0">
204 <col align="left" valign="top">
205 <tbody>
206 <tr>
207 <td><p><span class="term"><em class="parameter"><code>proxy</code></em> :</span></p></td>
208 <td>A <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> or subclass
209 </td>
210 </tr>
211 <tr>
212 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
213 <td>Callback to be called when the signal is
214 received
215 </td>
216 </tr>
217 <tr>
218 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
219 <td>User-supplied data for the callback
220 </td>
221 </tr>
222 <tr>
223 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
224 <td>Destructor for the user-supplied data, which
225 will be called when this signal is disconnected, or
226 before this function returns <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
227 </td>
228 </tr>
229 <tr>
230 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
231 <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;
232 if it is destroyed, this callback will automatically be
233 disconnected
234 </td>
235 </tr>
236 <tr>
237 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
238 <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
239 returned
240 </td>
241 </tr>
242 <tr>
243 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
244 <td> a <a class="link" href="telepathy-glib-proxy.html#TpProxySignalConnection" title="TpProxySignalConnection"><span class="type">TpProxySignalConnection</span></a> containing all of the
245 above, which can be used to disconnect the signal; or
246 <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
247 or has become invalid.
248 </td>
249 </tr>
250 </tbody>
251 </table></div>
252 </div>
253 <hr>
254 <div class="refsect2" title="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()">
255 <a name="tp-cli-connection-interface-service-point-signal-callback-service-points-changed"></a><h3>tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()</h3>
256 <pre class="programlisting"><span class="returnvalue">void</span> (*tp_cli_connection_interface_service_point_signal_callback_service_points_changed)
257 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
258 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *arg_Service_Points</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/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> *weak_object</code></em>);</pre>
261 <p>
262 Represents the signature of a callback for the signal ServicePointsChanged.
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>proxy</code></em> :</span></p></td>
269 <td>The proxy on which <a class="link" href="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-connect-to-service-points-changed" title="tp_cli_connection_interface_service_point_connect_to_service_points_changed ()"><code class="function">tp_cli_connection_interface_service_point_connect_to_service_points_changed()</code></a>
270 was called
271 </td>
272 </tr>
273 <tr>
274 <td><p><span class="term"><em class="parameter"><code>arg_Service_Points</code></em> :</span></p></td>
275 <td>&lt;tp:docstring xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;p&gt;The new value of &lt;tp:member-ref&gt;KnownServicePoints&lt;/tp:member-ref&gt;.&lt;/p&gt;
276 </td>
277 </tr>
278 <tr>
279 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
280 <td>User-supplied data
281 </td>
282 </tr>
283 <tr>
284 <td><p><span class="term"><em class="parameter"><code>weak_object</code></em> :</span></p></td>
285 <td>User-supplied weakly referenced object
286 </td>
287 </tr>
288 </tbody>
289 </table></div>
290 </div>
291 </div>
292 <div class="refsect1" title="See Also">
293 <a name="telepathy-glib-cli-service-point.see-also"></a><h2>See Also</h2>
294 <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>, <a class="link" href="telepathy-glib-channel.html#TpChannel"><span class="type">TpChannel</span></a>
295 </div>
296 </div>
297 <div class="footer">
298 <hr>
299 Generated by GTK-Doc V1.15</div>
300 </body>
301 </html>
6565 #define <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONNECTED:CAPS" title="TP_CONNECTION_FEATURE_CONNECTED">TP_CONNECTION_FEATURE_CONNECTED</a>
6666 #define <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CAPABILITIES:CAPS" title="TP_CONNECTION_FEATURE_CAPABILITIES">TP_CONNECTION_FEATURE_CAPABILITIES</a>
6767 #define <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-AVATAR-REQUIREMENTS:CAPS" title="TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS">TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS</a>
68 #define <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS" title="TP_CONNECTION_FEATURE_CONTACT_INFO">TP_CONNECTION_FEATURE_CONTACT_INFO</a>
6869 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-connection.html#tp-connection-run-until-ready" title="tp_connection_run_until_ready ()">tp_connection_run_until_ready</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
6970 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> connect</code></em>,
7071 <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>,
136137 <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="returnvalue">TpCapabilities</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-connection-get-capabilities" title="tp_connection_get_capabilities ()">tp_connection_get_capabilities</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);
137138 <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="returnvalue">TpAvatarRequirements</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-connection-get-avatar-requirements" title="tp_connection_get_avatar_requirements ()">tp_connection_get_avatar_requirements</a>
138139 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);
140 <a class="link" href="telepathy-glib-enums.html#TpContactInfoFlags" title="enum TpContactInfoFlags"><span class="returnvalue">TpContactInfoFlags</span></a> <a class="link" href="telepathy-glib-connection.html#tp-connection-get-contact-info-flags" title="tp_connection_get_contact_info_flags ()">tp_connection_get_contact_info_flags</a>
141 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);
142 <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-connection.html#tp-connection-get-contact-info-supported-fields" title="tp_connection_get_contact_info_supported_fields ()">tp_connection_get_contact_info_supported_fields</a>
143 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);
144 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-connection-set-contact-info-async" title="tp_connection_set_contact_info_async ()">tp_connection_set_contact_info_async</a>
145 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
146 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *info</code></em>,
147 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
148 <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>);
149 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-connection.html#tp-connection-set-contact-info-finish" title="tp_connection_set_contact_info_finish ()">tp_connection_set_contact_info_finish</a>
150 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
151 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
152 <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>);
139153 #define <a class="link" href="telepathy-glib-connection.html#TP-UNKNOWN-CONNECTION-STATUS:CAPS" title="TP_UNKNOWN_CONNECTION_STATUS">TP_UNKNOWN_CONNECTION_STATUS</a>
140154 #define <a class="link" href="telepathy-glib-connection.html#TP-ERRORS-DISCONNECTED:CAPS" title="TP_ERRORS_DISCONNECTED">TP_ERRORS_DISCONNECTED</a>
141155 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-connection.html#tp-connection-get-detailed-error" title="tp_connection_get_detailed_error ()">tp_connection_get_detailed_error</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
152166 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> maximum_width</code></em>,
153167 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> maximum_height</code></em>,
154168 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> maximum_bytes</code></em>);
155 <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="returnvalue">TpAvatarRequirements</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-avatar-requirements-copy" title="tp_avatar_requirements_copy ()">tp_avatar_requirements_copy</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> *self</code></em>);
169 <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="returnvalue">TpAvatarRequirements</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-avatar-requirements-copy" title="tp_avatar_requirements_copy ()">tp_avatar_requirements_copy</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> *self</code></em>);
156170 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-avatar-requirements-destroy" title="tp_avatar_requirements_destroy ()">tp_avatar_requirements_destroy</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> *self</code></em>);
171
172 <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec">TpContactInfoFieldSpec</a>;
173 #define <a class="link" href="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS" title="TP_TYPE_CONTACT_INFO_FIELD_SPEC">TP_TYPE_CONTACT_INFO_FIELD_SPEC</a>
174 <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="returnvalue">TpContactInfoFieldSpec</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-spec-copy" title="tp_contact_info_field_spec_copy ()">tp_contact_info_field_spec_copy</a>
175 (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a> *self</code></em>);
176 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-spec-free" title="tp_contact_info_field_spec_free ()">tp_contact_info_field_spec_free</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a> *self</code></em>);
177 #define <a class="link" href="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS" title="TP_TYPE_CONTACT_INFO_SPEC_LIST">TP_TYPE_CONTACT_INFO_SPEC_LIST</a>
178 <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-connection.html#tp-contact-info-spec-list-copy" title="tp_contact_info_spec_list_copy ()">tp_contact_info_spec_list_copy</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);
179 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-contact-info-spec-list-free" title="tp_contact_info_spec_list_free ()">tp_contact_info_spec_list_free</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);
180 <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField">TpContactInfoField</a>;
181 #define <a class="link" href="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD:CAPS" title="TP_TYPE_CONTACT_INFO_FIELD">TP_TYPE_CONTACT_INFO_FIELD</a>
182 <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="returnvalue">TpContactInfoField</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-new" title="tp_contact_info_field_new ()">tp_contact_info_field_new</a> (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *field_name</code></em>,
183 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> parameters</code></em>,
184 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> field_value</code></em>);
185 <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="returnvalue">TpContactInfoField</span></a> * <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-copy" title="tp_contact_info_field_copy ()">tp_contact_info_field_copy</a> (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a> *self</code></em>);
186 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-free" title="tp_contact_info_field_free ()">tp_contact_info_field_free</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a> *self</code></em>);
187 #define <a class="link" href="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-LIST:CAPS" title="TP_TYPE_CONTACT_INFO_LIST">TP_TYPE_CONTACT_INFO_LIST</a>
188 <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-connection.html#tp-contact-info-list-copy" title="tp_contact_info_list_copy ()">tp_contact_info_list_copy</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);
189 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-connection.html#tp-contact-info-list-free" title="tp_contact_info_list_free ()">tp_contact_info_list_free</a> (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);
157190
158191 <span class="returnvalue">void</span> (<a class="link" href="telepathy-glib-connection.html#tp-cli-connection-callback-for-connect" title="tp_cli_connection_callback_for_connect ()">*tp_cli_connection_callback_for_connect</a>)
159192 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *proxy</code></em>,
819852 <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.
820853 </p>
821854 <p class="since">Since 0.11.4</p>
855 </div>
856 <hr>
857 <div class="refsect2" title="TP_CONNECTION_FEATURE_CONTACT_INFO">
858 <a name="TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS"></a><h3>TP_CONNECTION_FEATURE_CONTACT_INFO</h3>
859 <pre class="programlisting">#define TP_CONNECTION_FEATURE_CONTACT_INFO</pre>
860 <p>
861 Expands to a call to a function that returns a <a href="/usr/share/gtk-doc/html/glib/glib-Quarks.html#GQuark"><span class="type">GQuark</span></a> representing the
862 "contact-info" feature.
863 </p>
864 <p>
865 When this feature is prepared, the ContactInfoFlags and SupportedFields of
866 the Connection has been retrieved. Use <a class="link" href="telepathy-glib-connection.html#tp-connection-get-contact-info-flags" title="tp_connection_get_contact_info_flags ()"><code class="function">tp_connection_get_contact_info_flags()</code></a>
867 and <a class="link" href="telepathy-glib-connection.html#tp-connection-get-contact-info-supported-fields" title="tp_connection_get_contact_info_supported_fields ()"><code class="function">tp_connection_get_contact_info_supported_fields()</code></a> to get them once
868 prepared.
869 </p>
870 <p>
871 One can ask for a feature to be prepared using the
872 <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.
873 </p>
874 <p class="since">Since 0.11.7</p>
822875 </div>
823876 <hr>
824877 <div class="refsect2" title="tp_connection_run_until_ready ()">
16461699 <p class="since">Since 0.11.4</p>
16471700 </div>
16481701 <hr>
1702 <div class="refsect2" title="tp_connection_get_contact_info_flags ()">
1703 <a name="tp-connection-get-contact-info-flags"></a><h3>tp_connection_get_contact_info_flags ()</h3>
1704 <pre class="programlisting"><a class="link" href="telepathy-glib-enums.html#TpContactInfoFlags" title="enum TpContactInfoFlags"><span class="returnvalue">TpContactInfoFlags</span></a> tp_connection_get_contact_info_flags
1705 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);</pre>
1706 <p>
1707 Returns the flags describing how contact info (vCards) behaves on this
1708 connection
1709 </p>
1710 <p>
1711 To wait for valid contact info flags, call <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>
1712 with the feature <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS" title="TP_CONNECTION_FEATURE_CONTACT_INFO"><code class="literal">TP_CONNECTION_FEATURE_CONTACT_INFO</code></a>.
1713 </p>
1714 <p>
1715 This property cannot change after <em class="parameter"><code>self</code></em> goes to the Connected state.
1716 </p>
1717 <div class="variablelist"><table border="0">
1718 <col align="left" valign="top">
1719 <tbody>
1720 <tr>
1721 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1722 <td>a connection
1723 </td>
1724 </tr>
1725 <tr>
1726 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1727 <td> a set of <a class="link" href="telepathy-glib-enums.html#TpContactInfoFlags" title="enum TpContactInfoFlags"><span class="type">TpContactInfoFlags</span></a>
1728 </td>
1729 </tr>
1730 </tbody>
1731 </table></div>
1732 <p class="since">Since 0.11.7</p>
1733 </div>
1734 <hr>
1735 <div class="refsect2" title="tp_connection_get_contact_info_supported_fields ()">
1736 <a name="tp-connection-get-contact-info-supported-fields"></a><h3>tp_connection_get_contact_info_supported_fields ()</h3>
1737 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_connection_get_contact_info_supported_fields
1738 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>);</pre>
1739 <p>
1740 Returns a newly allocated <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of supported contact info fields for this
1741 connection. The list must be freed with <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#g-list-free"><code class="function">g_list_free()</code></a> after used.
1742 </p>
1743 <p>
1744 Note that the <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>s in the returned <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> are not
1745 dupped before returning from this function. One could copy every item in the
1746 list using <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-spec-copy" title="tp_contact_info_field_spec_copy ()"><code class="function">tp_contact_info_field_spec_copy()</code></a>.
1747 </p>
1748 <p>
1749 To wait for valid supported fields, call <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> with the
1750 feature <a class="link" href="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS" title="TP_CONNECTION_FEATURE_CONTACT_INFO"><code class="literal">TP_CONNECTION_FEATURE_CONTACT_INFO</code></a>.
1751 </p>
1752 <p>
1753 This property cannot change after <em class="parameter"><code>self</code></em> goes to the Connected state.
1754 </p>
1755 <div class="variablelist"><table border="0">
1756 <col align="left" valign="top">
1757 <tbody>
1758 <tr>
1759 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1760 <td>a connection
1761 </td>
1762 </tr>
1763 <tr>
1764 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1765 <td>
1766 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-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</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 feature is not
1767 yet prepared or the connection doesn't have the necessary properties. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ContactInfoFieldSpec][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym> TelepathyGLib.ContactInfoFieldSpec]</span>
1768 </td>
1769 </tr>
1770 </tbody>
1771 </table></div>
1772 <p class="since">Since 0.11.7</p>
1773 </div>
1774 <hr>
1775 <div class="refsect2" title="tp_connection_set_contact_info_async ()">
1776 <a name="tp-connection-set-contact-info-async"></a><h3>tp_connection_set_contact_info_async ()</h3>
1777 <pre class="programlisting"><span class="returnvalue">void</span> tp_connection_set_contact_info_async
1778 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
1779 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *info</code></em>,
1780 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
1781 <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>
1782 <p>
1783 Requests an asynchronous set of the contact info of <em class="parameter"><code>self</code></em>. When
1784 the operation is finished, <em class="parameter"><code>callback</code></em> will be called. You can then call
1785 <a class="link" href="telepathy-glib-connection.html#tp-connection-set-contact-info-finish" title="tp_connection_set_contact_info_finish ()"><code class="function">tp_connection_set_contact_info_finish()</code></a> to get the result of the operation.
1786 </p>
1787 <p>
1788 This method should not be expected to succeed if the result of
1789 <a class="link" href="telepathy-glib-connection.html#tp-connection-get-contact-info-flags" title="tp_connection_get_contact_info_flags ()"><code class="function">tp_connection_get_contact_info_flags()</code></a> does not include
1790 <a class="link" href="telepathy-glib-enums.html#TP-CONTACT-INFO-FLAG-CAN-SET:CAPS"><code class="literal">TP_CONTACT_INFO_FLAG_CAN_SET</code></a>.
1791 </p>
1792 <div class="variablelist"><table border="0">
1793 <col align="left" valign="top">
1794 <tbody>
1795 <tr>
1796 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1797 <td>a <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>
1798 </td>
1799 </tr>
1800 <tr>
1801 <td><p><span class="term"><em class="parameter"><code>info</code></em> :</span></p></td>
1802 <td> a <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of
1803 <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ContactInfoField]</span>
1804 </td>
1805 </tr>
1806 <tr>
1807 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
1808 <td>a callback to call when the request is satisfied
1809 </td>
1810 </tr>
1811 <tr>
1812 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1813 <td>data to pass to <em class="parameter"><code>callback</code></em>
1814 </td>
1815 </tr>
1816 </tbody>
1817 </table></div>
1818 <p class="since">Since 0.11.7</p>
1819 </div>
1820 <hr>
1821 <div class="refsect2" title="tp_connection_set_contact_info_finish ()">
1822 <a name="tp-connection-set-contact-info-finish"></a><h3>tp_connection_set_contact_info_finish ()</h3>
1823 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_connection_set_contact_info_finish
1824 (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
1825 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
1826 <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>
1827 <p>
1828 Finishes an async set of <em class="parameter"><code>self</code></em> info.
1829 </p>
1830 <div class="variablelist"><table border="0">
1831 <col align="left" valign="top">
1832 <tbody>
1833 <tr>
1834 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1835 <td>a <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>
1836 </td>
1837 </tr>
1838 <tr>
1839 <td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
1840 <td>a <a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
1841 </td>
1842 </tr>
1843 <tr>
1844 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
1845 <td>a <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> to be filled
1846 </td>
1847 </tr>
1848 <tr>
1849 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1850 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request call was successful, otherwise <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
1851
1852 </td>
1853 </tr>
1854 </tbody>
1855 </table></div>
1856 <p class="since">Since 0.11.7</p>
1857 </div>
1858 <hr>
16491859 <div class="refsect2" title="TP_UNKNOWN_CONNECTION_STATUS">
16501860 <a name="TP-UNKNOWN-CONNECTION-STATUS:CAPS"></a><h3>TP_UNKNOWN_CONNECTION_STATUS</h3>
16511861 <pre class="programlisting">#define TP_UNKNOWN_CONNECTION_STATUS ((TpConnectionStatus) -1)
17261936 <div class="refsect2" title="TpAvatarRequirements">
17271937 <a name="TpAvatarRequirements"></a><h3>TpAvatarRequirements</h3>
17281938 <pre class="programlisting">typedef struct {
1729 gchar **supported_mime_types;
1939 GStrv supported_mime_types;
17301940 guint minimum_width;
17311941 guint minimum_height;
17321942 guint recommended_width;
17431953 <col align="left" valign="top">
17441954 <tbody>
17451955 <tr>
1746 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **<em class="structfield"><code><a name="TpAvatarRequirements.supported-mime-types"></a>supported_mime_types</code></em>;</span></p></td>
1956 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> <em class="structfield"><code><a name="TpAvatarRequirements.supported-mime-types"></a>supported_mime_types</code></em>;</span></p></td>
17471957 <td>An array of supported MIME types (e.g. "image/jpeg")
17481958 Clients MAY assume that the first type in this array is preferred
17491959 </td>
18682078 <hr>
18692079 <div class="refsect2" title="tp_avatar_requirements_copy ()">
18702080 <a name="tp-avatar-requirements-copy"></a><h3>tp_avatar_requirements_copy ()</h3>
1871 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="returnvalue">TpAvatarRequirements</span></a> * tp_avatar_requirements_copy (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> *self</code></em>);</pre>
2081 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="returnvalue">TpAvatarRequirements</span></a> * tp_avatar_requirements_copy (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpAvatarRequirements" title="TpAvatarRequirements"><span class="type">TpAvatarRequirements</span></a> *self</code></em>);</pre>
18722082 <p>
18732083
18742084 </p>
19062116 </tr></tbody>
19072117 </table></div>
19082118 <p class="since">Since 0.11.4</p>
2119 </div>
2120 <hr>
2121 <div class="refsect2" title="TpContactInfoFieldSpec">
2122 <a name="TpContactInfoFieldSpec"></a><h3>TpContactInfoFieldSpec</h3>
2123 <pre class="programlisting">typedef struct {
2124 gchar *name;
2125 GStrv parameters;
2126 TpContactInfoFieldFlags flags;
2127 guint max;
2128 } TpContactInfoFieldSpec;
2129 </pre>
2130 <p>
2131 A struct describing a vCard field.
2132 </p>
2133 <div class="variablelist"><table border="0">
2134 <col align="left" valign="top">
2135 <tbody>
2136 <tr>
2137 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="TpContactInfoFieldSpec.name"></a>name</code></em>;</span></p></td>
2138 <td>The name of the field; this is the lowercased name of a vCard
2139 field. For example, a field representing a contact's address would be named
2140 "adr".
2141 </td>
2142 </tr>
2143 <tr>
2144 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> <em class="structfield"><code><a name="TpContactInfoFieldSpec.parameters"></a>parameters</code></em>;</span></p></td>
2145 <td>The set of vCard type parameters which may be set on this field.
2146 If this list is empty and the <a class="link" href="telepathy-glib-enums.html#TP-CONTACT-INFO-FIELD-FLAG-PARAMETERS-EXACT:CAPS"><span class="type">TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT</span></a>
2147 flag is not set, any vCard type parameters may be used. The type parameter
2148 names, and any values that are case-insensitive in vCard, MUST be in lower
2149 case. For example, a contact's preferred home address would have parameters
2150 'type=home' and 'type=pref'.
2151 </td>
2152 </tr>
2153 <tr>
2154 <td><p><span class="term"><a class="link" href="telepathy-glib-enums.html#TpContactInfoFieldFlags" title="enum TpContactInfoFieldFlags"><span class="type">TpContactInfoFieldFlags</span></a> <em class="structfield"><code><a name="TpContactInfoFieldSpec.flags"></a>flags</code></em>;</span></p></td>
2155 <td>Flags describing the behaviour of this field.
2156 </td>
2157 </tr>
2158 <tr>
2159 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="TpContactInfoFieldSpec.max"></a>max</code></em>;</span></p></td>
2160 <td>Maximum number of instances of this field which may be set.
2161 <a href="/usr/share/gtk-doc/html/glib/glib-Limits-of-Basic-Types.html#G-MAXUINT32:CAPS"><span class="type">G_MAXUINT32</span></a> is used to indicate that there is no limit.
2162 </td>
2163 </tr>
2164 </tbody>
2165 </table></div>
2166 <p class="since">Since 0.11.7</p>
2167 </div>
2168 <hr>
2169 <div class="refsect2" title="TP_TYPE_CONTACT_INFO_FIELD_SPEC">
2170 <a name="TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS"></a><h3>TP_TYPE_CONTACT_INFO_FIELD_SPEC</h3>
2171 <pre class="programlisting">#define TP_TYPE_CONTACT_INFO_FIELD_SPEC (tp_contact_info_field_spec_get_type ())
2172 </pre>
2173 <p>
2174 The boxed type of a <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>.
2175 </p>
2176 <p class="since">Since 0.11.7</p>
2177 </div>
2178 <hr>
2179 <div class="refsect2" title="tp_contact_info_field_spec_copy ()">
2180 <a name="tp-contact-info-field-spec-copy"></a><h3>tp_contact_info_field_spec_copy ()</h3>
2181 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="returnvalue">TpContactInfoFieldSpec</span></a> * tp_contact_info_field_spec_copy
2182 (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a> *self</code></em>);</pre>
2183 <p>
2184
2185 </p>
2186 <div class="variablelist"><table border="0">
2187 <col align="left" valign="top">
2188 <tbody>
2189 <tr>
2190 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
2191 <td>a <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>
2192 </td>
2193 </tr>
2194 <tr>
2195 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2196 <td> a newly allocated <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>, free it with
2197 <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-spec-free" title="tp_contact_info_field_spec_free ()"><code class="function">tp_contact_info_field_spec_free()</code></a>
2198 </td>
2199 </tr>
2200 </tbody>
2201 </table></div>
2202 <p class="since">Since 0.11.7</p>
2203 </div>
2204 <hr>
2205 <div class="refsect2" title="tp_contact_info_field_spec_free ()">
2206 <a name="tp-contact-info-field-spec-free"></a><h3>tp_contact_info_field_spec_free ()</h3>
2207 <pre class="programlisting"><span class="returnvalue">void</span> tp_contact_info_field_spec_free (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a> *self</code></em>);</pre>
2208 <p>
2209 Free all memory used by the <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>.
2210 </p>
2211 <div class="variablelist"><table border="0">
2212 <col align="left" valign="top">
2213 <tbody><tr>
2214 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
2215 <td>a <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>
2216 </td>
2217 </tr></tbody>
2218 </table></div>
2219 <p class="since">Since 0.11.7</p>
2220 </div>
2221 <hr>
2222 <div class="refsect2" title="TP_TYPE_CONTACT_INFO_SPEC_LIST">
2223 <a name="TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS"></a><h3>TP_TYPE_CONTACT_INFO_SPEC_LIST</h3>
2224 <pre class="programlisting">#define TP_TYPE_CONTACT_INFO_SPEC_LIST (tp_contact_info_spec_list_get_type ())
2225 </pre>
2226 <p>
2227 The boxed type of 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-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>.
2228 </p>
2229 <p class="since">Since 0.11.7</p>
2230 </div>
2231 <hr>
2232 <div class="refsect2" title="tp_contact_info_spec_list_copy ()">
2233 <a name="tp-contact-info-spec-list-copy"></a><h3>tp_contact_info_spec_list_copy ()</h3>
2234 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_contact_info_spec_list_copy (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);</pre>
2235 <p>
2236
2237 </p>
2238 <div class="variablelist"><table border="0">
2239 <col align="left" valign="top">
2240 <tbody>
2241 <tr>
2242 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
2243 <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-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>
2244 </td>
2245 </tr>
2246 <tr>
2247 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2248 <td> a new <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of newly allocated <a class="link" href="telepathy-glib-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>,
2249 free it with <a class="link" href="telepathy-glib-connection.html#tp-contact-info-spec-list-free" title="tp_contact_info_spec_list_free ()"><code class="function">tp_contact_info_spec_list_free()</code></a>
2250 </td>
2251 </tr>
2252 </tbody>
2253 </table></div>
2254 <p class="since">Since 0.11.7</p>
2255 </div>
2256 <hr>
2257 <div class="refsect2" title="tp_contact_info_spec_list_free ()">
2258 <a name="tp-contact-info-spec-list-free"></a><h3>tp_contact_info_spec_list_free ()</h3>
2259 <pre class="programlisting"><span class="returnvalue">void</span> tp_contact_info_spec_list_free (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);</pre>
2260 <p>
2261 Free all memory used by the <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> and its elements.
2262 </p>
2263 <div class="variablelist"><table border="0">
2264 <col align="left" valign="top">
2265 <tbody><tr>
2266 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
2267 <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-connection.html#TpContactInfoFieldSpec" title="TpContactInfoFieldSpec"><span class="type">TpContactInfoFieldSpec</span></a>
2268 </td>
2269 </tr></tbody>
2270 </table></div>
2271 <p class="since">Since 0.11.7</p>
2272 </div>
2273 <hr>
2274 <div class="refsect2" title="TpContactInfoField">
2275 <a name="TpContactInfoField"></a><h3>TpContactInfoField</h3>
2276 <pre class="programlisting">typedef struct {
2277 gchar *field_name;
2278 GStrv parameters;
2279 GStrv field_value;
2280 } TpContactInfoField;
2281 </pre>
2282 <p>
2283 A structure representing an information about a contact. Similar to a vCard
2284 field.
2285 </p>
2286 <div class="variablelist"><table border="0">
2287 <col align="left" valign="top">
2288 <tbody>
2289 <tr>
2290 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *<em class="structfield"><code><a name="TpContactInfoField.field-name"></a>field_name</code></em>;</span></p></td>
2291 <td>The name of the field; this is the lowercased name of a vCard
2292 field. For example, a field representing a contact's address would be named
2293 "adr".
2294 </td>
2295 </tr>
2296 <tr>
2297 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> <em class="structfield"><code><a name="TpContactInfoField.parameters"></a>parameters</code></em>;</span></p></td>
2298 <td>A list of vCard type parameters applicable to this field,
2299 with their values. The type parameter names, and any values that are
2300 case-insensitive in vCard, MUST be in lower case. For example, a contact's
2301 preferred home address would have parameters 'type=home' and 'type=pref'.
2302 </td>
2303 </tr>
2304 <tr>
2305 <td><p><span class="term"><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> <em class="structfield"><code><a name="TpContactInfoField.field-value"></a>field_value</code></em>;</span></p></td>
2306 <td>For unstructured vCard fields (such as 'fn', a formatted name
2307 field), a single-element array containing the field's value. For structured
2308 fields (such as 'adr', an address field), an array corresponding to the
2309 semicolon-separated elements of the field (with empty strings for empty
2310 elements).
2311 </td>
2312 </tr>
2313 </tbody>
2314 </table></div>
2315 <p class="since">Since 0.11.7</p>
2316 </div>
2317 <hr>
2318 <div class="refsect2" title="TP_TYPE_CONTACT_INFO_FIELD">
2319 <a name="TP-TYPE-CONTACT-INFO-FIELD:CAPS"></a><h3>TP_TYPE_CONTACT_INFO_FIELD</h3>
2320 <pre class="programlisting">#define TP_TYPE_CONTACT_INFO_FIELD (tp_contact_info_field_get_type ())
2321 </pre>
2322 <p>
2323 The boxed type of a <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>.
2324 </p>
2325 <p class="since">Since 0.11.7</p>
2326 </div>
2327 <hr>
2328 <div class="refsect2" title="tp_contact_info_field_new ()">
2329 <a name="tp-contact-info-field-new"></a><h3>tp_contact_info_field_new ()</h3>
2330 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="returnvalue">TpContactInfoField</span></a> * tp_contact_info_field_new (<em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *field_name</code></em>,
2331 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> parameters</code></em>,
2332 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#GStrv"><span class="type">GStrv</span></a> field_value</code></em>);</pre>
2333 <p>
2334
2335 </p>
2336 <div class="variablelist"><table border="0">
2337 <col align="left" valign="top">
2338 <tbody>
2339 <tr>
2340 <td><p><span class="term"><em class="parameter"><code>field_name</code></em> :</span></p></td>
2341 <td>The name of the field; this is the lowercased name of a vCard
2342 field. For example, a field representing a contact's address would be named
2343 "adr".
2344 </td>
2345 </tr>
2346 <tr>
2347 <td><p><span class="term"><em class="parameter"><code>parameters</code></em> :</span></p></td>
2348 <td>A list of vCard type parameters applicable to this field,
2349 with their values. The type parameter names, and any values that are
2350 case-insensitive in vCard, MUST be in lower case. For example, a contact's
2351 preferred home address would have parameters 'type=home' and 'type=pref'.
2352 </td>
2353 </tr>
2354 <tr>
2355 <td><p><span class="term"><em class="parameter"><code>field_value</code></em> :</span></p></td>
2356 <td>For unstructured vCard fields (such as 'fn', a formatted name
2357 field), a single-element array containing the field's value. For structured
2358 fields (such as 'adr', an address field), an array corresponding to the
2359 semicolon-separated elements of the field (with empty strings for empty
2360 elements).
2361 </td>
2362 </tr>
2363 <tr>
2364 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2365 <td> a newly allocated <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>, free it with
2366 <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-free" title="tp_contact_info_field_free ()"><code class="function">tp_contact_info_field_free()</code></a>
2367 </td>
2368 </tr>
2369 </tbody>
2370 </table></div>
2371 <p class="since">Since 0.11.7</p>
2372 </div>
2373 <hr>
2374 <div class="refsect2" title="tp_contact_info_field_copy ()">
2375 <a name="tp-contact-info-field-copy"></a><h3>tp_contact_info_field_copy ()</h3>
2376 <pre class="programlisting"><a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="returnvalue">TpContactInfoField</span></a> * tp_contact_info_field_copy (<em class="parameter"><code>const <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a> *self</code></em>);</pre>
2377 <p>
2378
2379 </p>
2380 <div class="variablelist"><table border="0">
2381 <col align="left" valign="top">
2382 <tbody>
2383 <tr>
2384 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
2385 <td>a <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>
2386 </td>
2387 </tr>
2388 <tr>
2389 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2390 <td> a newly allocated <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>, free it with
2391 <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-free" title="tp_contact_info_field_free ()"><code class="function">tp_contact_info_field_free()</code></a>
2392 </td>
2393 </tr>
2394 </tbody>
2395 </table></div>
2396 <p class="since">Since 0.11.7</p>
2397 </div>
2398 <hr>
2399 <div class="refsect2" title="tp_contact_info_field_free ()">
2400 <a name="tp-contact-info-field-free"></a><h3>tp_contact_info_field_free ()</h3>
2401 <pre class="programlisting"><span class="returnvalue">void</span> tp_contact_info_field_free (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a> *self</code></em>);</pre>
2402 <p>
2403 Free all memory used by the <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>.
2404 </p>
2405 <div class="variablelist"><table border="0">
2406 <col align="left" valign="top">
2407 <tbody><tr>
2408 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
2409 <td>a <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>
2410 </td>
2411 </tr></tbody>
2412 </table></div>
2413 <p class="since">Since 0.11.7</p>
2414 </div>
2415 <hr>
2416 <div class="refsect2" title="TP_TYPE_CONTACT_INFO_LIST">
2417 <a name="TP-TYPE-CONTACT-INFO-LIST:CAPS"></a><h3>TP_TYPE_CONTACT_INFO_LIST</h3>
2418 <pre class="programlisting">#define TP_TYPE_CONTACT_INFO_LIST (tp_contact_info_list_get_type ())
2419 </pre>
2420 <p>
2421 The boxed type of 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-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>.
2422 </p>
2423 <p class="since">Since 0.11.7</p>
2424 </div>
2425 <hr>
2426 <div class="refsect2" title="tp_contact_info_list_copy ()">
2427 <a name="tp-contact-info-list-copy"></a><h3>tp_contact_info_list_copy ()</h3>
2428 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_contact_info_list_copy (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);</pre>
2429 <p>
2430
2431 </p>
2432 <div class="variablelist"><table border="0">
2433 <col align="left" valign="top">
2434 <tbody>
2435 <tr>
2436 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
2437 <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-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>
2438 </td>
2439 </tr>
2440 <tr>
2441 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
2442 <td> a new <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of newly allocated <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>, free it with
2443 <a class="link" href="telepathy-glib-connection.html#tp-contact-info-list-free" title="tp_contact_info_list_free ()"><code class="function">tp_contact_info_list_free()</code></a>
2444 </td>
2445 </tr>
2446 </tbody>
2447 </table></div>
2448 <p class="since">Since 0.11.7</p>
2449 </div>
2450 <hr>
2451 <div class="refsect2" title="tp_contact_info_list_free ()">
2452 <a name="tp-contact-info-list-free"></a><h3>tp_contact_info_list_free ()</h3>
2453 <pre class="programlisting"><span class="returnvalue">void</span> tp_contact_info_list_free (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *list</code></em>);</pre>
2454 <p>
2455 Free all memory used by the <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> and its elements.
2456 </p>
2457 <div class="variablelist"><table border="0">
2458 <col align="left" valign="top">
2459 <tbody><tr>
2460 <td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
2461 <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-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>
2462 </td>
2463 </tr></tbody>
2464 </table></div>
2465 <p class="since">Since 0.11.7</p>
19092466 </div>
19102467 <hr>
19112468 <div class="refsect2" title="tp_cli_connection_callback_for_connect ()">
2727 <a href="#telepathy-glib-contact.object-hierarchy" class="shortcut">Object Hierarchy</a>
2828  | 
2929 <a href="#telepathy-glib-contact.properties" class="shortcut">Properties</a>
30  | 
31 <a href="#telepathy-glib-contact.signals" class="shortcut">Signals</a>
3032 </td></tr>
3133 </table>
3234 <div class="refentry" title="TpContact">
9698 <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>,
9799 <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>,
98100 <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>);
101 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-contact.html#tp-connection-refresh-contact-info" title="tp_connection_refresh_contact_info ()">tp_connection_refresh_contact_info</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
102 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_contacts</code></em>,
103 <em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> * const *contacts</code></em>);
99104 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>);
100105 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>);
101106 <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>);
108113 <a class="link" href="telepathy-glib-enums.html#TpConnectionPresenceType" title="enum TpConnectionPresenceType"><span class="returnvalue">TpConnectionPresenceType</span></a> <a class="link" href="telepathy-glib-contact.html#tp-contact-get-presence-type" title="tp_contact_get_presence_type ()">tp_contact_get_presence_type</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
109114 <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="returnvalue">GHashTable</span></a> * <a class="link" href="telepathy-glib-contact.html#tp-contact-get-location" title="tp_contact_get_location ()">tp_contact_get_location</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
110115 <a class="link" href="telepathy-glib-capabilities.html#TpCapabilities"><span class="returnvalue">TpCapabilities</span></a> * <a class="link" href="telepathy-glib-contact.html#tp-contact-get-capabilities" title="tp_contact_get_capabilities ()">tp_contact_get_capabilities</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
116 <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-contact.html#tp-contact-get-contact-info" title="tp_contact_get_contact_info ()">tp_contact_get_contact_info</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);
117 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-contact.html#tp-contact-request-contact-info-async" title="tp_contact_request_contact_info_async ()">tp_contact_request_contact_info_async</a>
118 (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
119 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
120 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
121 <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>);
122 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <a class="link" href="telepathy-glib-contact.html#tp-contact-request-contact-info-finish" title="tp_contact_request_contact_info_finish ()">tp_contact_request_contact_info_finish</a>
123 (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
124 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
125 <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>);
111126 <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-contact.html#tp-contact-has-feature" title="tp_contact_has_feature ()">tp_contact_has_feature</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
112127 <em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContactFeature" title="enum TpContactFeature"><span class="type">TpContactFeature</span></a> feature</code></em>);
113128 </pre>
128143 "<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
129144 "<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
130145 "<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
146 "<a class="link" href="telepathy-glib-contact.html#TpContact--contact-info" title='The "contact-info" property'>contact-info</a>" <span class="type">TpContactInfoList</span>* : Read
131147 "<a class="link" href="telepathy-glib-contact.html#TpContact--handle" title='The "handle" property'>handle</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
132148 "<a class="link" href="telepathy-glib-contact.html#TpContact--identifier" title='The "identifier" property'>identifier</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
133149 "<a class="link" href="telepathy-glib-contact.html#TpContact--location" title='The "location" property'>location</a>" <span class="type">GHashTable_gchararray+GValue_*</span> : Read
134150 "<a class="link" href="telepathy-glib-contact.html#TpContact--presence-message" title='The "presence-message" property'>presence-message</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
135151 "<a class="link" href="telepathy-glib-contact.html#TpContact--presence-status" title='The "presence-status" property'>presence-status</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>* : Read
136152 "<a class="link" href="telepathy-glib-contact.html#TpContact--presence-type" title='The "presence-type" property'>presence-type</a>" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read
153 </pre>
154 </div>
155 <div class="refsect1" title="Signals">
156 <a name="telepathy-glib-contact.signals"></a><h2>Signals</h2>
157 <pre class="synopsis">
158 "<a class="link" href="telepathy-glib-contact.html#TpContact-presence-changed" title='The "presence-changed" signal'>presence-changed</a>" : Run Last
137159 </pre>
138160 </div>
139161 <div class="refsect1" title="Description">
184206 TP_CONTACT_FEATURE_LOCATION,
185207 TP_CONTACT_FEATURE_CAPABILITIES,
186208 TP_CONTACT_FEATURE_AVATAR_DATA,
187 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_AVATAR_DATA + 1)
209 TP_CONTACT_FEATURE_CONTACT_INFO,
210 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_CONTACT_INFO + 1)
188211 } TpContactFeature;
189212 </pre>
190213 <p>
238261 <a class="link" href="telepathy-glib-contact.html#TpContact--avatar-file" title='The "avatar-file" property'><span class="type">"avatar-file"</span></a> and
239262 <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>
240263 (available since 0.11.6)
264 </td>
265 </tr>
266 <tr>
267 <td><p><a name="TP-CONTACT-FEATURE-CONTACT-INFO:CAPS"></a><span class="term"><code class="literal">TP_CONTACT_FEATURE_CONTACT_INFO</code></span></p></td>
268 <td>
269 <a class="link" href="telepathy-glib-contact.html#TpContact--contact-info" title='The "contact-info" property'><span class="type">"contact-info"</span></a>
270 (available since 0.11.7)
241271 </td>
242272 </tr>
243273 </tbody>
747777 <p class="since">Since 0.7.18</p>
748778 </div>
749779 <hr>
780 <div class="refsect2" title="tp_connection_refresh_contact_info ()">
781 <a name="tp-connection-refresh-contact-info"></a><h3>tp_connection_refresh_contact_info ()</h3>
782 <pre class="programlisting"><span class="returnvalue">void</span> tp_connection_refresh_contact_info (<em class="parameter"><code><a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a> *self</code></em>,
783 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_contacts</code></em>,
784 <em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> * const *contacts</code></em>);</pre>
785 <p>
786 Requests to refresh the <a class="link" href="telepathy-glib-contact.html#TpContact--contact-info" title='The "contact-info" property'><span class="type">"contact-info"</span></a> property on each contact from
787 <em class="parameter"><code>contacts</code></em>, requesting it from the network if an up-to-date version is not
788 cached locally. "notify::contact-info" will be emitted when the contact's
789 information are updated.
790 </p>
791 <p>
792 If <a class="link" href="telepathy-glib-contact.html#TP-CONTACT-FEATURE-CONTACT-INFO:CAPS"><code class="literal">TP_CONTACT_FEATURE_CONTACT_INFO</code></a> is not yet set on a contact, it will be
793 set before its property gets updated.
794 </p>
795 <div class="variablelist"><table border="0">
796 <col align="left" valign="top">
797 <tbody>
798 <tr>
799 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
800 <td>a <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></a>
801 </td>
802 </tr>
803 <tr>
804 <td><p><span class="term"><em class="parameter"><code>n_contacts</code></em> :</span></p></td>
805 <td>The number of contacts in <em class="parameter"><code>contacts</code></em> (must be at least 1)
806 </td>
807 </tr>
808 <tr>
809 <td><p><span class="term"><em class="parameter"><code>contacts</code></em> :</span></p></td>
810 <td> An array of <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> objects
811 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>
812 </td>
813 </tr>
814 </tbody>
815 </table></div>
816 <p class="since">Since 0.11.7</p>
817 </div>
818 <hr>
750819 <div class="refsect2" title="tp_contact_get_alias ()">
751820 <a name="tp-contact-get-alias"></a><h3>tp_contact_get_alias ()</h3>
752821 <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_alias (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);</pre>
10881157 <p class="since">Since 0.11.3</p>
10891158 </div>
10901159 <hr>
1160 <div class="refsect2" title="tp_contact_get_contact_info ()">
1161 <a name="tp-contact-get-contact-info"></a><h3>tp_contact_get_contact_info ()</h3>
1162 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> * tp_contact_get_contact_info (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>);</pre>
1163 <p>
1164 Returns a newly allocated <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of contact's vCard fields. The list must be
1165 freed with <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#g-list-free"><code class="function">g_list_free()</code></a> after used.
1166 </p>
1167 <p>
1168 Note that the <a class="link" href="telepathy-glib-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>s in the returned <a href="/usr/share/gtk-doc/html/glib/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> are not
1169 dupped before returning from this function. One could copy every item in the
1170 list using <a class="link" href="telepathy-glib-connection.html#tp-contact-info-field-copy" title="tp_contact_info_field_copy ()"><code class="function">tp_contact_info_field_copy()</code></a>.
1171 </p>
1172 <p>
1173 Same as the <a class="link" href="telepathy-glib-contact.html#TpContact--contact-info" title='The "contact-info" property'><span class="type">"contact-info"</span></a> property.
1174 </p>
1175 <div class="variablelist"><table border="0">
1176 <col align="left" valign="top">
1177 <tbody>
1178 <tr>
1179 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1180 <td>a <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a>
1181 </td>
1182 </tr>
1183 <tr>
1184 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1185 <td>
1186 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-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a>, or <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the feature is not yet
1187 prepared. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> TelepathyGLib.ContactInfoField][<acronym title="Free data container after the code is done."><span class="acronym">transfer container</span></acronym> TelepathyGLib.ContactInfoField]</span>
1188 </td>
1189 </tr>
1190 </tbody>
1191 </table></div>
1192 <p class="since">Since 0.11.7</p>
1193 </div>
1194 <hr>
1195 <div class="refsect2" title="tp_contact_request_contact_info_async ()">
1196 <a name="tp-contact-request-contact-info-async"></a><h3>tp_contact_request_contact_info_async ()</h3>
1197 <pre class="programlisting"><span class="returnvalue">void</span> tp_contact_request_contact_info_async
1198 (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
1199 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GCancellable.html"><span class="type">GCancellable</span></a> *cancellable</code></em>,
1200 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html#GAsyncReadyCallback"><span class="type">GAsyncReadyCallback</span></a> callback</code></em>,
1201 <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>
1202 <p>
1203 Requests an asynchronous request of the contact info of <em class="parameter"><code>self</code></em>. When
1204 the operation is finished, <em class="parameter"><code>callback</code></em> will be called. You can then call
1205 <a class="link" href="telepathy-glib-contact.html#tp-contact-request-contact-info-finish" title="tp_contact_request_contact_info_finish ()"><code class="function">tp_contact_request_contact_info_finish()</code></a> to get the result of the operation.
1206 </p>
1207 <p>
1208 If the operation is successful, the <a class="link" href="telepathy-glib-contact.html#TpContact--contact-info" title='The "contact-info" property'><span class="type">"contact-info"</span></a> property will be
1209 updated (emitting "notify::contact-info" signal) before <em class="parameter"><code>callback</code></em> is called.
1210 That means you can call <a class="link" href="telepathy-glib-contact.html#tp-contact-get-contact-info" title="tp_contact_get_contact_info ()"><code class="function">tp_contact_get_contact_info()</code></a> to get the new vCard
1211 inside <em class="parameter"><code>callback</code></em>.
1212 </p>
1213 <p>
1214 Note that requesting the vCard from the network can take significant time, so
1215 a bigger timeout is set on the underlying D-Bus call. <em class="parameter"><code>cancellable</code></em> can be
1216 cancelled to free resources used in the D-Bus call if the caller is no longer
1217 interested in the vCard.
1218 </p>
1219 <p>
1220 If <a class="link" href="telepathy-glib-contact.html#TP-CONTACT-FEATURE-CONTACT-INFO:CAPS"><code class="literal">TP_CONTACT_FEATURE_CONTACT_INFO</code></a> is not yet set on <em class="parameter"><code>self</code></em>, it will be
1221 set before its property gets updated and <em class="parameter"><code>callback</code></em> is called.
1222 </p>
1223 <div class="variablelist"><table border="0">
1224 <col align="left" valign="top">
1225 <tbody>
1226 <tr>
1227 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1228 <td>a <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a>
1229 </td>
1230 </tr>
1231 <tr>
1232 <td><p><span class="term"><em class="parameter"><code>cancellable</code></em> :</span></p></td>
1233 <td>optional <a href="/usr/share/gtk-doc/html/gio/GCancellable.html"><span class="type">GCancellable</span></a> object, <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to ignore.
1234 </td>
1235 </tr>
1236 <tr>
1237 <td><p><span class="term"><em class="parameter"><code>callback</code></em> :</span></p></td>
1238 <td>a callback to call when the request is satisfied
1239 </td>
1240 </tr>
1241 <tr>
1242 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1243 <td>data to pass to <em class="parameter"><code>callback</code></em>
1244 </td>
1245 </tr>
1246 </tbody>
1247 </table></div>
1248 <p class="since">Since 0.11.7</p>
1249 </div>
1250 <hr>
1251 <div class="refsect2" title="tp_contact_request_contact_info_finish ()">
1252 <a name="tp-contact-request-contact-info-finish"></a><h3>tp_contact_request_contact_info_finish ()</h3>
1253 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_contact_request_contact_info_finish
1254 (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
1255 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a> *result</code></em>,
1256 <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>
1257 <p>
1258 Finishes an async request of <em class="parameter"><code>self</code></em> info. If the operation was successful,
1259 the contact's vCard can be accessed using <a class="link" href="telepathy-glib-contact.html#tp-contact-get-contact-info" title="tp_contact_get_contact_info ()"><code class="function">tp_contact_get_contact_info()</code></a>.
1260 </p>
1261 <div class="variablelist"><table border="0">
1262 <col align="left" valign="top">
1263 <tbody>
1264 <tr>
1265 <td><p><span class="term"><em class="parameter"><code>self</code></em> :</span></p></td>
1266 <td>a <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a>
1267 </td>
1268 </tr>
1269 <tr>
1270 <td><p><span class="term"><em class="parameter"><code>result</code></em> :</span></p></td>
1271 <td>a <a href="/usr/share/gtk-doc/html/gio/GAsyncResult.html"><span class="type">GAsyncResult</span></a>
1272 </td>
1273 </tr>
1274 <tr>
1275 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
1276 <td>a <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> to be filled
1277 </td>
1278 </tr>
1279 <tr>
1280 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
1281 <td> <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the request call was successful, otherwise <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
1282
1283 </td>
1284 </tr>
1285 </tbody>
1286 </table></div>
1287 <p class="since">Since 0.11.7</p>
1288 </div>
1289 <hr>
10911290 <div class="refsect2" title="tp_contact_has_feature ()">
10921291 <a name="tp-contact-has-feature"></a><h3>tp_contact_has_feature ()</h3>
10931292 <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> tp_contact_has_feature (<em class="parameter"><code><a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *self</code></em>,
12171416 </p>
12181417 </div>
12191418 <hr>
1419 <div class="refsect2" title='The "contact-info" property'>
1420 <a name="TpContact--contact-info"></a><h3>The <code class="literal">"contact-info"</code> property</h3>
1421 <pre class="programlisting"> "contact-info" <span class="type">TpContactInfoList</span>* : Read</pre>
1422 <p>
1423 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-connection.html#TpContactInfoField" title="TpContactInfoField"><span class="type">TpContactInfoField</span></a> representing the vCard of this contact.
1424 </p>
1425 <p>
1426 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-CONTACT-INFO:CAPS"><code class="literal">TP_CONTACT_FEATURE_CONTACT_INFO</code></a> is not set on this
1427 contact.
1428 </p>
1429 <p class="since">Since 0.11.7</p>
1430 </div>
1431 <hr>
12201432 <div class="refsect2" title='The "handle" property'>
12211433 <a name="TpContact--handle"></a><h3>The <code class="literal">"handle"</code> property</h3>
12221434 <pre class="programlisting"> "handle" <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> : Read</pre>
13231535 <p>Default value: 0</p>
13241536 </div>
13251537 </div>
1538 <div class="refsect1" title="Signal Details">
1539 <a name="telepathy-glib-contact.signal-details"></a><h2>Signal Details</h2>
1540 <div class="refsect2" title='The "presence-changed" signal'>
1541 <a name="TpContact-presence-changed"></a><h3>The <code class="literal">"presence-changed"</code> signal</h3>
1542 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a> *contact,
1543 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> type,
1544 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *status,
1545 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *message,
1546 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data) : Run Last</pre>
1547 <p>
1548 Emitted when this contact's presence changes.
1549 </p>
1550 <div class="variablelist"><table border="0">
1551 <col align="left" valign="top">
1552 <tbody>
1553 <tr>
1554 <td><p><span class="term"><em class="parameter"><code>contact</code></em> :</span></p></td>
1555 <td>A <a class="link" href="telepathy-glib-contact.html#TpContact"><span class="type">TpContact</span></a>
1556 </td>
1557 </tr>
1558 <tr>
1559 <td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
1560 <td>The new value of <a class="link" href="telepathy-glib-contact.html#TpContact--presence-type" title='The "presence-type" property'><span class="type">"presence-type"</span></a>
1561 </td>
1562 </tr>
1563 <tr>
1564 <td><p><span class="term"><em class="parameter"><code>status</code></em> :</span></p></td>
1565 <td>The new value of <a class="link" href="telepathy-glib-contact.html#TpContact--presence-status" title='The "presence-status" property'><span class="type">"presence-status"</span></a>
1566 </td>
1567 </tr>
1568 <tr>
1569 <td><p><span class="term"><em class="parameter"><code>message</code></em> :</span></p></td>
1570 <td>The new value of <a class="link" href="telepathy-glib-contact.html#TpContact--presence-message" title='The "presence-message" property'><span class="type">"presence-message"</span></a>
1571 </td>
1572 </tr>
1573 <tr>
1574 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
1575 <td>user data set when the signal handler was connected.</td>
1576 </tr>
1577 </tbody>
1578 </table></div>
1579 <p class="since">Since 0.11.7</p>
1580 </div>
1581 </div>
13261582 <div class="refsect1" title="See Also">
13271583 <a name="telepathy-glib-contact.see-also"></a><h2>See Also</h2>
13281584 <a class="link" href="telepathy-glib-connection.html#TpConnection"><span class="type">TpConnection</span></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>;
113113 enum <a class="link" href="telepathy-glib-enums.html#TpLocationFeatures" title="enum TpLocationFeatures">TpLocationFeatures</a>;
114 enum <a class="link" href="telepathy-glib-enums.html#TpServicePointType" title="enum TpServicePointType">TpServicePointType</a>;
115 #define <a class="link" href="telepathy-glib-enums.html#NUM-TP-SERVICE-POINT-TYPES:CAPS" title="NUM_TP_SERVICE_POINT_TYPES">NUM_TP_SERVICE_POINT_TYPES</a>
116 enum <a class="link" href="telepathy-glib-enums.html#TpAnonymityModeFlags" title="enum TpAnonymityModeFlags">TpAnonymityModeFlags</a>;
114117 </pre>
115118 </div>
116119 <div class="refsect1" title="Description">
22982301 </tr></tbody>
22992302 </table></div>
23002303 </div>
2304 <hr>
2305 <div class="refsect2" title="enum TpServicePointType">
2306 <a name="TpServicePointType"></a><h3>enum TpServicePointType</h3>
2307 <pre class="programlisting">typedef enum {
2308 TP_SERVICE_POINT_TYPE_NONE = 0,
2309 TP_SERVICE_POINT_TYPE_EMERGENCY = 1,
2310 TP_SERVICE_POINT_TYPE_COUNSELING = 2,
2311 } TpServicePointType;
2312 </pre>
2313 <p>
2314 The various types of service points a channel might connect to.
2315 </p>
2316 <p>
2317 Bitfield/set of flags generated from the Telepathy specification.
2318 </p>
2319 <div class="variablelist"><table border="0">
2320 <col align="left" valign="top">
2321 <tbody>
2322 <tr>
2323 <td><p><a name="TP-SERVICE-POINT-TYPE-NONE:CAPS"></a><span class="term"><code class="literal">TP_SERVICE_POINT_TYPE_NONE</code></span></p></td>
2324 <td> The channel is not communicating with a service point, or it is not known whether it is communicating with a service point (e.g. an ordinary call).
2325 </td>
2326 </tr>
2327 <tr>
2328 <td><p><a name="TP-SERVICE-POINT-TYPE-EMERGENCY:CAPS"></a><span class="term"><code class="literal">TP_SERVICE_POINT_TYPE_EMERGENCY</code></span></p></td>
2329 <td> The service point is a generic emergency point.
2330 </td>
2331 </tr>
2332 <tr>
2333 <td><p><a name="TP-SERVICE-POINT-TYPE-COUNSELING:CAPS"></a><span class="term"><code class="literal">TP_SERVICE_POINT_TYPE_COUNSELING</code></span></p></td>
2334 <td> The service point is some kind of counseling service (ie, mental health or child-services counseling).
2335 </td>
2336 </tr>
2337 </tbody>
2338 </table></div>
2339 </div>
2340 <hr>
2341 <div class="refsect2" title="NUM_TP_SERVICE_POINT_TYPES">
2342 <a name="NUM-TP-SERVICE-POINT-TYPES:CAPS"></a><h3>NUM_TP_SERVICE_POINT_TYPES</h3>
2343 <pre class="programlisting">#define NUM_TP_SERVICE_POINT_TYPES (2+1)
2344 </pre>
2345 <p>
2346 1 higher than the highest valid value of <a class="link" href="telepathy-glib-enums.html#TpServicePointType" title="enum TpServicePointType"><span class="type">TpServicePointType</span></a>.
2347 </p>
2348 </div>
2349 <hr>
2350 <div class="refsect2" title="enum TpAnonymityModeFlags">
2351 <a name="TpAnonymityModeFlags"></a><h3>enum TpAnonymityModeFlags</h3>
2352 <pre class="programlisting">typedef enum {
2353 TP_ANONYMITY_MODE_CLIENT_INFO = 1,
2354 TP_ANONYMITY_MODE_SHOW_CLIENT_INFO = 2,
2355 TP_ANONYMITY_MODE_NETWORK_INFO = 4,
2356 } TpAnonymityModeFlags;
2357 </pre>
2358 <p>
2359 Flags for the various types of anonymity modes. These modes are solely to inform the CM of the desired anonymous settings. It is up to the CM to determine whether the anonymity modes should be handled within the CM itself, or whether the network that a CM might be talking to should be enforcing anonymity. CMs MAY support only a subset of these modes, and specific connections MAY support none at all.
2360 </p>
2361 <p>
2362 Bitfield/set of flags generated from the Telepathy specification.
2363 </p>
2364 <div class="variablelist"><table border="0">
2365 <col align="left" valign="top">
2366 <tbody>
2367 <tr>
2368 <td><p><a name="TP-ANONYMITY-MODE-CLIENT-INFO:CAPS"></a><span class="term"><code class="literal">TP_ANONYMITY_MODE_CLIENT_INFO</code></span></p></td>
2369 <td> Obscure any information that provides user identification, user-agent identification or personal details. Examples of this information might be GSM CallerID, SIP from address, various informational email headers, etc. The CM should scrub/replace any of this information before passing messages or data onto the network. Note that a CM which has the option of obscuring the information at the CM or privacy service level would choose both (anonymity services are opaque to clients of this interface). Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info.
2370 </td>
2371 </tr>
2372 <tr>
2373 <td><p><a name="TP-ANONYMITY-MODE-SHOW-CLIENT-INFO:CAPS"></a><span class="term"><code class="literal">TP_ANONYMITY_MODE_SHOW_CLIENT_INFO</code></span></p></td>
2374 <td> Explicitly request showing of client information. In connection context, this can be used to override service default. In channel context, this overrides connection anonymity modes. In GSM, it's possible to have CLIR enabled by default, and explicitly suppress CLIR for a single phone call. Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info. The CM MAY set both Client_Info and Show_Client_Info in SupportedAnonymityModes to indicate its support for explicitly hiding and publicising client information.
2375 </td>
2376 </tr>
2377 <tr>
2378 <td><p><a name="TP-ANONYMITY-MODE-NETWORK-INFO:CAPS"></a><span class="term"><code class="literal">TP_ANONYMITY_MODE_NETWORK_INFO</code></span></p></td>
2379 <td> Obscure any originating IP address information, contact URIs, and anonymize all traffic involved with sending/receiving any media streams or call content. Examples of this include the "headers" portions of RFC 3323 as well as the History-Info (described in RFC 4244) for a SIP CM. This SHOULD have the effect of hiding address information from the remote contact (ie, the contact cannot know what IP address the session is originated from). Obviously the network still needs to be able to route information between contacts, so this provides no guarantees of what can be seen by intermediaries.
2380 </td>
2381 </tr>
2382 </tbody>
2383 </table></div>
2384 </div>
23012385 </div>
23022386 </div>
23032387 <div class="footer">
8888 #define <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-REGISTRATION-EXISTS:CAPS" title="TP_ERROR_STR_REGISTRATION_EXISTS">TP_ERROR_STR_REGISTRATION_EXISTS</a>
8989 #define <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-SERVICE-BUSY:CAPS" title="TP_ERROR_STR_SERVICE_BUSY">TP_ERROR_STR_SERVICE_BUSY</a>
9090 #define <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-RESOURCE-UNAVAILABLE:CAPS" title="TP_ERROR_STR_RESOURCE_UNAVAILABLE">TP_ERROR_STR_RESOURCE_UNAVAILABLE</a>
91 #define <a class="link" href="telepathy-glib-errors.html#TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS" title="TP_ERROR_STR_WOULD_BREAK_ANONYMITY">TP_ERROR_STR_WOULD_BREAK_ANONYMITY</a>
9192 </pre>
9293 </div>
9394 <div class="refsect1" title="Description">
181182 TP_ERROR_REGISTRATION_EXISTS, /*&lt; nick=RegistrationExists &gt;*/
182183 TP_ERROR_SERVICE_BUSY, /*&lt; nick=ServiceBusy &gt;*/
183184 TP_ERROR_RESOURCE_UNAVAILABLE, /*&lt; nick=ResourceUnavailable &gt;*/
185 TP_ERROR_WOULD_BREAK_ANONYMITY, /*&lt; nick=WouldBreakAnonymity &gt;*/
184186 } TpError;
185187 </pre>
186188 <p>
452454 Since 0.7.34
453455 </td>
454456 </tr>
457 <tr>
458 <td><p><a name="TP-ERROR-WOULD-BREAK-ANONYMITY:CAPS"></a><span class="term"><code class="literal">TP_ERROR_WOULD_BREAK_ANONYMITY</code></span></p></td>
459 <td>org.freedesktop.Telepathy.Error.WouldBreakAnonymity:
460 Raised when a request cannot be satisfied without violating an
461 earlier request for anonymity, and the earlier request specified
462 that raising an error is preferable to disclosing the user's
463 identity
464 Since 0.11.7
465 </td>
466 </tr>
455467 </tbody>
456468 </table></div>
457469 </div>
9951007 Raised if a request cannot be satisfied because a process local to the user has insufficient resources. Clients MAY try again later. &lt;tp:rationale&gt; For instance, the &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;ChannelDispatcher&lt;/tp:dbus-ref&gt; might raise this error for some or all channel requests if it has detected that there is not enough free memory. &lt;/tp:rationale&gt;
9961008 </p>
9971009 </div>
1010 <hr>
1011 <div class="refsect2" title="TP_ERROR_STR_WOULD_BREAK_ANONYMITY">
1012 <a name="TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS"></a><h3>TP_ERROR_STR_WOULD_BREAK_ANONYMITY</h3>
1013 <pre class="programlisting">#define TP_ERROR_STR_WOULD_BREAK_ANONYMITY "org.freedesktop.Telepathy.Error.WouldBreakAnonymity"
1014 </pre>
1015 <p>
1016 The D-Bus error name org.freedesktop.Telepathy.Error.WouldBreakAnonymity
1017 </p>
1018 <p>
1019 Raised if a request cannot be satisfied without violating an earlier request for anonymity, and the earlier request specified that raising an error is preferable to disclosing the user's identity (for instance via &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Connection.Interface.Anonymity.AnonymityMandatory&lt;/tp:dbus-ref&gt; or &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy"&gt;Channel.Interface.Anonymity.AnonymityMandatory&lt;/tp:dbus-ref&gt;).
1020 </p>
1021 </div>
9981022 </div>
9991023 </div>
10001024 <div class="footer">
123123 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART:CAPS" title="TP_HASH_TYPE_MESSAGE_PART">TP_HASH_TYPE_MESSAGE_PART</a>
124124 #define <a class="link" href="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-MESSAGE-PART-LIST:CAPS" title="TP_ARRAY_TYPE_MESSAGE_PART_LIST">TP_ARRAY_TYPE_MESSAGE_PART_LIST</a>
125125 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART-CONTENT-MAP:CAPS" title="TP_HASH_TYPE_MESSAGE_PART_CONTENT_MAP">TP_HASH_TYPE_MESSAGE_PART_CONTENT_MAP</a>
126 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHAT-STATE-MAP:CAPS" title="TP_HASH_TYPE_CHAT_STATE_MAP">TP_HASH_TYPE_CHAT_STATE_MAP</a>
126127
127128 #define <a class="link" href="telepathy-glib-gtypes.html#TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS" title="TP_HASH_TYPE_SUPPORTED_SOCKET_MAP">TP_HASH_TYPE_SUPPORTED_SOCKET_MAP</a>
128129 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-TUBE-INFO:CAPS" title="TP_STRUCT_TYPE_TUBE_INFO">TP_STRUCT_TYPE_TUBE_INFO</a>
154155 #define <a class="link" href="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-ROOM-INFO-LIST:CAPS" title="TP_ARRAY_TYPE_ROOM_INFO_LIST">TP_ARRAY_TYPE_ROOM_INFO_LIST</a>
155156 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-ROOM-INFO:CAPS" title="TP_STRUCT_TYPE_ROOM_INFO">TP_STRUCT_TYPE_ROOM_INFO</a>
156157
158 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS" title="TP_STRUCT_TYPE_SERVICE_POINT">TP_STRUCT_TYPE_SERVICE_POINT</a>
159 #define <a class="link" href="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS" title="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST">TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST</a>
160 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS" title="TP_STRUCT_TYPE_SERVICE_POINT_INFO">TP_STRUCT_TYPE_SERVICE_POINT_INFO</a>
161
157162 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS" title="TP_STRUCT_TYPE_AVATAR">TP_STRUCT_TYPE_AVATAR</a>
158163
159164 #define <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS" title="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS">TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS</a>
19411946 </p>
19421947 </div>
19431948 <hr>
1949 <div class="refsect2" title="TP_HASH_TYPE_CHAT_STATE_MAP">
1950 <a name="TP-HASH-TYPE-CHAT-STATE-MAP:CAPS"></a><h3>TP_HASH_TYPE_CHAT_STATE_MAP</h3>
1951 <pre class="programlisting">#define TP_HASH_TYPE_CHAT_STATE_MAP (tp_type_dbus_hash_uu ())
1952 </pre>
1953 <p>
1954 A map from contacts to their chat states.
1955 </p>
1956 <p>
1957 This macro expands to a call to a function
1958 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/glib/glib-Hash-Tables.html#GHashTable"><span class="type">GHashTable</span></a>
1959 appropriate for representing a D-Bus
1960 dictionary of signature
1961 <code class="literal">a{uu}</code>.
1962 </p>
1963 <p>
1964 Keys (D-Bus type <code class="literal">u</code>,
1965 type <code class="literal">Contact_Handle</code>,
1966 named <code class="literal">Contact</code>):
1967 A contact
1968 </p>
1969 <p>
1970 Values (D-Bus type <code class="literal">u</code>,
1971 type <code class="literal">Channel_Chat_State</code>,
1972 named <code class="literal">State</code>):
1973 The contact's chat state
1974 </p>
1975 </div>
1976 <hr>
19441977 <div class="refsect2" title="TP_HASH_TYPE_SUPPORTED_SOCKET_MAP">
19451978 <a name="TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS"></a><h3>TP_HASH_TYPE_SUPPORTED_SOCKET_MAP</h3>
19461979 <pre class="programlisting">#define TP_HASH_TYPE_SUPPORTED_SOCKET_MAP (tp_type_dbus_hash_uau ())
25812614 </p>
25822615 </div>
25832616 <hr>
2617 <div class="refsect2" title="TP_STRUCT_TYPE_SERVICE_POINT">
2618 <a name="TP-STRUCT-TYPE-SERVICE-POINT:CAPS"></a><h3>TP_STRUCT_TYPE_SERVICE_POINT</h3>
2619 <pre class="programlisting">#define TP_STRUCT_TYPE_SERVICE_POINT (tp_type_dbus_struct_us ())
2620 </pre>
2621 <p>
2622 A service point.
2623 </p>
2624 <p>
2625 This macro expands to a call to a function
2626 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>
2627 appropriate for representing a D-Bus struct
2628 with signature <code class="literal">(us)</code>.
2629 </p>
2630 <p>
2631 Member 0 (D-Bus type <code class="literal">u</code>,
2632 type <code class="literal">Service_Point_Type</code>,
2633 named <code class="literal">Service_Point_Type</code>):
2634 The service type.
2635 </p>
2636 <p>
2637 Member 1 (D-Bus type <code class="literal">s</code>,
2638 named <code class="literal">Service</code>):
2639 String representation of the service point. The representation is service specific; it may be a 'service' Uniform Resource Name as specified by &lt;a href="http://www.rfc-editor.org/rfc/rfc5031.txt"&gt;RFC 5031&lt;/a&gt;, or may be in some other form. Empty, unused or unknown value is represented by &amp;quot;&amp;quot;.
2640 </p>
2641 </div>
2642 <hr>
2643 <div class="refsect2" title="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST">
2644 <a name="TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS"></a><h3>TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST</h3>
2645 <pre class="programlisting">#define TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST (tp_type_dbus_array__28us_29as ())
2646 </pre>
2647 <p>
2648 Expands to a call to a function
2649 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a>
2650 of <a class="link" href="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS" title="TP_STRUCT_TYPE_SERVICE_POINT_INFO"><span class="type">TP_STRUCT_TYPE_SERVICE_POINT_INFO</span></a>.
2651 </p>
2652 </div>
2653 <hr>
2654 <div class="refsect2" title="TP_STRUCT_TYPE_SERVICE_POINT_INFO">
2655 <a name="TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS"></a><h3>TP_STRUCT_TYPE_SERVICE_POINT_INFO</h3>
2656 <pre class="programlisting">#define TP_STRUCT_TYPE_SERVICE_POINT_INFO (tp_type_dbus_struct__28us_29as ())
2657 </pre>
2658 <p>
2659 The service point.
2660
2661 </p>
2662 <p>
2663 This macro expands to a call to a function
2664 that returns the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of a <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>
2665 appropriate for representing a D-Bus struct
2666 with signature <code class="literal">((us)as)</code>.
2667 </p>
2668 <p>
2669 Member 0 (D-Bus type <code class="literal">(us)</code>,
2670 type <code class="literal">Service_Point</code>,
2671 named <code class="literal">Service_Point</code>):
2672 The service point.
2673 </p>
2674 <p>
2675 Member 1 (D-Bus type <code class="literal">as</code>,
2676 named <code class="literal">Service_IDs</code>):
2677 A list of IDs that are mapped to this service. This is provided as a convenience for the UIs, but the preferred method for requesting channel to a service is by setting the &lt;tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel.Interface.ServicePoint"&gt;InitialServicePoint&lt;/tp:dbus-ref&gt; property in a channel request.
2678 </p>
2679 </div>
2680 <hr>
25842681 <div class="refsect2" title="TP_STRUCT_TYPE_AVATAR">
25852682 <a name="TP-STRUCT-TYPE-AVATAR:CAPS"></a><h3>TP_STRUCT_TYPE_AVATAR</h3>
25862683 <pre class="programlisting">#define TP_STRUCT_TYPE_AVATAR (tp_type_dbus_struct_ays ())
109109 <em class="parameter"><code><a class="link" href="telepathy-glib-handle.html#TpHandle" title="TpHandle"><span class="type">TpHandle</span></a> handle</code></em>,
110110 <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>);
111111 <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-new-from-array" title="tp_handle_set_new_from_array ()">tp_handle_set_new_from_array</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleRepoIface"><span class="type">TpHandleRepoIface</span></a> *repo</code></em>,
113 <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>);
112114 <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>);
113115 <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>);
114116 <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>);
900902 </table></div>
901903 </div>
902904 <hr>
905 <div class="refsect2" title="tp_handle_set_new_from_array ()">
906 <a name="tp-handle-set-new-from-array"></a><h3>tp_handle_set_new_from_array ()</h3>
907 <pre class="programlisting"><a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="returnvalue">TpHandleSet</span></a> * tp_handle_set_new_from_array (<em class="parameter"><code><a class="link" href="telepathy-glib-handle-repo.html#TpHandleRepoIface"><span class="type">TpHandleRepoIface</span></a> *repo</code></em>,
908 <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>);</pre>
909 <p>
910 Creates a new <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a>
911 </p>
912 <div class="variablelist"><table border="0">
913 <col align="left" valign="top">
914 <tbody>
915 <tr>
916 <td><p><span class="term"><em class="parameter"><code>repo</code></em> :</span></p></td>
917 <td>
918 <a class="link" href="telepathy-glib-handle-repo.html#TpHandleRepoIface"><span class="type">TpHandleRepoIface</span></a> that holds the handles to be reffed by this set
919 </td>
920 </tr>
921 <tr>
922 <td><p><span class="term"><em class="parameter"><code>array</code></em> :</span></p></td>
923 <td>array of handles to be referenced by this set
924 </td>
925 </tr>
926 <tr>
927 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
928 <td> A new <a class="link" href="telepathy-glib-handle-repo.html#TpHandleSet" title="TpHandleSet"><span class="type">TpHandleSet</span></a>
929
930 </td>
931 </tr>
932 </tbody>
933 </table></div>
934 <p class="since">Since 0.11.7</p>
935 </div>
936 <hr>
903937 <div class="refsect2" title="tp_handle_set_copy ()">
904938 <a name="tp-handle-set-copy"></a><h3>tp_handle_set_copy ()</h3>
905939 <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>
6262 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS" title="TP_IFACE_QUARK_CONNECTION">TP_IFACE_QUARK_CONNECTION</a>
6363 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_ALIASING">TP_IFACE_CONNECTION_INTERFACE_ALIASING</a>
6464 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ALIASING:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING">TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING</a>
65 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_ANONYMITY">TP_IFACE_CONNECTION_INTERFACE_ANONYMITY</a>
66 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY">TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY</a>
6567 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_AVATARS">TP_IFACE_CONNECTION_INTERFACE_AVATARS</a>
6668 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-AVATARS:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS">TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS</a>
6769 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-BALANCE:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_BALANCE">TP_IFACE_CONNECTION_INTERFACE_BALANCE</a>
8284 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-PRESENCE:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_PRESENCE">TP_IFACE_QUARK_CONNECTION_INTERFACE_PRESENCE</a>
8385 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-LOCATION:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_LOCATION">TP_IFACE_CONNECTION_INTERFACE_LOCATION</a>
8486 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-LOCATION:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_LOCATION">TP_IFACE_QUARK_CONNECTION_INTERFACE_LOCATION</a>
87 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS" title="TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT">TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT</a>
88 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT">TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT</a>
8589 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL:CAPS" title="TP_IFACE_CHANNEL">TP_IFACE_CHANNEL</a>
8690 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS" title="TP_IFACE_QUARK_CHANNEL">TP_IFACE_QUARK_CHANNEL</a>
8791 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS" title="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST">TP_IFACE_CHANNEL_TYPE_CONTACT_LIST</a>
102106 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-TUBE:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE">TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE</a>
103107 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-DBUS-TUBE:CAPS" title="TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE">TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE</a>
104108 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-STREAM-TUBE:CAPS" title="TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE">TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE</a>
109 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS" title="TP_IFACE_CHANNEL_INTERFACE_ANONYMITY">TP_IFACE_CHANNEL_INTERFACE_ANONYMITY</a>
110 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY">TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY</a>
105111 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS" title="TP_IFACE_CHANNEL_INTERFACE_CALL_STATE">TP_IFACE_CHANNEL_INTERFACE_CALL_STATE</a>
106112 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-CALL-STATE:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_CALL_STATE">TP_IFACE_QUARK_CHANNEL_INTERFACE_CALL_STATE</a>
107113 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CHAT-STATE:CAPS" title="TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE">TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE</a>
120126 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MEDIA-SIGNALLING:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_MEDIA_SIGNALLING">TP_IFACE_QUARK_CHANNEL_INTERFACE_MEDIA_SIGNALLING</a>
121127 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-MESSAGES:CAPS" title="TP_IFACE_CHANNEL_INTERFACE_MESSAGES">TP_IFACE_CHANNEL_INTERFACE_MESSAGES</a>
122128 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MESSAGES:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_MESSAGES">TP_IFACE_QUARK_CHANNEL_INTERFACE_MESSAGES</a>
129 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS" title="TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT">TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT</a>
130 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT">TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT</a>
123131 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER:CAPS" title="TP_IFACE_CHANNEL_DISPATCHER">TP_IFACE_CHANNEL_DISPATCHER</a>
124132 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-DISPATCHER:CAPS" title="TP_IFACE_QUARK_CHANNEL_DISPATCHER">TP_IFACE_QUARK_CHANNEL_DISPATCHER</a>
125133 #define <a class="link" href="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER-INTERFACE-OPERATION-LIST:CAPS" title="TP_IFACE_CHANNEL_DISPATCHER_INTERFACE_OPERATION_LIST">TP_IFACE_CHANNEL_DISPATCHER_INTERFACE_OPERATION_LIST</a>
147155 #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>
148156 #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>
149157 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS" title="TP_PROP_ACCOUNT_CONNECTION">TP_PROP_ACCOUNT_CONNECTION</a>
158 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS" title="TP_PROP_ACCOUNT_CONNECTION_ERROR">TP_PROP_ACCOUNT_CONNECTION_ERROR</a>
159 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS" title="TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS">TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS</a>
150160 #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>
151161 #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>
152162 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECT-AUTOMATICALLY:CAPS" title="TP_PROP_ACCOUNT_CONNECT_AUTOMATICALLY">TP_PROP_ACCOUNT_CONNECT_AUTOMATICALLY</a>
177187 #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>
178188 #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>
179189 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS" title="TP_PROP_CHANNEL_INTERFACES">TP_PROP_CHANNEL_INTERFACES</a>
190 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY">TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</a>
191 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES">TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES</a>
192 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID">TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID</a>
193 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES">TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES</a>
180194 #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>
181195 #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>
182196 #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>
189203 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-MESSAGE-PART-SUPPORT-FLAGS:CAPS" title="TP_PROP_CHANNEL_INTERFACE_MESSAGES_MESSAGE_PART_SUPPORT_FLAGS">TP_PROP_CHANNEL_INTERFACE_MESSAGES_MESSAGE_PART_SUPPORT_FLAGS</a>
190204 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-PENDING-MESSAGES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_MESSAGES_PENDING_MESSAGES">TP_PROP_CHANNEL_INTERFACE_MESSAGES_PENDING_MESSAGES</a>
191205 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-SUPPORTED-CONTENT-TYPES:CAPS" title="TP_PROP_CHANNEL_INTERFACE_MESSAGES_SUPPORTED_CONTENT_TYPES">TP_PROP_CHANNEL_INTERFACE_MESSAGES_SUPPORTED_CONTENT_TYPES</a>
206 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS" title="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT">TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT</a>
207 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS" title="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT">TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT</a>
192208 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS" title="TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS">TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS</a>
193209 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-STATE:CAPS" title="TP_PROP_CHANNEL_INTERFACE_TUBE_STATE">TP_PROP_CHANNEL_INTERFACE_TUBE_STATE</a>
194210 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-REQUESTED:CAPS" title="TP_PROP_CHANNEL_REQUESTED">TP_PROP_CHANNEL_REQUESTED</a>
228244 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CLIENT-INTERFACES:CAPS" title="TP_PROP_CLIENT_INTERFACES">TP_PROP_CLIENT_INTERFACES</a>
229245 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-OBSERVER-CHANNEL-FILTER:CAPS" title="TP_PROP_CLIENT_OBSERVER_OBSERVER_CHANNEL_FILTER">TP_PROP_CLIENT_OBSERVER_OBSERVER_CHANNEL_FILTER</a>
230246 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-RECOVER:CAPS" title="TP_PROP_CLIENT_OBSERVER_RECOVER">TP_PROP_CLIENT_OBSERVER_RECOVER</a>
247 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY">TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</a>
248 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES">TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES</a>
249 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES">TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES</a>
231250 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS" title="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES">TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES</a>
232251 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-HEIGHT:CAPS" title="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_HEIGHT">TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_HEIGHT</a>
233252 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-WIDTH:CAPS" title="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_WIDTH">TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_WIDTH</a>
245264 #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>
246265 #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>
247266 #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>
267 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS" title="TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS">TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS</a>
248268 #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>
249269 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-MANAGER-INTERFACES:CAPS" title="TP_PROP_CONNECTION_MANAGER_INTERFACES">TP_PROP_CONNECTION_MANAGER_INTERFACES</a>
250270 #define <a class="link" href="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACES:CAPS" title="TP_PROP_CONNECTION_INTERFACES">TP_PROP_CONNECTION_INTERFACES</a>
476496 </p>
477497 </div>
478498 <hr>
499 <div class="refsect2" title="TP_IFACE_CONNECTION_INTERFACE_ANONYMITY">
500 <a name="TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS"></a><h3>TP_IFACE_CONNECTION_INTERFACE_ANONYMITY</h3>
501 <pre class="programlisting">#define TP_IFACE_CONNECTION_INTERFACE_ANONYMITY</pre>
502 <p>
503 The interface name "org.freedesktop.Telepathy.Connection.Interface.Anonymity"
504 </p>
505 </div>
506 <hr>
507 <div class="refsect2" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY">
508 <a name="TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS"></a><h3>TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY</h3>
509 <pre class="programlisting">#define TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY</pre>
510 <p>
511 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Connection.Interface.Anonymity"
512 </p>
513 </div>
514 <hr>
479515 <div class="refsect2" title="TP_IFACE_CONNECTION_INTERFACE_AVATARS">
480516 <a name="TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS"></a><h3>TP_IFACE_CONNECTION_INTERFACE_AVATARS</h3>
481517 <pre class="programlisting">#define TP_IFACE_CONNECTION_INTERFACE_AVATARS</pre>
636672 </p>
637673 </div>
638674 <hr>
675 <div class="refsect2" title="TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT">
676 <a name="TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"></a><h3>TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT</h3>
677 <pre class="programlisting">#define TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT</pre>
678 <p>
679 The interface name "org.freedesktop.Telepathy.Connection.Interface.ServicePoint"
680 </p>
681 </div>
682 <hr>
683 <div class="refsect2" title="TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT">
684 <a name="TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"></a><h3>TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT</h3>
685 <pre class="programlisting">#define TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT</pre>
686 <p>
687 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Connection.Interface.ServicePoint"
688 </p>
689 </div>
690 <hr>
639691 <div class="refsect2" title="TP_IFACE_CHANNEL">
640692 <a name="TP-IFACE-CHANNEL:CAPS"></a><h3>TP_IFACE_CHANNEL</h3>
641693 <pre class="programlisting">#define TP_IFACE_CHANNEL</pre>
796848 </p>
797849 </div>
798850 <hr>
851 <div class="refsect2" title="TP_IFACE_CHANNEL_INTERFACE_ANONYMITY">
852 <a name="TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS"></a><h3>TP_IFACE_CHANNEL_INTERFACE_ANONYMITY</h3>
853 <pre class="programlisting">#define TP_IFACE_CHANNEL_INTERFACE_ANONYMITY</pre>
854 <p>
855 The interface name "org.freedesktop.Telepathy.Channel.Interface.Anonymity"
856 </p>
857 </div>
858 <hr>
859 <div class="refsect2" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY">
860 <a name="TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS"></a><h3>TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY</h3>
861 <pre class="programlisting">#define TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY</pre>
862 <p>
863 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Channel.Interface.Anonymity"
864 </p>
865 </div>
866 <hr>
799867 <div class="refsect2" title="TP_IFACE_CHANNEL_INTERFACE_CALL_STATE">
800868 <a name="TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS"></a><h3>TP_IFACE_CHANNEL_INTERFACE_CALL_STATE</h3>
801869 <pre class="programlisting">#define TP_IFACE_CHANNEL_INTERFACE_CALL_STATE</pre>
9401008 </p>
9411009 </div>
9421010 <hr>
1011 <div class="refsect2" title="TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT">
1012 <a name="TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"></a><h3>TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT</h3>
1013 <pre class="programlisting">#define TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT</pre>
1014 <p>
1015 The interface name "org.freedesktop.Telepathy.Channel.Interface.ServicePoint"
1016 </p>
1017 </div>
1018 <hr>
1019 <div class="refsect2" title="TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT">
1020 <a name="TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"></a><h3>TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT</h3>
1021 <pre class="programlisting">#define TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT</pre>
1022 <p>
1023 Expands to a call to a function that returns a quark for the interface name "org.freedesktop.Telepathy.Channel.Interface.ServicePoint"
1024 </p>
1025 </div>
1026 <hr>
9431027 <div class="refsect2" title="TP_IFACE_CHANNEL_DISPATCHER">
9441028 <a name="TP-IFACE-CHANNEL-DISPATCHER:CAPS"></a><h3>TP_IFACE_CHANNEL_DISPATCHER</h3>
9451029 <pre class="programlisting">#define TP_IFACE_CHANNEL_DISPATCHER</pre>
11561240 </p>
11571241 </div>
11581242 <hr>
1243 <div class="refsect2" title="TP_PROP_ACCOUNT_CONNECTION_ERROR">
1244 <a name="TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS"></a><h3>TP_PROP_ACCOUNT_CONNECTION_ERROR</h3>
1245 <pre class="programlisting">#define TP_PROP_ACCOUNT_CONNECTION_ERROR</pre>
1246 <p>
1247 The fully-qualified property name "org.freedesktop.Telepathy.Account.ConnectionError"
1248 </p>
1249 </div>
1250 <hr>
1251 <div class="refsect2" title="TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS">
1252 <a name="TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS"></a><h3>TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS</h3>
1253 <pre class="programlisting">#define TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS</pre>
1254 <p>
1255 The fully-qualified property name "org.freedesktop.Telepathy.Account.ConnectionErrorDetails"
1256 </p>
1257 </div>
1258 <hr>
11591259 <div class="refsect2" title="TP_PROP_ACCOUNT_CONNECTION_STATUS">
11601260 <a name="TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS"></a><h3>TP_PROP_ACCOUNT_CONNECTION_STATUS</h3>
11611261 <pre class="programlisting">#define TP_PROP_ACCOUNT_CONNECTION_STATUS</pre>
13961496 </p>
13971497 </div>
13981498 <hr>
1499 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY">
1500 <a name="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</h3>
1501 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</pre>
1502 <p>
1503 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.Anonymity.AnonymityMandatory"
1504 </p>
1505 </div>
1506 <hr>
1507 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES">
1508 <a name="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES</h3>
1509 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES</pre>
1510 <p>
1511 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.Anonymity.AnonymityModes"
1512 </p>
1513 </div>
1514 <hr>
1515 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID">
1516 <a name="TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID</h3>
1517 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID</pre>
1518 <p>
1519 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.Anonymity.AnonymousID"
1520 </p>
1521 </div>
1522 <hr>
1523 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES">
1524 <a name="TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES</h3>
1525 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES</pre>
1526 <p>
1527 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.ChatState.ChatStates"
1528 </p>
1529 </div>
1530 <hr>
13991531 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES">
14001532 <a name="TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES</h3>
14011533 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES</pre>
14921624 </p>
14931625 </div>
14941626 <hr>
1627 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT">
1628 <a name="TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT</h3>
1629 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT</pre>
1630 <p>
1631 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.ServicePoint.CurrentServicePoint"
1632 </p>
1633 </div>
1634 <hr>
1635 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT">
1636 <a name="TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT</h3>
1637 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT</pre>
1638 <p>
1639 The fully-qualified property name "org.freedesktop.Telepathy.Channel.Interface.ServicePoint.InitialServicePoint"
1640 </p>
1641 </div>
1642 <hr>
14951643 <div class="refsect2" title="TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS">
14961644 <a name="TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS"></a><h3>TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS</h3>
14971645 <pre class="programlisting">#define TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS</pre>
18041952 </p>
18051953 </div>
18061954 <hr>
1955 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY">
1956 <a name="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</h3>
1957 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY</pre>
1958 <p>
1959 The fully-qualified property name "org.freedesktop.Telepathy.Connection.Interface.Anonymity.AnonymityMandatory"
1960 </p>
1961 </div>
1962 <hr>
1963 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES">
1964 <a name="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES</h3>
1965 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES</pre>
1966 <p>
1967 The fully-qualified property name "org.freedesktop.Telepathy.Connection.Interface.Anonymity.AnonymityModes"
1968 </p>
1969 </div>
1970 <hr>
1971 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES">
1972 <a name="TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES</h3>
1973 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES</pre>
1974 <p>
1975 The fully-qualified property name "org.freedesktop.Telepathy.Connection.Interface.Anonymity.SupportedAnonymityModes"
1976 </p>
1977 </div>
1978 <hr>
18071979 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES">
18081980 <a name="TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES</h3>
18091981 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES</pre>
19402112 </p>
19412113 </div>
19422114 <hr>
2115 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS">
2116 <a name="TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS</h3>
2117 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS</pre>
2118 <p>
2119 The fully-qualified property name "org.freedesktop.Telepathy.Connection.Interface.ServicePoint.KnownServicePoints"
2120 </p>
2121 </div>
2122 <hr>
19432123 <div class="refsect2" title="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES">
19442124 <a name="TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS"></a><h3>TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES</h3>
19452125 <pre class="programlisting">#define TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES</pre>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-client.html" title="Client-side proxies">
8 <link rel="prev" href="telepathy-glib-channel-roomlist.html" title="Room List channels">
8 <link rel="prev" href="telepathy-glib-cli-service-point.html" title="Connection and Channel ServicePoint interfaces">
99 <link rel="next" href="telepathy-glib-account-manager.html" title="TpAccountManager">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-channel-roomlist.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-cli-service-point.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-client.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Service-side Connection and Channel Anonymity interfaces</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-connection.html" title="Service-side Connection interfaces">
9 <link rel="next" href="telepathy-glib-svc-service-point.html" title="Service-side Connection and Channel ServicePoint interfaces">
10 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-connection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-service-point.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-svc-anonymity.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-svc-anonymity.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-svc-anonymity.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-svc-anonymity.signals" class="shortcut">Signals</a>
30 </td></tr>
31 </table>
32 <div class="refentry" title="Service-side Connection and Channel Anonymity interfaces">
33 <a name="telepathy-glib-svc-anonymity"></a><div class="titlepage"></div>
34 <div class="refnamediv"><table width="100%"><tr>
35 <td valign="top">
36 <h2><span class="refentrytitle"><a name="telepathy-glib-svc-anonymity.top_of_page"></a>Service-side Connection and Channel Anonymity interfaces</span></h2>
37 <p>Service-side Connection and Channel Anonymity interfaces — GInterfaces to implement the Anonymity interfaces</p>
38 </td>
39 <td valign="top" align="right"></td>
40 </tr></table></div>
41 <div class="refsynopsisdiv" title="Synopsis">
42 <a name="telepathy-glib-svc-anonymity.synopsis"></a><h2>Synopsis</h2>
43 <a name="TpSvcConnectionInterfaceAnonymity"></a><a name="TpSvcChannelInterfaceAnonymity"></a><pre class="synopsis">
44 #include &lt;telepathy-glib/svc-channel.h&gt;
45 #include &lt;telepathy-glib/svc-connection.h&gt;
46
47 <a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-struct" title="TpSvcConnectionInterfaceAnonymity">TpSvcConnectionInterfaceAnonymity</a>;
48 <a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymityClass" title="TpSvcConnectionInterfaceAnonymityClass">TpSvcConnectionInterfaceAnonymityClass</a>;
49 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-anonymity.html#tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed" title="tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ()">tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed</a>
50 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
51 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_Modes</code></em>);
52
53 <a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymity-struct" title="TpSvcChannelInterfaceAnonymity">TpSvcChannelInterfaceAnonymity</a>;
54 <a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymityClass" title="TpSvcChannelInterfaceAnonymityClass">TpSvcChannelInterfaceAnonymityClass</a>;
55 </pre>
56 </div>
57 <div class="refsect1" title="Object Hierarchy">
58 <a name="telepathy-glib-svc-anonymity.object-hierarchy"></a><h2>Object Hierarchy</h2>
59 <pre class="synopsis">
60 GInterface
61 +----TpSvcConnectionInterfaceAnonymity
62 </pre>
63 <pre class="synopsis">
64 GInterface
65 +----TpSvcChannelInterfaceAnonymity
66 </pre>
67 </div>
68 <div class="refsect1" title="Signals">
69 <a name="telepathy-glib-svc-anonymity.signals"></a><h2>Signals</h2>
70 <pre class="synopsis">
71 "<a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed" title='The "anonymity-modes-changed" signal'>anonymity-modes-changed</a>" : Run Last / Has Details
72 </pre>
73 </div>
74 <div class="refsect1" title="Description">
75 <a name="telepathy-glib-svc-anonymity.description"></a><h2>Description</h2>
76 <p>
77 In some protocols, mainly those that interact with the PSTN, it's possible
78 to make a call without disclosing the originating identity (e.g. phone
79 number). The Anonymity interfaces on the Connection and Channel can be used
80 to control this feature in Telepathy.
81 </p>
82 <p>
83 This section documents the auto-generated GInterfaces used to implement the
84 Anonymity interfaces.
85 </p>
86 </div>
87 <div class="refsect1" title="Details">
88 <a name="telepathy-glib-svc-anonymity.details"></a><h2>Details</h2>
89 <div class="refsect2" title="TpSvcConnectionInterfaceAnonymity">
90 <a name="TpSvcConnectionInterfaceAnonymity-struct"></a><h3>TpSvcConnectionInterfaceAnonymity</h3>
91 <pre class="programlisting">typedef struct _TpSvcConnectionInterfaceAnonymity TpSvcConnectionInterfaceAnonymity;</pre>
92 <p>
93 Dummy typedef representing any implementation of this interface.
94 </p>
95 </div>
96 <hr>
97 <div class="refsect2" title="TpSvcConnectionInterfaceAnonymityClass">
98 <a name="TpSvcConnectionInterfaceAnonymityClass"></a><h3>TpSvcConnectionInterfaceAnonymityClass</h3>
99 <pre class="programlisting">typedef struct _TpSvcConnectionInterfaceAnonymityClass TpSvcConnectionInterfaceAnonymityClass;</pre>
100 <p>
101 The class of TpSvcConnectionInterfaceAnonymity.
102 This interface has no D-Bus methods, so an
103 implementation can typically pass <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to
104 <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> as the interface
105 initialization function.
106 </p>
107 </div>
108 <hr>
109 <div class="refsect2" title="tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ()">
110 <a name="tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed"></a><h3>tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ()</h3>
111 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed
112 (<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>,
113 <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg_Modes</code></em>);</pre>
114 <p>
115 Type-safe wrapper around g_signal_emit to emit the
116 AnonymityModesChanged signal on interface org.freedesktop.Telepathy.Connection.Interface.Anonymity.
117 </p>
118 <div class="variablelist"><table border="0">
119 <col align="left" valign="top">
120 <tbody>
121 <tr>
122 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
123 <td>The object implementing this interface
124 </td>
125 </tr>
126 <tr>
127 <td><p><span class="term"><em class="parameter"><code>arg_Modes</code></em> :</span></p></td>
128 <td>guint (FIXME, generate documentation)
129 </td>
130 </tr>
131 </tbody>
132 </table></div>
133 </div>
134 <hr>
135 <div class="refsect2" title="TpSvcChannelInterfaceAnonymity">
136 <a name="TpSvcChannelInterfaceAnonymity-struct"></a><h3>TpSvcChannelInterfaceAnonymity</h3>
137 <pre class="programlisting">typedef struct _TpSvcChannelInterfaceAnonymity TpSvcChannelInterfaceAnonymity;</pre>
138 <p>
139 Dummy typedef representing any implementation of this interface.
140 </p>
141 </div>
142 <hr>
143 <div class="refsect2" title="TpSvcChannelInterfaceAnonymityClass">
144 <a name="TpSvcChannelInterfaceAnonymityClass"></a><h3>TpSvcChannelInterfaceAnonymityClass</h3>
145 <pre class="programlisting">typedef struct _TpSvcChannelInterfaceAnonymityClass TpSvcChannelInterfaceAnonymityClass;</pre>
146 <p>
147 The class of TpSvcChannelInterfaceAnonymity.
148 This interface has no D-Bus methods, so an
149 implementation can typically pass <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to
150 <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> as the interface
151 initialization function.
152 </p>
153 </div>
154 </div>
155 <div class="refsect1" title="Signal Details">
156 <a name="telepathy-glib-svc-anonymity.signal-details"></a><h2>Signal Details</h2>
157 <div class="refsect2" title='The "anonymity-modes-changed" signal'>
158 <a name="TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed"></a><h3>The <code class="literal">"anonymity-modes-changed"</code> signal</h3>
159 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity"><span class="type">TpSvcConnectionInterfaceAnonymity</span></a> *arg_Modes,
160 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> arg1,
161 <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>
162 <p>
163 The AnonymityModesChanged D-Bus signal is emitted whenever this GObject signal is.
164 </p>
165 <div class="variablelist"><table border="0">
166 <col align="left" valign="top">
167 <tbody>
168 <tr>
169 <td><p><span class="term"><em class="parameter"><code>arg_Modes</code></em> :</span></p></td>
170 <td>guint (FIXME, generate documentation)
171 </td>
172 </tr>
173 <tr>
174 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
175 <td>user data set when the signal handler was connected.</td>
176 </tr>
177 </tbody>
178 </table></div>
179 </div>
180 </div>
181 </div>
182 <div class="footer">
183 <hr>
184 Generated by GTK-Doc V1.15</div>
185 </body>
186 </html>
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
88 <link rel="prev" href="telepathy-glib-svc-debug.html" title="Service-side Debug base interface">
9 <link rel="next" href="telepathy-glib-svc-media-interfaces.html" title="Service-side media streaming helper interfaces">
9 <link rel="next" href="telepathy-glib-svc-anonymity.html" title="Service-side Connection and Channel Anonymity interfaces">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1212 </head>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-media-interfaces.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
20 <td><a accesskey="n" href="telepathy-glib-svc-anonymity.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
2121 </tr>
2222 <tr><td colspan="5" class="shortcuts">
2323 <a href="#telepathy-glib-svc-connection.synopsis" class="shortcut">Top</a>
55 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
66 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
77 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-connection.html" title="Service-side Connection interfaces">
8 <link rel="prev" href="telepathy-glib-svc-service-point.html" title="Service-side Connection and Channel ServicePoint interfaces">
99 <link rel="next" href="telepathy-glib-svc-connection-manager.html" title="Service-side Connection Manager interface">
1010 <meta name="generator" content="GTK-Doc V1.15 (XML mode)">
1111 <link rel="stylesheet" href="style.css" type="text/css">
1313 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
1414 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
1515 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-connection.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
16 <td><a accesskey="p" href="telepathy-glib-svc-service-point.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
1717 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
1818 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
1919 <th width="100%" align="center">telepathy-glib Reference Manual</th>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4 <title>Service-side Connection and Channel ServicePoint interfaces</title>
5 <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
6 <link rel="home" href="index.html" title="telepathy-glib Reference Manual">
7 <link rel="up" href="ch-service-dbus.html" title="Service-side D-Bus interfaces">
8 <link rel="prev" href="telepathy-glib-svc-anonymity.html" title="Service-side Connection and Channel Anonymity interfaces">
9 <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.15 (XML mode)">
11 <link rel="stylesheet" href="style.css" type="text/css">
12 </head>
13 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
15 <tr valign="middle">
16 <td><a accesskey="p" href="telepathy-glib-svc-anonymity.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="ch-service-dbus.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">telepathy-glib Reference Manual</th>
20 <td><a accesskey="n" href="telepathy-glib-svc-media-interfaces.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
21 </tr>
22 <tr><td colspan="5" class="shortcuts">
23 <a href="#telepathy-glib-svc-service-point.synopsis" class="shortcut">Top</a>
24  | 
25 <a href="#telepathy-glib-svc-service-point.description" class="shortcut">Description</a>
26  | 
27 <a href="#telepathy-glib-svc-service-point.object-hierarchy" class="shortcut">Object Hierarchy</a>
28  | 
29 <a href="#telepathy-glib-svc-service-point.signals" class="shortcut">Signals</a>
30 </td></tr>
31 </table>
32 <div class="refentry" title="Service-side Connection and Channel ServicePoint interfaces">
33 <a name="telepathy-glib-svc-service-point"></a><div class="titlepage"></div>
34 <div class="refnamediv"><table width="100%"><tr>
35 <td valign="top">
36 <h2><span class="refentrytitle"><a name="telepathy-glib-svc-service-point.top_of_page"></a>Service-side Connection and Channel ServicePoint interfaces</span></h2>
37 <p>Service-side Connection and Channel ServicePoint interfaces — GInterfaces to implement the ServicePoint interfaces</p>
38 </td>
39 <td valign="top" align="right"></td>
40 </tr></table></div>
41 <div class="refsynopsisdiv" title="Synopsis">
42 <a name="telepathy-glib-svc-service-point.synopsis"></a><h2>Synopsis</h2>
43 <a name="TpSvcConnectionInterfaceServicePoint"></a><a name="TpSvcChannelInterfaceServicePoint"></a><pre class="synopsis">
44 #include &lt;telepathy-glib/svc-channel.h&gt;
45 #include &lt;telepathy-glib/svc-connection.h&gt;
46
47 <a class="link" href="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-struct" title="TpSvcConnectionInterfaceServicePoint">TpSvcConnectionInterfaceServicePoint</a>;
48 <a class="link" href="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePointClass" title="TpSvcConnectionInterfaceServicePointClass">TpSvcConnectionInterfaceServicePointClass</a>;
49 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-service-point.html#tp-svc-connection-interface-service-point-emit-service-points-changed" title="tp_svc_connection_interface_service_point_emit_service_points_changed ()">tp_svc_connection_interface_service_point_emit_service_points_changed</a>
50 (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> instance</code></em>,
51 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *arg_Service_Points</code></em>);
52
53 <a class="link" href="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-struct" title="TpSvcChannelInterfaceServicePoint">TpSvcChannelInterfaceServicePoint</a>;
54 <a class="link" href="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePointClass" title="TpSvcChannelInterfaceServicePointClass">TpSvcChannelInterfaceServicePointClass</a>;
55 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-svc-service-point.html#tp-svc-channel-interface-service-point-emit-service-point-changed" title="tp_svc_channel_interface_service_point_emit_service_point_changed ()">tp_svc_channel_interface_service_point_emit_service_point_changed</a>
56 (<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>,
57 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *arg_Service_Point</code></em>);
58 </pre>
59 </div>
60 <div class="refsect1" title="Object Hierarchy">
61 <a name="telepathy-glib-svc-service-point.object-hierarchy"></a><h2>Object Hierarchy</h2>
62 <pre class="synopsis">
63 GInterface
64 +----TpSvcConnectionInterfaceServicePoint
65 </pre>
66 <pre class="synopsis">
67 GInterface
68 +----TpSvcChannelInterfaceServicePoint
69 </pre>
70 </div>
71 <div class="refsect1" title="Signals">
72 <a name="telepathy-glib-svc-service-point.signals"></a><h2>Signals</h2>
73 <pre class="synopsis">
74 "<a class="link" href="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-service-points-changed" title='The "service-points-changed" signal'>service-points-changed</a>" : Run Last / Has Details
75 "<a class="link" href="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-service-point-changed" title='The "service-point-changed" signal'>service-point-changed</a>" : Run Last / Has Details
76 </pre>
77 </div>
78 <div class="refsect1" title="Description">
79 <a name="telepathy-glib-svc-service-point.description"></a><h2>Description</h2>
80 <p>
81 In some protocols, mainly those that interact with the PSTN, it's possible
82 to contact the emergency services or other public service answering points.
83 The ServicePoint interfaces on the Connection and Channel can be used
84 to discover how to contact these service points, and detect whether a call
85 in progress is communicating with a service point.
86 </p>
87 <p>
88 This section documents the auto-generated GInterfaces used to implement the
89 ServicePoint interfaces.
90 </p>
91 </div>
92 <div class="refsect1" title="Details">
93 <a name="telepathy-glib-svc-service-point.details"></a><h2>Details</h2>
94 <div class="refsect2" title="TpSvcConnectionInterfaceServicePoint">
95 <a name="TpSvcConnectionInterfaceServicePoint-struct"></a><h3>TpSvcConnectionInterfaceServicePoint</h3>
96 <pre class="programlisting">typedef struct _TpSvcConnectionInterfaceServicePoint TpSvcConnectionInterfaceServicePoint;</pre>
97 <p>
98 Dummy typedef representing any implementation of this interface.
99 </p>
100 </div>
101 <hr>
102 <div class="refsect2" title="TpSvcConnectionInterfaceServicePointClass">
103 <a name="TpSvcConnectionInterfaceServicePointClass"></a><h3>TpSvcConnectionInterfaceServicePointClass</h3>
104 <pre class="programlisting">typedef struct _TpSvcConnectionInterfaceServicePointClass TpSvcConnectionInterfaceServicePointClass;</pre>
105 <p>
106 The class of TpSvcConnectionInterfaceServicePoint.
107 This interface has no D-Bus methods, so an
108 implementation can typically pass <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to
109 <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> as the interface
110 initialization function.
111 </p>
112 </div>
113 <hr>
114 <div class="refsect2" title="tp_svc_connection_interface_service_point_emit_service_points_changed ()">
115 <a name="tp-svc-connection-interface-service-point-emit-service-points-changed"></a><h3>tp_svc_connection_interface_service_point_emit_service_points_changed ()</h3>
116 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_connection_interface_service_point_emit_service_points_changed
117 (<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>,
118 <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/glib/glib-Pointer-Arrays.html#GPtrArray"><span class="type">GPtrArray</span></a> *arg_Service_Points</code></em>);</pre>
119 <p>
120 Type-safe wrapper around g_signal_emit to emit the
121 ServicePointsChanged signal on interface org.freedesktop.Telepathy.Connection.Interface.ServicePoint.
122 </p>
123 <div class="variablelist"><table border="0">
124 <col align="left" valign="top">
125 <tbody>
126 <tr>
127 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
128 <td>The object implementing this interface
129 </td>
130 </tr>
131 <tr>
132 <td><p><span class="term"><em class="parameter"><code>arg_Service_Points</code></em> :</span></p></td>
133 <td>const GPtrArray * (FIXME, generate documentation)
134 </td>
135 </tr>
136 </tbody>
137 </table></div>
138 </div>
139 <hr>
140 <div class="refsect2" title="TpSvcChannelInterfaceServicePoint">
141 <a name="TpSvcChannelInterfaceServicePoint-struct"></a><h3>TpSvcChannelInterfaceServicePoint</h3>
142 <pre class="programlisting">typedef struct _TpSvcChannelInterfaceServicePoint TpSvcChannelInterfaceServicePoint;</pre>
143 <p>
144 Dummy typedef representing any implementation of this interface.
145 </p>
146 </div>
147 <hr>
148 <div class="refsect2" title="TpSvcChannelInterfaceServicePointClass">
149 <a name="TpSvcChannelInterfaceServicePointClass"></a><h3>TpSvcChannelInterfaceServicePointClass</h3>
150 <pre class="programlisting">typedef struct _TpSvcChannelInterfaceServicePointClass TpSvcChannelInterfaceServicePointClass;</pre>
151 <p>
152 The class of TpSvcChannelInterfaceServicePoint.
153 This interface has no D-Bus methods, so an
154 implementation can typically pass <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> to
155 <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#G-IMPLEMENT-INTERFACE:CAPS"><code class="function">G_IMPLEMENT_INTERFACE()</code></a> as the interface
156 initialization function.
157 </p>
158 </div>
159 <hr>
160 <div class="refsect2" title="tp_svc_channel_interface_service_point_emit_service_point_changed ()">
161 <a name="tp-svc-channel-interface-service-point-emit-service-point-changed"></a><h3>tp_svc_channel_interface_service_point_emit_service_point_changed ()</h3>
162 <pre class="programlisting"><span class="returnvalue">void</span> tp_svc_channel_interface_service_point_emit_service_point_changed
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>const <a href="/usr/share/gtk-doc/html/gobject/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a> *arg_Service_Point</code></em>);</pre>
165 <p>
166 Type-safe wrapper around g_signal_emit to emit the
167 ServicePointChanged signal on interface org.freedesktop.Telepathy.Channel.Interface.ServicePoint.
168 </p>
169 <div class="variablelist"><table border="0">
170 <col align="left" valign="top">
171 <tbody>
172 <tr>
173 <td><p><span class="term"><em class="parameter"><code>instance</code></em> :</span></p></td>
174 <td>The object implementing this interface
175 </td>
176 </tr>
177 <tr>
178 <td><p><span class="term"><em class="parameter"><code>arg_Service_Point</code></em> :</span></p></td>
179 <td>const GValueArray * (FIXME, generate documentation)
180 </td>
181 </tr>
182 </tbody>
183 </table></div>
184 </div>
185 </div>
186 <div class="refsect1" title="Signal Details">
187 <a name="telepathy-glib-svc-service-point.signal-details"></a><h2>Signal Details</h2>
188 <div class="refsect2" title='The "service-points-changed" signal'>
189 <a name="TpSvcConnectionInterfaceServicePoint-service-points-changed"></a><h3>The <code class="literal">"service-points-changed"</code> signal</h3>
190 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint"><span class="type">TpSvcConnectionInterfaceServicePoint</span></a> *arg_Service_Points,
191 <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>
192 <p>
193 The ServicePointsChanged D-Bus signal is emitted whenever this GObject signal is.
194 </p>
195 <div class="variablelist"><table border="0">
196 <col align="left" valign="top">
197 <tbody>
198 <tr>
199 <td><p><span class="term"><em class="parameter"><code>arg_Service_Points</code></em> :</span></p></td>
200 <td>const GPtrArray * (FIXME, generate documentation)
201 </td>
202 </tr>
203 <tr>
204 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
205 <td>user data set when the signal handler was connected.</td>
206 </tr>
207 </tbody>
208 </table></div>
209 </div>
210 <hr>
211 <div class="refsect2" title='The "service-point-changed" signal'>
212 <a name="TpSvcChannelInterfaceServicePoint-service-point-changed"></a><h3>The <code class="literal">"service-point-changed"</code> signal</h3>
213 <pre class="programlisting"><span class="returnvalue">void</span> user_function (<a class="link" href="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint"><span class="type">TpSvcChannelInterfaceServicePoint</span></a> *arg_Service_Point,
214 <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>
215 <p>
216 The ServicePointChanged D-Bus signal is emitted whenever this GObject signal is.
217 </p>
218 <div class="variablelist"><table border="0">
219 <col align="left" valign="top">
220 <tbody>
221 <tr>
222 <td><p><span class="term"><em class="parameter"><code>arg_Service_Point</code></em> :</span></p></td>
223 <td>const GValueArray * (FIXME, generate documentation)
224 </td>
225 </tr>
226 <tr>
227 <td><p><span class="term"><em class="parameter"><code>user_data</code></em> :</span></p></td>
228 <td>user data set when the signal handler was connected.</td>
229 </tr>
230 </tbody>
231 </table></div>
232 </div>
233 </div>
234 </div>
235 <div class="footer">
236 <hr>
237 Generated by GTK-Doc V1.15</div>
238 </body>
239 </html>
105105 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="telepathy-glib-util.html#tp-weak-ref-dup-object" title="tp_weak_ref_dup_object ()">tp_weak_ref_dup_object</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-util.html#TpWeakRef" title="TpWeakRef"><span class="type">TpWeakRef</span></a> *self</code></em>);
106106 <a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a> <a class="link" href="telepathy-glib-util.html#tp-weak-ref-get-user-data" title="tp_weak_ref_get_user_data ()">tp_weak_ref_get_user_data</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-util.html#TpWeakRef" title="TpWeakRef"><span class="type">TpWeakRef</span></a> *self</code></em>);
107107 <span class="returnvalue">void</span> <a class="link" href="telepathy-glib-util.html#tp-weak-ref-destroy" title="tp_weak_ref_destroy ()">tp_weak_ref_destroy</a> (<em class="parameter"><code><a class="link" href="telepathy-glib-util.html#TpWeakRef" title="TpWeakRef"><span class="type">TpWeakRef</span></a> *self</code></em>);
108 #define <a class="link" href="telepathy-glib-util.html#tp-clear-pointer" title="tp_clear_pointer()">tp_clear_pointer</a> (pp,
109 destroy)
110 #define <a class="link" href="telepathy-glib-util.html#tp-clear-object" title="tp_clear_object()">tp_clear_object</a> (op)
111 #define <a class="link" href="telepathy-glib-util.html#tp-clear-boxed" title="tp_clear_boxed()">tp_clear_boxed</a> (gtype,
112 pp)
108113 </pre>
109114 </div>
110115 <div class="refsect1" title="Description">
133138 (This is gnulib's verify macro, written by Paul Eggert, Bruno Haible and
134139 Jim Meyering.)
135140 </p>
141 <p>
142 This macro will be deprecated in a future telepathy-glib release. Please
143 use GLib 2.20's <a href="/usr/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html#G-STATIC-ASSERT:CAPS"><code class="function">G_STATIC_ASSERT()</code></a> macro in new code.
144 </p>
136145 <div class="variablelist"><table border="0">
137146 <col align="left" valign="top">
138147 <tbody><tr>
161170 (This is gnulib's verify_true macro, written by Paul Eggert, Bruno Haible
162171 and Jim Meyering.)
163172 </p>
173 <p>
174 This macro will be deprecated in a future telepathy-glib release. Please
175 use GLib 2.20's <a href="/usr/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html#G-STATIC-ASSERT:CAPS"><code class="function">G_STATIC_ASSERT()</code></a> macro in new code.
176 </p>
164177 <div class="variablelist"><table border="0">
165178 <col align="left" valign="top">
166179 <tbody>
192205 <p>
193206 This macro can be used anywhere that a statement would be allowed; it
194207 is equivalent to ((void) tp_verify_true (R)).
208 </p>
209 <p>
210 This macro will be deprecated in a future telepathy-glib release. Please
211 use GLib 2.20's <a href="/usr/share/gtk-doc/html/glib/glib-Miscellaneous-Macros.html#G-STATIC-ASSERT:CAPS"><code class="function">G_STATIC_ASSERT()</code></a> macro in new code.
195212 </p>
196213 <div class="variablelist"><table border="0">
197214 <col align="left" valign="top">
11241141 <p>
11251142 </p>
11261143 <div class="example">
1127 <a name="id1067127"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
1144 <a name="id1118350"></a><p class="title"><b>Example 2.  using tp_value_array_build</b></p>
11281145 <div class="example-contents">
11291146 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
11301147 <tbody>
11901207 <p>
11911208 </p>
11921209 <div class="example">
1193 <a name="id1067306"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
1210 <a name="id1118529"></a><p class="title"><b>Example 3. using tp_value_array_unpack</b></p>
11941211 <div class="example-contents">
11951212 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
11961213 <tbody>
13681385 </table></div>
13691386 <p class="since">Since 0.11.3</p>
13701387 </div>
1388 <hr>
1389 <div class="refsect2" title="tp_clear_pointer()">
1390 <a name="tp-clear-pointer"></a><h3>tp_clear_pointer()</h3>
1391 <pre class="programlisting">#define tp_clear_pointer(pp, destroy)</pre>
1392 <p>
1393 Set a variable holding a pointer to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. If it was not already <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>,
1394 unref or destroy the object it previously pointed to with <em class="parameter"><code>destroy</code></em>.
1395 </p>
1396 <p>
1397 More precisely, if both <em class="parameter"><code>pp</code></em> and *<em class="parameter"><code>pp</code></em> are non-<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, set *<em class="parameter"><code>pp</code></em> to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, then
1398 call <em class="parameter"><code>destroy</code></em> on the object that *<em class="parameter"><code>pp</code></em> previously pointed to.
1399 </p>
1400 <p>
1401 This is analogous to <a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#g-clear-error"><code class="function">g_clear_error()</code></a> for non-error objects, but also
1402 ensures that <em class="parameter"><code>pp</code></em> is already <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> before the destructor is run.
1403 </p>
1404 <p>
1405 Typical usage is something like this:
1406 </p>
1407 <p>
1408 </p>
1409 <div class="informalexample">
1410 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
1411 <tbody>
1412 <tr>
1413 <td class="listing_lines" align="right"><pre>1
1414 2
1415 3
1416 4
1417 5
1418 6
1419 7
1420 8
1421 9
1422 10
1423 11
1424 12
1425 13
1426 14</pre></td>
1427 <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwc">typedef</span> <span class="gtkdoc kwb">struct</span> <span class="symbol">{</span>
1428 TpConnection <span class="symbol">*</span>conn<span class="symbol">;</span>
1429 GError <span class="symbol">*</span>error<span class="symbol">;</span>
1430 GHashTable <span class="symbol">*</span>table<span class="symbol">;</span>
1431 MyStruct <span class="symbol">*</span>misc<span class="symbol">;</span>
1432 <span class="symbol">}</span> Foo<span class="symbol">;</span>
1433 Foo <span class="symbol">*</span>foo<span class="symbol">;</span>
1434
1435 <span class="symbol">...</span>
1436
1437 <span class="function"><a href="telepathy-glib-util.html#tp-clear-object">tp_clear_object</a></span> <span class="symbol">(&amp;</span>foo<span class="symbol">-&gt;</span>conn<span class="symbol">);</span>
1438 <span class="function"><a href="/usr/share/gtk-doc/html/glib/glib-Error-Reporting.html#g-clear-error">g_clear_error</a></span> <span class="symbol">(&amp;</span>foo<span class="symbol">-&gt;</span>error<span class="symbol">);</span>
1439 <span class="function"><a href="telepathy-glib-util.html#tp-clear-boxed">tp_clear_boxed</a></span> <span class="symbol">(</span>G_TYPE_HASH_TABLE<span class="symbol">, &amp;</span>foo<span class="symbol">-&gt;</span>table<span class="symbol">);</span>
1440 <span class="function"><a href="telepathy-glib-util.html#tp-clear-pointer">tp_clear_pointer</a></span> <span class="symbol">(&amp;</span>foo<span class="symbol">-&gt;</span>misc<span class="symbol">,</span> my_struct_destroy<span class="symbol">);</span></pre></td>
1441 </tr>
1442 </tbody>
1443 </table>
1444 </div>
1445
1446 <p>
1447 </p>
1448 <div class="variablelist"><table border="0">
1449 <col align="left" valign="top">
1450 <tbody>
1451 <tr>
1452 <td><p><span class="term"><em class="parameter"><code>pp</code></em> :</span></p></td>
1453 <td> a pointer to a variable, struct member etc. holding a
1454 pointer. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1455 </td>
1456 </tr>
1457 <tr>
1458 <td><p><span class="term"><em class="parameter"><code>destroy</code></em> :</span></p></td>
1459 <td>a function to which a gpointer can be passed, to destroy *<em class="parameter"><code>pp</code></em>
1460 (if calling this macro from C++, explicitly casting the function to
1461 <a href="/usr/share/gtk-doc/html/glib/glib-Datasets.html#GDestroyNotify"><span class="type">GDestroyNotify</span></a> may be necessary)
1462 </td>
1463 </tr>
1464 </tbody>
1465 </table></div>
1466 <p class="since">Since 0.11.7</p>
1467 </div>
1468 <hr>
1469 <div class="refsect2" title="tp_clear_object()">
1470 <a name="tp-clear-object"></a><h3>tp_clear_object()</h3>
1471 <pre class="programlisting">#define tp_clear_object(op) tp_clear_pointer ((op), g_object_unref)
1472 </pre>
1473 <p>
1474 Set a variable holding a <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a> to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. If it was not already <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>,
1475 unref the object it previously pointed to.
1476 </p>
1477 <p>
1478 This is exactly equivalent to calling <a class="link" href="telepathy-glib-util.html#tp-clear-pointer" title="tp_clear_pointer()"><code class="function">tp_clear_pointer()</code></a> on <em class="parameter"><code>op</code></em>,
1479 with <em class="parameter"><code>destroy</code></em> = <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#g-object-unref"><code class="function">g_object_unref()</code></a>. See <a class="link" href="telepathy-glib-util.html#tp-clear-pointer" title="tp_clear_pointer()"><code class="function">tp_clear_pointer()</code></a> for example usage.
1480 </p>
1481 <div class="variablelist"><table border="0">
1482 <col align="left" valign="top">
1483 <tbody><tr>
1484 <td><p><span class="term"><em class="parameter"><code>op</code></em> :</span></p></td>
1485 <td> a pointer to a variable, struct member etc. holding a
1486 <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject"><span class="type">GObject</span></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1487 </td>
1488 </tr></tbody>
1489 </table></div>
1490 <p class="since">Since 0.11.7</p>
1491 </div>
1492 <hr>
1493 <div class="refsect2" title="tp_clear_boxed()">
1494 <a name="tp-clear-boxed"></a><h3>tp_clear_boxed()</h3>
1495 <pre class="programlisting">#define tp_clear_boxed(gtype, pp)</pre>
1496 <p>
1497 Set a variable holding a boxed object to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>. If it was not already <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>,
1498 destroy the boxed object it previously pointed to, as appropriate for
1499 <em class="parameter"><code>gtype</code></em>.
1500 </p>
1501 <p>
1502 More precisely, if both <em class="parameter"><code>pp</code></em> and *<em class="parameter"><code>pp</code></em> are non-<a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, set *<em class="parameter"><code>pp</code></em> to <a href="/usr/share/gtk-doc/html/glib/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, then
1503 call <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#g-boxed-free"><code class="function">g_boxed_free()</code></a> on the object that *<em class="parameter"><code>pp</code></em> previously pointed to.
1504 </p>
1505 <p>
1506 This is similar to <a class="link" href="telepathy-glib-util.html#tp-clear-pointer" title="tp_clear_pointer()"><code class="function">tp_clear_pointer()</code></a>; see that function's documentation
1507 for typical usage.
1508 </p>
1509 <div class="variablelist"><table border="0">
1510 <col align="left" valign="top">
1511 <tbody>
1512 <tr>
1513 <td><p><span class="term"><em class="parameter"><code>gtype</code></em> :</span></p></td>
1514 <td> the <a href="/usr/share/gtk-doc/html/gobject/gobject-Type-Information.html#GType"><span class="type">GType</span></a> of *<em class="parameter"><code>pp</code></em>, e.g. <a href="/usr/share/gtk-doc/html/gobject/gobject-Boxed-Types.html#G-TYPE-HASH-TABLE:CAPS"><code class="literal">G_TYPE_HASH_TABLE</code></a>. <span class="annotation">[type GObject.Type]</span>
1515 </td>
1516 </tr>
1517 <tr>
1518 <td><p><span class="term"><em class="parameter"><code>pp</code></em> :</span></p></td>
1519 <td> a pointer to a variable, struct member etc. holding a
1520 boxed object. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
1521 </td>
1522 </tr>
1523 </tbody>
1524 </table></div>
1525 <p class="since">Since 0.11.7</p>
1526 </div>
13711527 </div>
13721528 </div>
13731529 <div class="footer">
4141 <sub name="Tubes channels" link="telepathy-glib-channel-tubes.html"/>
4242 <sub name="Tube channels" link="telepathy-glib-channel-tube.html"/>
4343 <sub name="Room List channels" link="telepathy-glib-channel-roomlist.html"/>
44 <sub name="Connection and Channel Anonymity interfaces" link="telepathy-glib-cli-anonymity.html"/>
45 <sub name="Connection and Channel ServicePoint interfaces" link="telepathy-glib-cli-service-point.html"/>
4446 <sub name="TpMediaSessionHandler, TpMediaStreamHandler" link="telepathy-glib-media-interfaces.html"/>
4547 <sub name="TpAccountManager" link="telepathy-glib-account-manager.html"/>
4648 <sub name="TpAccount" link="telepathy-glib-account.html"/>
6365 <sub name="Room List channels" link="telepathy-glib-svc-channel-roomlist.html"/>
6466 <sub name="Service-side Debug base interface" link="telepathy-glib-svc-debug.html"/>
6567 <sub name="Service-side Connection interfaces" link="telepathy-glib-svc-connection.html"/>
68 <sub name="Service-side Connection and Channel Anonymity interfaces" link="telepathy-glib-svc-anonymity.html"/>
69 <sub name="Service-side Connection and Channel ServicePoint interfaces" link="telepathy-glib-svc-service-point.html"/>
6670 <sub name="Service-side media streaming helper interfaces" link="telepathy-glib-svc-media-interfaces.html"/>
6771 <sub name="Service-side Connection Manager interface" link="telepathy-glib-svc-connection-manager.html"/>
6872 <sub name="Service-side Account Manager interface" link="telepathy-glib-svc-account-manager.html"/>
341345 <function name="TP_IFACE_QUARK_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS"/>
342346 <function name="TP_IFACE_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS"/>
343347 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ALIASING:CAPS"/>
348 <function name="TP_IFACE_CONNECTION_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS"/>
349 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS"/>
344350 <function name="TP_IFACE_CONNECTION_INTERFACE_AVATARS" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS"/>
345351 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-AVATARS:CAPS"/>
346352 <function name="TP_IFACE_CONNECTION_INTERFACE_BALANCE" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-BALANCE:CAPS"/>
361367 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_PRESENCE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-PRESENCE:CAPS"/>
362368 <function name="TP_IFACE_CONNECTION_INTERFACE_LOCATION" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-LOCATION:CAPS"/>
363369 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_LOCATION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-LOCATION:CAPS"/>
370 <function name="TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"/>
371 <function name="TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"/>
364372 <function name="TP_IFACE_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL:CAPS"/>
365373 <function name="TP_IFACE_QUARK_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS"/>
366374 <function name="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
381389 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-TUBE:CAPS"/>
382390 <function name="TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-DBUS-TUBE:CAPS"/>
383391 <function name="TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-STREAM-TUBE:CAPS"/>
392 <function name="TP_IFACE_CHANNEL_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS"/>
393 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS"/>
384394 <function name="TP_IFACE_CHANNEL_INTERFACE_CALL_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS"/>
385395 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_CALL_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-CALL-STATE:CAPS"/>
386396 <function name="TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CHAT-STATE:CAPS"/>
399409 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_MEDIA_SIGNALLING" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MEDIA-SIGNALLING:CAPS"/>
400410 <function name="TP_IFACE_CHANNEL_INTERFACE_MESSAGES" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-MESSAGES:CAPS"/>
401411 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_MESSAGES" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MESSAGES:CAPS"/>
412 <function name="TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"/>
413 <function name="TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"/>
402414 <function name="TP_IFACE_CHANNEL_DISPATCHER" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER:CAPS"/>
403415 <function name="TP_IFACE_QUARK_CHANNEL_DISPATCHER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-DISPATCHER:CAPS"/>
404416 <function name="TP_IFACE_CHANNEL_DISPATCHER_INTERFACE_OPERATION_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER-INTERFACE-OPERATION-LIST:CAPS"/>
426438 <function name="TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS"/>
427439 <function name="TP_PROP_ACCOUNT_CHANGING_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS"/>
428440 <function name="TP_PROP_ACCOUNT_CONNECTION" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS"/>
441 <function name="TP_PROP_ACCOUNT_CONNECTION_ERROR" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS"/>
442 <function name="TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS"/>
429443 <function name="TP_PROP_ACCOUNT_CONNECTION_STATUS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS"/>
430444 <function name="TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS"/>
431445 <function name="TP_PROP_ACCOUNT_CONNECT_AUTOMATICALLY" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECT-AUTOMATICALLY:CAPS"/>
456470 <function name="TP_PROP_CHANNEL_INITIATOR_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS"/>
457471 <function name="TP_PROP_CHANNEL_INITIATOR_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS"/>
458472 <function name="TP_PROP_CHANNEL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS"/>
473 <function name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"/>
474 <function name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"/>
475 <function name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS"/>
476 <function name="TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS"/>
459477 <function name="TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-CURRENTLY-SENDING-TONES:CAPS"/>
460478 <function name="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS"/>
461479 <function name="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS"/>
468486 <function name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_MESSAGE_PART_SUPPORT_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-MESSAGE-PART-SUPPORT-FLAGS:CAPS"/>
469487 <function name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_PENDING_MESSAGES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-PENDING-MESSAGES:CAPS"/>
470488 <function name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_SUPPORTED_CONTENT_TYPES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-SUPPORTED-CONTENT-TYPES:CAPS"/>
489 <function name="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS"/>
490 <function name="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS"/>
471491 <function name="TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS"/>
472492 <function name="TP_PROP_CHANNEL_INTERFACE_TUBE_STATE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-STATE:CAPS"/>
473493 <function name="TP_PROP_CHANNEL_REQUESTED" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-REQUESTED:CAPS"/>
507527 <function name="TP_PROP_CLIENT_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-INTERFACES:CAPS"/>
508528 <function name="TP_PROP_CLIENT_OBSERVER_OBSERVER_CHANNEL_FILTER" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-OBSERVER-CHANNEL-FILTER:CAPS"/>
509529 <function name="TP_PROP_CLIENT_OBSERVER_RECOVER" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-RECOVER:CAPS"/>
530 <function name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"/>
531 <function name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"/>
532 <function name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS"/>
510533 <function name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS"/>
511534 <function name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_HEIGHT" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-HEIGHT:CAPS"/>
512535 <function name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_WIDTH" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-WIDTH:CAPS"/>
524547 <function name="TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-LOCATION-SUPPORTED-LOCATION-FEATURES:CAPS"/>
525548 <function name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS"/>
526549 <function name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-REQUESTABLE-CHANNEL-CLASSES:CAPS"/>
550 <function name="TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS"/>
527551 <function name="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS"/>
528552 <function name="TP_PROP_CONNECTION_MANAGER_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-MANAGER-INTERFACES:CAPS"/>
529553 <function name="TP_PROP_CONNECTION_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACES:CAPS"/>
618642 <function name="enum TpContactInfoFlags" link="telepathy-glib-enums.html#TpContactInfoFlags"/>
619643 <function name="enum TpContactInfoFieldFlags" link="telepathy-glib-enums.html#TpContactInfoFieldFlags"/>
620644 <function name="enum TpLocationFeatures" link="telepathy-glib-enums.html#TpLocationFeatures"/>
645 <function name="enum TpServicePointType" link="telepathy-glib-enums.html#TpServicePointType"/>
646 <function name="NUM_TP_SERVICE_POINT_TYPES" link="telepathy-glib-enums.html#NUM-TP-SERVICE-POINT-TYPES:CAPS"/>
647 <function name="enum TpAnonymityModeFlags" link="telepathy-glib-enums.html#TpAnonymityModeFlags"/>
621648 <function name="TP_ERROR_PREFIX" link="telepathy-glib-errors.html#TP-ERROR-PREFIX:CAPS"/>
622649 <function name="TP_ERRORS" link="telepathy-glib-errors.html#TP-ERRORS:CAPS"/>
623650 <function name="TP_TYPE_ERROR" link="telepathy-glib-errors.html#TP-TYPE-ERROR:CAPS"/>
663690 <function name="TP_ERROR_STR_REGISTRATION_EXISTS" link="telepathy-glib-errors.html#TP-ERROR-STR-REGISTRATION-EXISTS:CAPS"/>
664691 <function name="TP_ERROR_STR_SERVICE_BUSY" link="telepathy-glib-errors.html#TP-ERROR-STR-SERVICE-BUSY:CAPS"/>
665692 <function name="TP_ERROR_STR_RESOURCE_UNAVAILABLE" link="telepathy-glib-errors.html#TP-ERROR-STR-RESOURCE-UNAVAILABLE:CAPS"/>
693 <function name="TP_ERROR_STR_WOULD_BREAK_ANONYMITY" link="telepathy-glib-errors.html#TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS"/>
666694 <function name="tp_dbus_specialized_value_slice_new ()" link="telepathy-glib-gtypes.html#tp-dbus-specialized-value-slice-new"/>
667695 <function name="TP_TYPE_UCHAR_ARRAY" link="telepathy-glib-gtypes.html#TP-TYPE-UCHAR-ARRAY:CAPS"/>
668696 <function name="TP_ARRAY_TYPE_OBJECT_PATH_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-OBJECT-PATH-LIST:CAPS"/>
731759 <function name="TP_HASH_TYPE_MESSAGE_PART" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART:CAPS"/>
732760 <function name="TP_ARRAY_TYPE_MESSAGE_PART_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-MESSAGE-PART-LIST:CAPS"/>
733761 <function name="TP_HASH_TYPE_MESSAGE_PART_CONTENT_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART-CONTENT-MAP:CAPS"/>
762 <function name="TP_HASH_TYPE_CHAT_STATE_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHAT-STATE-MAP:CAPS"/>
734763 <function name="TP_HASH_TYPE_SUPPORTED_SOCKET_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS"/>
735764 <function name="TP_STRUCT_TYPE_TUBE_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-TUBE-INFO:CAPS"/>
736765 <function name="TP_ARRAY_TYPE_TUBE_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-TUBE-INFO-LIST:CAPS"/>
756785 <function name="TP_HASH_TYPE_CHANNEL_CALL_STATE_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CALL-STATE-MAP:CAPS"/>
757786 <function name="TP_ARRAY_TYPE_ROOM_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-ROOM-INFO-LIST:CAPS"/>
758787 <function name="TP_STRUCT_TYPE_ROOM_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-ROOM-INFO:CAPS"/>
788 <function name="TP_STRUCT_TYPE_SERVICE_POINT" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS"/>
789 <function name="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS"/>
790 <function name="TP_STRUCT_TYPE_SERVICE_POINT_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS"/>
759791 <function name="TP_STRUCT_TYPE_AVATAR" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS"/>
760792 <function name="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS"/>
761793 <function name="TP_ARRAY_TYPE_DISPATCH_OPERATION_DETAILS_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS"/>
833865 <function name="TP_CONNECTION_FEATURE_CONNECTED" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONNECTED:CAPS"/>
834866 <function name="TP_CONNECTION_FEATURE_CAPABILITIES" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CAPABILITIES:CAPS"/>
835867 <function name="TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-AVATAR-REQUIREMENTS:CAPS"/>
868 <function name="TP_CONNECTION_FEATURE_CONTACT_INFO" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS"/>
836869 <function name="tp_connection_run_until_ready ()" link="telepathy-glib-connection.html#tp-connection-run-until-ready"/>
837870 <function name="TpConnectionWhenReadyCb ()" link="telepathy-glib-connection.html#TpConnectionWhenReadyCb"/>
838871 <function name="tp_connection_call_when_ready ()" link="telepathy-glib-connection.html#tp-connection-call-when-ready"/>
850883 <function name="tp_connection_parse_object_path ()" link="telepathy-glib-connection.html#tp-connection-parse-object-path"/>
851884 <function name="tp_connection_get_capabilities ()" link="telepathy-glib-connection.html#tp-connection-get-capabilities"/>
852885 <function name="tp_connection_get_avatar_requirements ()" link="telepathy-glib-connection.html#tp-connection-get-avatar-requirements"/>
886 <function name="tp_connection_get_contact_info_flags ()" link="telepathy-glib-connection.html#tp-connection-get-contact-info-flags"/>
887 <function name="tp_connection_get_contact_info_supported_fields ()" link="telepathy-glib-connection.html#tp-connection-get-contact-info-supported-fields"/>
888 <function name="tp_connection_set_contact_info_async ()" link="telepathy-glib-connection.html#tp-connection-set-contact-info-async"/>
889 <function name="tp_connection_set_contact_info_finish ()" link="telepathy-glib-connection.html#tp-connection-set-contact-info-finish"/>
853890 <function name="TP_UNKNOWN_CONNECTION_STATUS" link="telepathy-glib-connection.html#TP-UNKNOWN-CONNECTION-STATUS:CAPS"/>
854891 <function name="TP_ERRORS_DISCONNECTED" link="telepathy-glib-connection.html#TP-ERRORS-DISCONNECTED:CAPS"/>
855892 <function name="tp_connection_get_detailed_error ()" link="telepathy-glib-connection.html#tp-connection-get-detailed-error"/>
858895 <function name="tp_avatar_requirements_new ()" link="telepathy-glib-connection.html#tp-avatar-requirements-new"/>
859896 <function name="tp_avatar_requirements_copy ()" link="telepathy-glib-connection.html#tp-avatar-requirements-copy"/>
860897 <function name="tp_avatar_requirements_destroy ()" link="telepathy-glib-connection.html#tp-avatar-requirements-destroy"/>
898 <function name="TpContactInfoFieldSpec" link="telepathy-glib-connection.html#TpContactInfoFieldSpec"/>
899 <function name="TP_TYPE_CONTACT_INFO_FIELD_SPEC" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS"/>
900 <function name="tp_contact_info_field_spec_copy ()" link="telepathy-glib-connection.html#tp-contact-info-field-spec-copy"/>
901 <function name="tp_contact_info_field_spec_free ()" link="telepathy-glib-connection.html#tp-contact-info-field-spec-free"/>
902 <function name="TP_TYPE_CONTACT_INFO_SPEC_LIST" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS"/>
903 <function name="tp_contact_info_spec_list_copy ()" link="telepathy-glib-connection.html#tp-contact-info-spec-list-copy"/>
904 <function name="tp_contact_info_spec_list_free ()" link="telepathy-glib-connection.html#tp-contact-info-spec-list-free"/>
905 <function name="TpContactInfoField" link="telepathy-glib-connection.html#TpContactInfoField"/>
906 <function name="TP_TYPE_CONTACT_INFO_FIELD" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD:CAPS"/>
907 <function name="tp_contact_info_field_new ()" link="telepathy-glib-connection.html#tp-contact-info-field-new"/>
908 <function name="tp_contact_info_field_copy ()" link="telepathy-glib-connection.html#tp-contact-info-field-copy"/>
909 <function name="tp_contact_info_field_free ()" link="telepathy-glib-connection.html#tp-contact-info-field-free"/>
910 <function name="TP_TYPE_CONTACT_INFO_LIST" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-LIST:CAPS"/>
911 <function name="tp_contact_info_list_copy ()" link="telepathy-glib-connection.html#tp-contact-info-list-copy"/>
912 <function name="tp_contact_info_list_free ()" link="telepathy-glib-connection.html#tp-contact-info-list-free"/>
861913 <function name="tp_cli_connection_callback_for_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-callback-for-connect"/>
862914 <function name="tp_cli_connection_call_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-call-connect"/>
863915 <function name="tp_cli_connection_run_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-run-connect"/>
916968 <function name="tp_connection_get_contacts_by_id ()" link="telepathy-glib-contact.html#tp-connection-get-contacts-by-id"/>
917969 <function name="TpConnectionUpgradeContactsCb ()" link="telepathy-glib-contact.html#TpConnectionUpgradeContactsCb"/>
918970 <function name="tp_connection_upgrade_contacts ()" link="telepathy-glib-contact.html#tp-connection-upgrade-contacts"/>
971 <function name="tp_connection_refresh_contact_info ()" link="telepathy-glib-contact.html#tp-connection-refresh-contact-info"/>
919972 <function name="tp_contact_get_alias ()" link="telepathy-glib-contact.html#tp-contact-get-alias"/>
920973 <function name="tp_contact_get_avatar_token ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-token"/>
921974 <function name="tp_contact_get_avatar_file ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-file"/>
928981 <function name="tp_contact_get_presence_type ()" link="telepathy-glib-contact.html#tp-contact-get-presence-type"/>
929982 <function name="tp_contact_get_location ()" link="telepathy-glib-contact.html#tp-contact-get-location"/>
930983 <function name="tp_contact_get_capabilities ()" link="telepathy-glib-contact.html#tp-contact-get-capabilities"/>
984 <function name="tp_contact_get_contact_info ()" link="telepathy-glib-contact.html#tp-contact-get-contact-info"/>
985 <function name="tp_contact_request_contact_info_async ()" link="telepathy-glib-contact.html#tp-contact-request-contact-info-async"/>
986 <function name="tp_contact_request_contact_info_finish ()" link="telepathy-glib-contact.html#tp-contact-request-contact-info-finish"/>
931987 <function name="tp_contact_has_feature ()" link="telepathy-glib-contact.html#tp-contact-has-feature"/>
932988 <function name="The &quot;alias&quot; property" link="telepathy-glib-contact.html#TpContact--alias"/>
933989 <function name="The &quot;avatar-file&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-file"/>
935991 <function name="The &quot;avatar-token&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-token"/>
936992 <function name="The &quot;capabilities&quot; property" link="telepathy-glib-contact.html#TpContact--capabilities"/>
937993 <function name="The &quot;connection&quot; property" link="telepathy-glib-contact.html#TpContact--connection"/>
994 <function name="The &quot;contact-info&quot; property" link="telepathy-glib-contact.html#TpContact--contact-info"/>
938995 <function name="The &quot;handle&quot; property" link="telepathy-glib-contact.html#TpContact--handle"/>
939996 <function name="The &quot;identifier&quot; property" link="telepathy-glib-contact.html#TpContact--identifier"/>
940997 <function name="The &quot;location&quot; property" link="telepathy-glib-contact.html#TpContact--location"/>
941998 <function name="The &quot;presence-message&quot; property" link="telepathy-glib-contact.html#TpContact--presence-message"/>
942999 <function name="The &quot;presence-status&quot; property" link="telepathy-glib-contact.html#TpContact--presence-status"/>
9431000 <function name="The &quot;presence-type&quot; property" link="telepathy-glib-contact.html#TpContact--presence-type"/>
1001 <function name="The &quot;presence-changed&quot; signal" link="telepathy-glib-contact.html#TpContact-presence-changed"/>
9441002 <function name="TpCapabilities" link="telepathy-glib-capabilities.html#TpCapabilities-struct"/>
9451003 <function name="tp_capabilities_get_channel_classes ()" link="telepathy-glib-capabilities.html#tp-capabilities-get-channel-classes"/>
9461004 <function name="tp_capabilities_is_specific_to_contact ()" link="telepathy-glib-capabilities.html#tp-capabilities-is-specific-to-contact"/>
13541412 <function name="tp_cli_channel_type_room_list_connect_to_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-connect-to-listing-rooms"/>
13551413 <function name="tp_cli_channel_type_room_list_signal_callback_got_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms"/>
13561414 <function name="tp_cli_channel_type_room_list_signal_callback_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms"/>
1415 <function name="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed"/>
1416 <function name="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed"/>
1417 <function name="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed"/>
1418 <function name="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed"/>
1419 <function name="tp_cli_connection_interface_service_point_connect_to_service_points_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-connect-to-service-points-changed"/>
1420 <function name="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed"/>
13571421 <function name="tp_media_session_handler_new ()" link="telepathy-glib-media-interfaces.html#tp-media-session-handler-new"/>
13581422 <function name="tp_media_session_handler_init_known_interfaces ()" link="telepathy-glib-media-interfaces.html#tp-media-session-handler-init-known-interfaces"/>
13591423 <function name="TpMediaSessionHandler" link="telepathy-glib-media-interfaces.html#TpMediaSessionHandler-struct"/>
14871551 <function name="tp_account_set_connect_automatically_finish ()" link="telepathy-glib-account.html#tp-account-set-connect-automatically-finish"/>
14881552 <function name="tp_account_get_has_been_online ()" link="telepathy-glib-account.html#tp-account-get-has-been-online"/>
14891553 <function name="tp_account_get_connection_status ()" link="telepathy-glib-account.html#tp-account-get-connection-status"/>
1554 <function name="tp_account_get_detailed_error ()" link="telepathy-glib-account.html#tp-account-get-detailed-error"/>
14901555 <function name="tp_account_get_changing_presence ()" link="telepathy-glib-account.html#tp-account-get-changing-presence"/>
14911556 <function name="tp_account_get_current_presence ()" link="telepathy-glib-account.html#tp-account-get-current-presence"/>
14921557 <function name="tp_account_get_requested_presence ()" link="telepathy-glib-account.html#tp-account-get-requested-presence"/>
15171582 <function name="The &quot;changing-presence&quot; property" link="telepathy-glib-account.html#TpAccount--changing-presence"/>
15181583 <function name="The &quot;connect-automatically&quot; property" link="telepathy-glib-account.html#TpAccount--connect-automatically"/>
15191584 <function name="The &quot;connection&quot; property" link="telepathy-glib-account.html#TpAccount--connection"/>
1585 <function name="The &quot;connection-error&quot; property" link="telepathy-glib-account.html#TpAccount--connection-error"/>
1586 <function name="The &quot;connection-error-details&quot; property" link="telepathy-glib-account.html#TpAccount--connection-error-details"/>
15201587 <function name="The &quot;connection-manager&quot; property" link="telepathy-glib-account.html#TpAccount--connection-manager"/>
15211588 <function name="The &quot;connection-status&quot; property" link="telepathy-glib-account.html#TpAccount--connection-status"/>
15221589 <function name="The &quot;connection-status-reason&quot; property" link="telepathy-glib-account.html#TpAccount--connection-status-reason"/>
15691636 <function name="tp_channel_dispatch_operation_borrow_possible_handlers ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-borrow-possible-handlers"/>
15701637 <function name="tp_channel_dispatch_operation_handle_with_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-async"/>
15711638 <function name="tp_channel_dispatch_operation_handle_with_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-finish"/>
1639 <function name="tp_channel_dispatch_operation_handle_with_time_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-async"/>
1640 <function name="tp_channel_dispatch_operation_handle_with_time_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-finish"/>
15721641 <function name="tp_channel_dispatch_operation_claim_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-async"/>
15731642 <function name="tp_channel_dispatch_operation_claim_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-claim-finish"/>
15741643 <function name="The &quot;account&quot; property" link="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--account"/>
21242193 <function name="The &quot;contact-capabilities-changed&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceContactCapabilities-contact-capabilities-changed"/>
21252194 <function name="The &quot;location-updated&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceLocation-location-updated"/>
21262195 <function name="The &quot;contact-info-changed&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceContactInfo-contact-info-changed"/>
2196 <function name="TpSvcConnectionInterfaceAnonymity" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-struct"/>
2197 <function name="TpSvcConnectionInterfaceAnonymityClass" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymityClass"/>
2198 <function name="tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ()" link="telepathy-glib-svc-anonymity.html#tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed"/>
2199 <function name="TpSvcChannelInterfaceAnonymity" link="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymity-struct"/>
2200 <function name="TpSvcChannelInterfaceAnonymityClass" link="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymityClass"/>
2201 <function name="The &quot;anonymity-modes-changed&quot; signal" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed"/>
2202 <function name="TpSvcConnectionInterfaceServicePoint" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-struct"/>
2203 <function name="TpSvcConnectionInterfaceServicePointClass" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePointClass"/>
2204 <function name="tp_svc_connection_interface_service_point_emit_service_points_changed ()" link="telepathy-glib-svc-service-point.html#tp-svc-connection-interface-service-point-emit-service-points-changed"/>
2205 <function name="TpSvcChannelInterfaceServicePoint" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-struct"/>
2206 <function name="TpSvcChannelInterfaceServicePointClass" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePointClass"/>
2207 <function name="tp_svc_channel_interface_service_point_emit_service_point_changed ()" link="telepathy-glib-svc-service-point.html#tp-svc-channel-interface-service-point-emit-service-point-changed"/>
2208 <function name="The &quot;service-points-changed&quot; signal" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-service-points-changed"/>
2209 <function name="The &quot;service-point-changed&quot; signal" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-service-point-changed"/>
21272210 <function name="TpSvcMediaSessionHandler" link="telepathy-glib-svc-media-interfaces.html#TpSvcMediaSessionHandler-struct"/>
21282211 <function name="TpSvcMediaSessionHandlerClass" link="telepathy-glib-svc-media-interfaces.html#TpSvcMediaSessionHandlerClass"/>
21292212 <function name="tp_svc_media_session_handler_error_impl ()" link="telepathy-glib-svc-media-interfaces.html#tp-svc-media-session-handler-error-impl"/>
26642747 <function name="TP_TYPE_HANDLE_SET" link="telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS"/>
26652748 <function name="TpHandleSetMemberFunc ()" link="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc"/>
26662749 <function name="tp_handle_set_new ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new"/>
2750 <function name="tp_handle_set_new_from_array ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new-from-array"/>
26672751 <function name="tp_handle_set_copy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-copy"/>
26682752 <function name="tp_handle_set_clear ()" link="telepathy-glib-handle-repo.html#tp-handle-set-clear"/>
26692753 <function name="tp_handle_set_destroy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-destroy"/>
27272811 <function name="tp_weak_ref_dup_object ()" link="telepathy-glib-util.html#tp-weak-ref-dup-object"/>
27282812 <function name="tp_weak_ref_get_user_data ()" link="telepathy-glib-util.html#tp-weak-ref-get-user-data"/>
27292813 <function name="tp_weak_ref_destroy ()" link="telepathy-glib-util.html#tp-weak-ref-destroy"/>
2814 <function name="tp_clear_pointer()" link="telepathy-glib-util.html#tp-clear-pointer"/>
2815 <function name="tp_clear_object()" link="telepathy-glib-util.html#tp-clear-object"/>
2816 <function name="tp_clear_boxed()" link="telepathy-glib-util.html#tp-clear-boxed"/>
27302817 <function name="tp_g_socket_address_from_variant ()" link="telepathy-glib-gnio-util.html#tp-g-socket-address-from-variant"/>
27312818 <function name="tp_address_variant_from_g_socket_address ()" link="telepathy-glib-gnio-util.html#tp-address-variant-from-g-socket-address"/>
27322819 <function name="TP_ANSI_RESET" link="telepathy-glib-debug-ansi.html#TP-ANSI-RESET:CAPS"/>
4141 <sub name="Tubes channels" link="telepathy-glib-channel-tubes.html"/>
4242 <sub name="Tube channels" link="telepathy-glib-channel-tube.html"/>
4343 <sub name="Room List channels" link="telepathy-glib-channel-roomlist.html"/>
44 <sub name="Connection and Channel Anonymity interfaces" link="telepathy-glib-cli-anonymity.html"/>
45 <sub name="Connection and Channel ServicePoint interfaces" link="telepathy-glib-cli-service-point.html"/>
4446 <sub name="TpMediaSessionHandler, TpMediaStreamHandler" link="telepathy-glib-media-interfaces.html"/>
4547 <sub name="TpAccountManager" link="telepathy-glib-account-manager.html"/>
4648 <sub name="TpAccount" link="telepathy-glib-account.html"/>
6365 <sub name="Room List channels" link="telepathy-glib-svc-channel-roomlist.html"/>
6466 <sub name="Service-side Debug base interface" link="telepathy-glib-svc-debug.html"/>
6567 <sub name="Service-side Connection interfaces" link="telepathy-glib-svc-connection.html"/>
68 <sub name="Service-side Connection and Channel Anonymity interfaces" link="telepathy-glib-svc-anonymity.html"/>
69 <sub name="Service-side Connection and Channel ServicePoint interfaces" link="telepathy-glib-svc-service-point.html"/>
6670 <sub name="Service-side media streaming helper interfaces" link="telepathy-glib-svc-media-interfaces.html"/>
6771 <sub name="Service-side Connection Manager interface" link="telepathy-glib-svc-connection-manager.html"/>
6872 <sub name="Service-side Account Manager interface" link="telepathy-glib-svc-account-manager.html"/>
341345 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION:CAPS"/>
342346 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ALIASING:CAPS"/>
343347 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ALIASING:CAPS"/>
348 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-ANONYMITY:CAPS"/>
349 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-ANONYMITY:CAPS"/>
344350 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_AVATARS" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-AVATARS:CAPS"/>
345351 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-AVATARS:CAPS"/>
346352 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_BALANCE" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-BALANCE:CAPS"/>
361367 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_PRESENCE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-PRESENCE:CAPS"/>
362368 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_LOCATION" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-LOCATION:CAPS"/>
363369 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_LOCATION" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-LOCATION:CAPS"/>
370 <keyword type="macro" name="TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"/>
371 <keyword type="macro" name="TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CONNECTION-INTERFACE-SERVICE-POINT:CAPS"/>
364372 <keyword type="macro" name="TP_IFACE_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL:CAPS"/>
365373 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL:CAPS"/>
366374 <keyword type="macro" name="TP_IFACE_CHANNEL_TYPE_CONTACT_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-TYPE-CONTACT-LIST:CAPS"/>
381389 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-TUBE:CAPS"/>
382390 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-DBUS-TUBE:CAPS"/>
383391 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-TYPE-STREAM-TUBE:CAPS"/>
392 <keyword type="macro" name="TP_IFACE_CHANNEL_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-ANONYMITY:CAPS"/>
393 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-ANONYMITY:CAPS"/>
384394 <keyword type="macro" name="TP_IFACE_CHANNEL_INTERFACE_CALL_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CALL-STATE:CAPS"/>
385395 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_CALL_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-CALL-STATE:CAPS"/>
386396 <keyword type="macro" name="TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-CHAT-STATE:CAPS"/>
399409 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_MEDIA_SIGNALLING" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MEDIA-SIGNALLING:CAPS"/>
400410 <keyword type="macro" name="TP_IFACE_CHANNEL_INTERFACE_MESSAGES" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-MESSAGES:CAPS"/>
401411 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_MESSAGES" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-MESSAGES:CAPS"/>
412 <keyword type="macro" name="TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"/>
413 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-INTERFACE-SERVICE-POINT:CAPS"/>
402414 <keyword type="macro" name="TP_IFACE_CHANNEL_DISPATCHER" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER:CAPS"/>
403415 <keyword type="macro" name="TP_IFACE_QUARK_CHANNEL_DISPATCHER" link="telepathy-glib-interfaces.html#TP-IFACE-QUARK-CHANNEL-DISPATCHER:CAPS"/>
404416 <keyword type="macro" name="TP_IFACE_CHANNEL_DISPATCHER_INTERFACE_OPERATION_LIST" link="telepathy-glib-interfaces.html#TP-IFACE-CHANNEL-DISPATCHER-INTERFACE-OPERATION-LIST:CAPS"/>
426438 <keyword type="macro" name="TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-AUTOMATIC-PRESENCE:CAPS"/>
427439 <keyword type="macro" name="TP_PROP_ACCOUNT_CHANGING_PRESENCE" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CHANGING-PRESENCE:CAPS"/>
428440 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION:CAPS"/>
441 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_ERROR" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR:CAPS"/>
442 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-ERROR-DETAILS:CAPS"/>
429443 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_STATUS" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS:CAPS"/>
430444 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECTION-STATUS-REASON:CAPS"/>
431445 <keyword type="macro" name="TP_PROP_ACCOUNT_CONNECT_AUTOMATICALLY" link="telepathy-glib-interfaces.html#TP-PROP-ACCOUNT-CONNECT-AUTOMATICALLY:CAPS"/>
456470 <keyword type="macro" name="TP_PROP_CHANNEL_INITIATOR_HANDLE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-HANDLE:CAPS"/>
457471 <keyword type="macro" name="TP_PROP_CHANNEL_INITIATOR_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INITIATOR-ID:CAPS"/>
458472 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACES:CAPS"/>
473 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"/>
474 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"/>
475 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-ANONYMITY-ANONYMOUS-ID:CAPS"/>
476 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-CHAT-STATE-CHAT-STATES:CAPS"/>
459477 <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"/>
460478 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-DTMF-INITIAL-TONES:CAPS"/>
461479 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-GROUP-GROUP-FLAGS:CAPS"/>
468486 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_MESSAGE_PART_SUPPORT_FLAGS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-MESSAGE-PART-SUPPORT-FLAGS:CAPS"/>
469487 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_PENDING_MESSAGES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-PENDING-MESSAGES:CAPS"/>
470488 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_MESSAGES_SUPPORTED_CONTENT_TYPES" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-MESSAGES-SUPPORTED-CONTENT-TYPES:CAPS"/>
489 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-CURRENT-SERVICE-POINT:CAPS"/>
490 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-SERVICE-POINT-INITIAL-SERVICE-POINT:CAPS"/>
471491 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-PARAMETERS:CAPS"/>
472492 <keyword type="macro" name="TP_PROP_CHANNEL_INTERFACE_TUBE_STATE" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-INTERFACE-TUBE-STATE:CAPS"/>
473493 <keyword type="macro" name="TP_PROP_CHANNEL_REQUESTED" link="telepathy-glib-interfaces.html#TP-PROP-CHANNEL-REQUESTED:CAPS"/>
507527 <keyword type="macro" name="TP_PROP_CLIENT_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-INTERFACES:CAPS"/>
508528 <keyword type="macro" name="TP_PROP_CLIENT_OBSERVER_OBSERVER_CHANNEL_FILTER" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-OBSERVER-CHANNEL-FILTER:CAPS"/>
509529 <keyword type="macro" name="TP_PROP_CLIENT_OBSERVER_RECOVER" link="telepathy-glib-interfaces.html#TP-PROP-CLIENT-OBSERVER-RECOVER:CAPS"/>
530 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MANDATORY:CAPS"/>
531 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-ANONYMITY-MODES:CAPS"/>
532 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-ANONYMITY-SUPPORTED-ANONYMITY-MODES:CAPS"/>
510533 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-BYTES:CAPS"/>
511534 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_HEIGHT" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-HEIGHT:CAPS"/>
512535 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_WIDTH" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-AVATARS-MAXIMUM-AVATAR-WIDTH:CAPS"/>
524547 <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"/>
525548 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-REQUESTS-CHANNELS:CAPS"/>
526549 <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"/>
550 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SERVICE-POINT-KNOWN-SERVICE-POINTS:CAPS"/>
527551 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACE-SIMPLE-PRESENCE-STATUSES:CAPS"/>
528552 <keyword type="macro" name="TP_PROP_CONNECTION_MANAGER_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-MANAGER-INTERFACES:CAPS"/>
529553 <keyword type="macro" name="TP_PROP_CONNECTION_INTERFACES" link="telepathy-glib-interfaces.html#TP-PROP-CONNECTION-INTERFACES:CAPS"/>
618642 <keyword type="enum" name="enum TpContactInfoFlags" link="telepathy-glib-enums.html#TpContactInfoFlags"/>
619643 <keyword type="enum" name="enum TpContactInfoFieldFlags" link="telepathy-glib-enums.html#TpContactInfoFieldFlags"/>
620644 <keyword type="enum" name="enum TpLocationFeatures" link="telepathy-glib-enums.html#TpLocationFeatures"/>
645 <keyword type="enum" name="enum TpServicePointType" link="telepathy-glib-enums.html#TpServicePointType"/>
646 <keyword type="macro" name="NUM_TP_SERVICE_POINT_TYPES" link="telepathy-glib-enums.html#NUM-TP-SERVICE-POINT-TYPES:CAPS"/>
647 <keyword type="enum" name="enum TpAnonymityModeFlags" link="telepathy-glib-enums.html#TpAnonymityModeFlags"/>
621648 <keyword type="macro" name="TP_ERROR_PREFIX" link="telepathy-glib-errors.html#TP-ERROR-PREFIX:CAPS" since="0.7.1"/>
622649 <keyword type="macro" name="TP_ERRORS" link="telepathy-glib-errors.html#TP-ERRORS:CAPS"/>
623650 <keyword type="macro" name="TP_TYPE_ERROR" link="telepathy-glib-errors.html#TP-TYPE-ERROR:CAPS"/>
663690 <keyword type="macro" name="TP_ERROR_STR_REGISTRATION_EXISTS" link="telepathy-glib-errors.html#TP-ERROR-STR-REGISTRATION-EXISTS:CAPS"/>
664691 <keyword type="macro" name="TP_ERROR_STR_SERVICE_BUSY" link="telepathy-glib-errors.html#TP-ERROR-STR-SERVICE-BUSY:CAPS"/>
665692 <keyword type="macro" name="TP_ERROR_STR_RESOURCE_UNAVAILABLE" link="telepathy-glib-errors.html#TP-ERROR-STR-RESOURCE-UNAVAILABLE:CAPS"/>
693 <keyword type="macro" name="TP_ERROR_STR_WOULD_BREAK_ANONYMITY" link="telepathy-glib-errors.html#TP-ERROR-STR-WOULD-BREAK-ANONYMITY:CAPS"/>
666694 <keyword type="function" name="tp_dbus_specialized_value_slice_new ()" link="telepathy-glib-gtypes.html#tp-dbus-specialized-value-slice-new"/>
667695 <keyword type="macro" name="TP_TYPE_UCHAR_ARRAY" link="telepathy-glib-gtypes.html#TP-TYPE-UCHAR-ARRAY:CAPS" since="0.11.1"/>
668696 <keyword type="macro" name="TP_ARRAY_TYPE_OBJECT_PATH_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-OBJECT-PATH-LIST:CAPS" since="0.7.34"/>
731759 <keyword type="macro" name="TP_HASH_TYPE_MESSAGE_PART" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART:CAPS"/>
732760 <keyword type="macro" name="TP_ARRAY_TYPE_MESSAGE_PART_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-MESSAGE-PART-LIST:CAPS"/>
733761 <keyword type="macro" name="TP_HASH_TYPE_MESSAGE_PART_CONTENT_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-MESSAGE-PART-CONTENT-MAP:CAPS"/>
762 <keyword type="macro" name="TP_HASH_TYPE_CHAT_STATE_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHAT-STATE-MAP:CAPS"/>
734763 <keyword type="macro" name="TP_HASH_TYPE_SUPPORTED_SOCKET_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-SUPPORTED-SOCKET-MAP:CAPS"/>
735764 <keyword type="macro" name="TP_STRUCT_TYPE_TUBE_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-TUBE-INFO:CAPS"/>
736765 <keyword type="macro" name="TP_ARRAY_TYPE_TUBE_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-TUBE-INFO-LIST:CAPS"/>
756785 <keyword type="macro" name="TP_HASH_TYPE_CHANNEL_CALL_STATE_MAP" link="telepathy-glib-gtypes.html#TP-HASH-TYPE-CHANNEL-CALL-STATE-MAP:CAPS"/>
757786 <keyword type="macro" name="TP_ARRAY_TYPE_ROOM_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-ROOM-INFO-LIST:CAPS"/>
758787 <keyword type="macro" name="TP_STRUCT_TYPE_ROOM_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-ROOM-INFO:CAPS"/>
788 <keyword type="macro" name="TP_STRUCT_TYPE_SERVICE_POINT" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT:CAPS"/>
789 <keyword type="macro" name="TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-SERVICE-POINT-INFO-LIST:CAPS"/>
790 <keyword type="macro" name="TP_STRUCT_TYPE_SERVICE_POINT_INFO" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-SERVICE-POINT-INFO:CAPS"/>
759791 <keyword type="macro" name="TP_STRUCT_TYPE_AVATAR" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-AVATAR:CAPS"/>
760792 <keyword type="macro" name="TP_STRUCT_TYPE_DISPATCH_OPERATION_DETAILS" link="telepathy-glib-gtypes.html#TP-STRUCT-TYPE-DISPATCH-OPERATION-DETAILS:CAPS"/>
761793 <keyword type="macro" name="TP_ARRAY_TYPE_DISPATCH_OPERATION_DETAILS_LIST" link="telepathy-glib-gtypes.html#TP-ARRAY-TYPE-DISPATCH-OPERATION-DETAILS-LIST:CAPS"/>
833865 <keyword type="macro" name="TP_CONNECTION_FEATURE_CONNECTED" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONNECTED:CAPS" since="0.11.3"/>
834866 <keyword type="macro" name="TP_CONNECTION_FEATURE_CAPABILITIES" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CAPABILITIES:CAPS" since="0.11.3"/>
835867 <keyword type="macro" name="TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-AVATAR-REQUIREMENTS:CAPS" since="0.11.4"/>
868 <keyword type="macro" name="TP_CONNECTION_FEATURE_CONTACT_INFO" link="telepathy-glib-connection.html#TP-CONNECTION-FEATURE-CONTACT-INFO:CAPS" since="0.11.7"/>
836869 <keyword type="function" name="tp_connection_run_until_ready ()" link="telepathy-glib-connection.html#tp-connection-run-until-ready" deprecated="" since="0.7.1"/>
837870 <keyword type="function" name="TpConnectionWhenReadyCb ()" link="telepathy-glib-connection.html#TpConnectionWhenReadyCb"/>
838871 <keyword type="function" name="tp_connection_call_when_ready ()" link="telepathy-glib-connection.html#tp-connection-call-when-ready" since="0.7.7"/>
850883 <keyword type="function" name="tp_connection_parse_object_path ()" link="telepathy-glib-connection.html#tp-connection-parse-object-path" since="0.7.27"/>
851884 <keyword type="function" name="tp_connection_get_capabilities ()" link="telepathy-glib-connection.html#tp-connection-get-capabilities" since="0.11.3"/>
852885 <keyword type="function" name="tp_connection_get_avatar_requirements ()" link="telepathy-glib-connection.html#tp-connection-get-avatar-requirements" since="0.11.4"/>
886 <keyword type="function" name="tp_connection_get_contact_info_flags ()" link="telepathy-glib-connection.html#tp-connection-get-contact-info-flags" since="0.11.7"/>
887 <keyword type="function" name="tp_connection_get_contact_info_supported_fields ()" link="telepathy-glib-connection.html#tp-connection-get-contact-info-supported-fields" since="0.11.7"/>
888 <keyword type="function" name="tp_connection_set_contact_info_async ()" link="telepathy-glib-connection.html#tp-connection-set-contact-info-async" since="0.11.7"/>
889 <keyword type="function" name="tp_connection_set_contact_info_finish ()" link="telepathy-glib-connection.html#tp-connection-set-contact-info-finish" since="0.11.7"/>
853890 <keyword type="macro" name="TP_UNKNOWN_CONNECTION_STATUS" link="telepathy-glib-connection.html#TP-UNKNOWN-CONNECTION-STATUS:CAPS" since="0.7.1"/>
854891 <keyword type="macro" name="TP_ERRORS_DISCONNECTED" link="telepathy-glib-connection.html#TP-ERRORS-DISCONNECTED:CAPS" since="0.7.1"/>
855892 <keyword type="function" name="tp_connection_get_detailed_error ()" link="telepathy-glib-connection.html#tp-connection-get-detailed-error" since="0.11.4"/>
858895 <keyword type="function" name="tp_avatar_requirements_new ()" link="telepathy-glib-connection.html#tp-avatar-requirements-new" since="0.11.4"/>
859896 <keyword type="function" name="tp_avatar_requirements_copy ()" link="telepathy-glib-connection.html#tp-avatar-requirements-copy" since="0.11.4"/>
860897 <keyword type="function" name="tp_avatar_requirements_destroy ()" link="telepathy-glib-connection.html#tp-avatar-requirements-destroy" since="0.11.4"/>
898 <keyword type="struct" name="TpContactInfoFieldSpec" link="telepathy-glib-connection.html#TpContactInfoFieldSpec" since="0.11.7"/>
899 <keyword type="macro" name="TP_TYPE_CONTACT_INFO_FIELD_SPEC" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD-SPEC:CAPS" since="0.11.7"/>
900 <keyword type="function" name="tp_contact_info_field_spec_copy ()" link="telepathy-glib-connection.html#tp-contact-info-field-spec-copy" since="0.11.7"/>
901 <keyword type="function" name="tp_contact_info_field_spec_free ()" link="telepathy-glib-connection.html#tp-contact-info-field-spec-free" since="0.11.7"/>
902 <keyword type="macro" name="TP_TYPE_CONTACT_INFO_SPEC_LIST" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-SPEC-LIST:CAPS" since="0.11.7"/>
903 <keyword type="function" name="tp_contact_info_spec_list_copy ()" link="telepathy-glib-connection.html#tp-contact-info-spec-list-copy" since="0.11.7"/>
904 <keyword type="function" name="tp_contact_info_spec_list_free ()" link="telepathy-glib-connection.html#tp-contact-info-spec-list-free" since="0.11.7"/>
905 <keyword type="struct" name="TpContactInfoField" link="telepathy-glib-connection.html#TpContactInfoField" since="0.11.7"/>
906 <keyword type="macro" name="TP_TYPE_CONTACT_INFO_FIELD" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-FIELD:CAPS" since="0.11.7"/>
907 <keyword type="function" name="tp_contact_info_field_new ()" link="telepathy-glib-connection.html#tp-contact-info-field-new" since="0.11.7"/>
908 <keyword type="function" name="tp_contact_info_field_copy ()" link="telepathy-glib-connection.html#tp-contact-info-field-copy" since="0.11.7"/>
909 <keyword type="function" name="tp_contact_info_field_free ()" link="telepathy-glib-connection.html#tp-contact-info-field-free" since="0.11.7"/>
910 <keyword type="macro" name="TP_TYPE_CONTACT_INFO_LIST" link="telepathy-glib-connection.html#TP-TYPE-CONTACT-INFO-LIST:CAPS" since="0.11.7"/>
911 <keyword type="function" name="tp_contact_info_list_copy ()" link="telepathy-glib-connection.html#tp-contact-info-list-copy" since="0.11.7"/>
912 <keyword type="function" name="tp_contact_info_list_free ()" link="telepathy-glib-connection.html#tp-contact-info-list-free" since="0.11.7"/>
861913 <keyword type="function" name="tp_cli_connection_callback_for_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-callback-for-connect"/>
862914 <keyword type="function" name="tp_cli_connection_call_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-call-connect"/>
863915 <keyword type="function" name="tp_cli_connection_run_connect ()" link="telepathy-glib-connection.html#tp-cli-connection-run-connect" deprecated=""/>
916968 <keyword type="function" name="tp_connection_get_contacts_by_id ()" link="telepathy-glib-contact.html#tp-connection-get-contacts-by-id" since="0.7.18"/>
917969 <keyword type="function" name="TpConnectionUpgradeContactsCb ()" link="telepathy-glib-contact.html#TpConnectionUpgradeContactsCb" since="0.7.18"/>
918970 <keyword type="function" name="tp_connection_upgrade_contacts ()" link="telepathy-glib-contact.html#tp-connection-upgrade-contacts" since="0.7.18"/>
971 <keyword type="function" name="tp_connection_refresh_contact_info ()" link="telepathy-glib-contact.html#tp-connection-refresh-contact-info" since="0.11.7"/>
919972 <keyword type="function" name="tp_contact_get_alias ()" link="telepathy-glib-contact.html#tp-contact-get-alias" since="0.7.18"/>
920973 <keyword type="function" name="tp_contact_get_avatar_token ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-token" since="0.7.18"/>
921974 <keyword type="function" name="tp_contact_get_avatar_file ()" link="telepathy-glib-contact.html#tp-contact-get-avatar-file" since="0.11.6"/>
928981 <keyword type="function" name="tp_contact_get_presence_type ()" link="telepathy-glib-contact.html#tp-contact-get-presence-type" since="0.7.18"/>
929982 <keyword type="function" name="tp_contact_get_location ()" link="telepathy-glib-contact.html#tp-contact-get-location" since="0.11.1"/>
930983 <keyword type="function" name="tp_contact_get_capabilities ()" link="telepathy-glib-contact.html#tp-contact-get-capabilities" since="0.11.3"/>
984 <keyword type="function" name="tp_contact_get_contact_info ()" link="telepathy-glib-contact.html#tp-contact-get-contact-info" since="0.11.7"/>
985 <keyword type="function" name="tp_contact_request_contact_info_async ()" link="telepathy-glib-contact.html#tp-contact-request-contact-info-async" since="0.11.7"/>
986 <keyword type="function" name="tp_contact_request_contact_info_finish ()" link="telepathy-glib-contact.html#tp-contact-request-contact-info-finish" since="0.11.7"/>
931987 <keyword type="function" name="tp_contact_has_feature ()" link="telepathy-glib-contact.html#tp-contact-has-feature" since="0.7.18"/>
932988 <keyword type="property" name="The &quot;alias&quot; property" link="telepathy-glib-contact.html#TpContact--alias"/>
933989 <keyword type="property" name="The &quot;avatar-file&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-file"/>
935991 <keyword type="property" name="The &quot;avatar-token&quot; property" link="telepathy-glib-contact.html#TpContact--avatar-token"/>
936992 <keyword type="property" name="The &quot;capabilities&quot; property" link="telepathy-glib-contact.html#TpContact--capabilities"/>
937993 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-contact.html#TpContact--connection"/>
994 <keyword type="property" name="The &quot;contact-info&quot; property" link="telepathy-glib-contact.html#TpContact--contact-info"/>
938995 <keyword type="property" name="The &quot;handle&quot; property" link="telepathy-glib-contact.html#TpContact--handle"/>
939996 <keyword type="property" name="The &quot;identifier&quot; property" link="telepathy-glib-contact.html#TpContact--identifier"/>
940997 <keyword type="property" name="The &quot;location&quot; property" link="telepathy-glib-contact.html#TpContact--location"/>
941998 <keyword type="property" name="The &quot;presence-message&quot; property" link="telepathy-glib-contact.html#TpContact--presence-message"/>
942999 <keyword type="property" name="The &quot;presence-status&quot; property" link="telepathy-glib-contact.html#TpContact--presence-status"/>
9431000 <keyword type="property" name="The &quot;presence-type&quot; property" link="telepathy-glib-contact.html#TpContact--presence-type"/>
1001 <keyword type="signal" name="The &quot;presence-changed&quot; signal" link="telepathy-glib-contact.html#TpContact-presence-changed"/>
9441002 <keyword type="struct" name="TpCapabilities" link="telepathy-glib-capabilities.html#TpCapabilities-struct"/>
9451003 <keyword type="function" name="tp_capabilities_get_channel_classes ()" link="telepathy-glib-capabilities.html#tp-capabilities-get-channel-classes" since="0.11.3"/>
9461004 <keyword type="function" name="tp_capabilities_is_specific_to_contact ()" link="telepathy-glib-capabilities.html#tp-capabilities-is-specific-to-contact" since="0.11.3"/>
13541412 <keyword type="function" name="tp_cli_channel_type_room_list_connect_to_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-connect-to-listing-rooms"/>
13551413 <keyword type="function" name="tp_cli_channel_type_room_list_signal_callback_got_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-got-rooms"/>
13561414 <keyword type="function" name="tp_cli_channel_type_room_list_signal_callback_listing_rooms ()" link="telepathy-glib-channel-roomlist.html#tp-cli-channel-type-room-list-signal-callback-listing-rooms"/>
1415 <keyword type="function" name="tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-connect-to-anonymity-modes-changed"/>
1416 <keyword type="function" name="tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ()" link="telepathy-glib-cli-anonymity.html#tp-cli-connection-interface-anonymity-signal-callback-anonymity-modes-changed"/>
1417 <keyword type="function" name="tp_cli_channel_interface_service_point_connect_to_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-connect-to-service-point-changed"/>
1418 <keyword type="function" name="tp_cli_channel_interface_service_point_signal_callback_service_point_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-channel-interface-service-point-signal-callback-service-point-changed"/>
1419 <keyword type="function" name="tp_cli_connection_interface_service_point_connect_to_service_points_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-connect-to-service-points-changed"/>
1420 <keyword type="function" name="tp_cli_connection_interface_service_point_signal_callback_service_points_changed ()" link="telepathy-glib-cli-service-point.html#tp-cli-connection-interface-service-point-signal-callback-service-points-changed"/>
13571421 <keyword type="function" name="tp_media_session_handler_new ()" link="telepathy-glib-media-interfaces.html#tp-media-session-handler-new" since="0.7.1"/>
13581422 <keyword type="function" name="tp_media_session_handler_init_known_interfaces ()" link="telepathy-glib-media-interfaces.html#tp-media-session-handler-init-known-interfaces" since="0.7.32"/>
13591423 <keyword type="struct" name="TpMediaSessionHandler" link="telepathy-glib-media-interfaces.html#TpMediaSessionHandler-struct"/>
14871551 <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"/>
14881552 <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"/>
14891553 <keyword type="function" name="tp_account_get_connection_status ()" link="telepathy-glib-account.html#tp-account-get-connection-status" since="0.9.0"/>
1554 <keyword type="function" name="tp_account_get_detailed_error ()" link="telepathy-glib-account.html#tp-account-get-detailed-error" since="0.11.7"/>
14901555 <keyword type="function" name="tp_account_get_changing_presence ()" link="telepathy-glib-account.html#tp-account-get-changing-presence" since="0.11.6"/>
14911556 <keyword type="function" name="tp_account_get_current_presence ()" link="telepathy-glib-account.html#tp-account-get-current-presence" since="0.9.0"/>
14921557 <keyword type="function" name="tp_account_get_requested_presence ()" link="telepathy-glib-account.html#tp-account-get-requested-presence" since="0.9.0"/>
15171582 <keyword type="property" name="The &quot;changing-presence&quot; property" link="telepathy-glib-account.html#TpAccount--changing-presence"/>
15181583 <keyword type="property" name="The &quot;connect-automatically&quot; property" link="telepathy-glib-account.html#TpAccount--connect-automatically"/>
15191584 <keyword type="property" name="The &quot;connection&quot; property" link="telepathy-glib-account.html#TpAccount--connection"/>
1585 <keyword type="property" name="The &quot;connection-error&quot; property" link="telepathy-glib-account.html#TpAccount--connection-error"/>
1586 <keyword type="property" name="The &quot;connection-error-details&quot; property" link="telepathy-glib-account.html#TpAccount--connection-error-details"/>
15201587 <keyword type="property" name="The &quot;connection-manager&quot; property" link="telepathy-glib-account.html#TpAccount--connection-manager"/>
15211588 <keyword type="property" name="The &quot;connection-status&quot; property" link="telepathy-glib-account.html#TpAccount--connection-status"/>
15221589 <keyword type="property" name="The &quot;connection-status-reason&quot; property" link="telepathy-glib-account.html#TpAccount--connection-status-reason"/>
15691636 <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"/>
15701637 <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"/>
15711638 <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"/>
1639 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_time_async ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-async" since="0.11.7"/>
1640 <keyword type="function" name="tp_channel_dispatch_operation_handle_with_time_finish ()" link="telepathy-glib-channel-dispatch-operation.html#tp-channel-dispatch-operation-handle-with-time-finish" since="0.11.7"/>
15721641 <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"/>
15731642 <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"/>
15741643 <keyword type="property" name="The &quot;account&quot; property" link="telepathy-glib-channel-dispatch-operation.html#TpChannelDispatchOperation--account"/>
21242193 <keyword type="signal" name="The &quot;contact-capabilities-changed&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceContactCapabilities-contact-capabilities-changed"/>
21252194 <keyword type="signal" name="The &quot;location-updated&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceLocation-location-updated"/>
21262195 <keyword type="signal" name="The &quot;contact-info-changed&quot; signal" link="telepathy-glib-svc-connection.html#TpSvcConnectionInterfaceContactInfo-contact-info-changed"/>
2196 <keyword type="struct" name="TpSvcConnectionInterfaceAnonymity" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-struct"/>
2197 <keyword type="struct" name="TpSvcConnectionInterfaceAnonymityClass" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymityClass"/>
2198 <keyword type="function" name="tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ()" link="telepathy-glib-svc-anonymity.html#tp-svc-connection-interface-anonymity-emit-anonymity-modes-changed"/>
2199 <keyword type="struct" name="TpSvcChannelInterfaceAnonymity" link="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymity-struct"/>
2200 <keyword type="struct" name="TpSvcChannelInterfaceAnonymityClass" link="telepathy-glib-svc-anonymity.html#TpSvcChannelInterfaceAnonymityClass"/>
2201 <keyword type="signal" name="The &quot;anonymity-modes-changed&quot; signal" link="telepathy-glib-svc-anonymity.html#TpSvcConnectionInterfaceAnonymity-anonymity-modes-changed"/>
2202 <keyword type="struct" name="TpSvcConnectionInterfaceServicePoint" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-struct"/>
2203 <keyword type="struct" name="TpSvcConnectionInterfaceServicePointClass" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePointClass"/>
2204 <keyword type="function" name="tp_svc_connection_interface_service_point_emit_service_points_changed ()" link="telepathy-glib-svc-service-point.html#tp-svc-connection-interface-service-point-emit-service-points-changed"/>
2205 <keyword type="struct" name="TpSvcChannelInterfaceServicePoint" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-struct"/>
2206 <keyword type="struct" name="TpSvcChannelInterfaceServicePointClass" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePointClass"/>
2207 <keyword type="function" name="tp_svc_channel_interface_service_point_emit_service_point_changed ()" link="telepathy-glib-svc-service-point.html#tp-svc-channel-interface-service-point-emit-service-point-changed"/>
2208 <keyword type="signal" name="The &quot;service-points-changed&quot; signal" link="telepathy-glib-svc-service-point.html#TpSvcConnectionInterfaceServicePoint-service-points-changed"/>
2209 <keyword type="signal" name="The &quot;service-point-changed&quot; signal" link="telepathy-glib-svc-service-point.html#TpSvcChannelInterfaceServicePoint-service-point-changed"/>
21272210 <keyword type="struct" name="TpSvcMediaSessionHandler" link="telepathy-glib-svc-media-interfaces.html#TpSvcMediaSessionHandler-struct"/>
21282211 <keyword type="struct" name="TpSvcMediaSessionHandlerClass" link="telepathy-glib-svc-media-interfaces.html#TpSvcMediaSessionHandlerClass"/>
21292212 <keyword type="function" name="tp_svc_media_session_handler_error_impl ()" link="telepathy-glib-svc-media-interfaces.html#tp-svc-media-session-handler-error-impl"/>
23462429 <keyword type="property" name="The &quot;protocol&quot; property" link="TpBaseConnection.html#TpBaseConnection--protocol"/>
23472430 <keyword type="property" name="The &quot;self-handle&quot; property" link="TpBaseConnection.html#TpBaseConnection--self-handle"/>
23482431 <keyword type="signal" name="The &quot;shutdown-finished&quot; signal" link="TpBaseConnection.html#TpBaseConnection-shutdown-finished"/>
2349 <keyword type="function" name="TpChannelFactoryIfaceForeachImpl ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceForeachImpl"/>
2350 <keyword type="function" name="TpChannelFactoryIfaceProc ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceProc"/>
2351 <keyword type="function" name="TpChannelFactoryIfaceRequestImpl ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceRequestImpl"/>
2352 <keyword type="enum" name="enum TpChannelFactoryRequestStatus" link="TpChannelFactoryIface.html#TpChannelFactoryRequestStatus"/>
2432 <keyword type="function" name="TpChannelFactoryIfaceForeachImpl ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceForeachImpl" deprecated="0.11.7"/>
2433 <keyword type="function" name="TpChannelFactoryIfaceProc ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceProc" deprecated="0.11.7"/>
2434 <keyword type="function" name="TpChannelFactoryIfaceRequestImpl ()" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceRequestImpl" deprecated="0.11.7"/>
2435 <keyword type="enum" name="enum TpChannelFactoryRequestStatus" link="TpChannelFactoryIface.html#TpChannelFactoryRequestStatus" deprecated="0.11.7"/>
23532436 <keyword type="struct" name="TpChannelFactoryIface" link="TpChannelFactoryIface.html#TpChannelFactoryIface-struct"/>
2354 <keyword type="struct" name="TpChannelFactoryIfaceClass" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceClass"/>
2355 <keyword type="function" name="tp_channel_factory_iface_close_all ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-close-all"/>
2356 <keyword type="function" name="tp_channel_factory_iface_connecting ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-connecting"/>
2357 <keyword type="function" name="tp_channel_factory_iface_connected ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-connected"/>
2358 <keyword type="function" name="tp_channel_factory_iface_disconnected ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-disconnected"/>
2359 <keyword type="function" name="tp_channel_factory_iface_foreach ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-foreach"/>
2360 <keyword type="function" name="tp_channel_factory_iface_request ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-request"/>
2361 <keyword type="function" name="tp_channel_factory_iface_emit_new_channel ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-emit-new-channel"/>
2362 <keyword type="function" name="tp_channel_factory_iface_emit_channel_error ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-emit-channel-error"/>
2437 <keyword type="struct" name="TpChannelFactoryIfaceClass" link="TpChannelFactoryIface.html#TpChannelFactoryIfaceClass" deprecated="0.11.7"/>
2438 <keyword type="function" name="tp_channel_factory_iface_close_all ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-close-all" deprecated="0.11.7"/>
2439 <keyword type="function" name="tp_channel_factory_iface_connecting ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-connecting" deprecated="0.11.7"/>
2440 <keyword type="function" name="tp_channel_factory_iface_connected ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-connected" deprecated="0.11.7"/>
2441 <keyword type="function" name="tp_channel_factory_iface_disconnected ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-disconnected" deprecated="0.11.7"/>
2442 <keyword type="function" name="tp_channel_factory_iface_foreach ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-foreach" deprecated="0.11.7"/>
2443 <keyword type="function" name="tp_channel_factory_iface_request ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-request" deprecated="0.11.7"/>
2444 <keyword type="function" name="tp_channel_factory_iface_emit_new_channel ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-emit-new-channel" deprecated="0.11.7"/>
2445 <keyword type="function" name="tp_channel_factory_iface_emit_channel_error ()" link="TpChannelFactoryIface.html#tp-channel-factory-iface-emit-channel-error" deprecated="0.11.7"/>
23632446 <keyword type="signal" name="The &quot;channel-error&quot; signal" link="TpChannelFactoryIface.html#TpChannelFactoryIface-channel-error"/>
23642447 <keyword type="signal" name="The &quot;new-channel&quot; signal" link="TpChannelFactoryIface.html#TpChannelFactoryIface-new-channel"/>
23652448 <keyword type="function" name="TpChannelManagerChannelClassFunc ()" link="TpChannelManager.html#TpChannelManagerChannelClassFunc"/>
26642747 <keyword type="macro" name="TP_TYPE_HANDLE_SET" link="telepathy-glib-handle-repo.html#TP-TYPE-HANDLE-SET:CAPS" since="0.11.6"/>
26652748 <keyword type="function" name="TpHandleSetMemberFunc ()" link="telepathy-glib-handle-repo.html#TpHandleSetMemberFunc"/>
26662749 <keyword type="function" name="tp_handle_set_new ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new"/>
2750 <keyword type="function" name="tp_handle_set_new_from_array ()" link="telepathy-glib-handle-repo.html#tp-handle-set-new-from-array" since="0.11.7"/>
26672751 <keyword type="function" name="tp_handle_set_copy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-copy" since="0.11.6"/>
26682752 <keyword type="function" name="tp_handle_set_clear ()" link="telepathy-glib-handle-repo.html#tp-handle-set-clear" since="0.11.6"/>
26692753 <keyword type="function" name="tp_handle_set_destroy ()" link="telepathy-glib-handle-repo.html#tp-handle-set-destroy"/>
27272811 <keyword type="function" name="tp_weak_ref_dup_object ()" link="telepathy-glib-util.html#tp-weak-ref-dup-object" since="0.11.3"/>
27282812 <keyword type="function" name="tp_weak_ref_get_user_data ()" link="telepathy-glib-util.html#tp-weak-ref-get-user-data" since="0.11.3"/>
27292813 <keyword type="function" name="tp_weak_ref_destroy ()" link="telepathy-glib-util.html#tp-weak-ref-destroy" since="0.11.3"/>
2814 <keyword type="macro" name="tp_clear_pointer()" link="telepathy-glib-util.html#tp-clear-pointer" since="0.11.7"/>
2815 <keyword type="macro" name="tp_clear_object()" link="telepathy-glib-util.html#tp-clear-object" since="0.11.7"/>
2816 <keyword type="macro" name="tp_clear_boxed()" link="telepathy-glib-util.html#tp-clear-boxed" since="0.11.7"/>
27302817 <keyword type="function" name="tp_g_socket_address_from_variant ()" link="telepathy-glib-gnio-util.html#tp-g-socket-address-from-variant"/>
27312818 <keyword type="function" name="tp_address_variant_from_g_socket_address ()" link="telepathy-glib-gnio-util.html#tp-address-variant-from-g-socket-address"/>
27322819 <keyword type="macro" name="TP_ANSI_RESET" link="telepathy-glib-debug-ansi.html#TP-ANSI-RESET:CAPS"/>
30193106 <keyword type="constant" name="TP_CONTACT_INFO_FLAG_PUSH" link="telepathy-glib-enums.html#TP-CONTACT-INFO-FLAG-PUSH:CAPS"/>
30203107 <keyword type="constant" name="TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT" link="telepathy-glib-enums.html#TP-CONTACT-INFO-FIELD-FLAG-PARAMETERS-EXACT:CAPS"/>
30213108 <keyword type="constant" name="TP_LOCATION_FEATURE_CAN_SET" link="telepathy-glib-enums.html#TP-LOCATION-FEATURE-CAN-SET:CAPS"/>
3109 <keyword type="constant" name="TP_SERVICE_POINT_TYPE_NONE" link="telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-NONE:CAPS"/>
3110 <keyword type="constant" name="TP_SERVICE_POINT_TYPE_EMERGENCY" link="telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-EMERGENCY:CAPS"/>
3111 <keyword type="constant" name="TP_SERVICE_POINT_TYPE_COUNSELING" link="telepathy-glib-enums.html#TP-SERVICE-POINT-TYPE-COUNSELING:CAPS"/>
3112 <keyword type="constant" name="TP_ANONYMITY_MODE_CLIENT_INFO" link="telepathy-glib-enums.html#TP-ANONYMITY-MODE-CLIENT-INFO:CAPS"/>
3113 <keyword type="constant" name="TP_ANONYMITY_MODE_SHOW_CLIENT_INFO" link="telepathy-glib-enums.html#TP-ANONYMITY-MODE-SHOW-CLIENT-INFO:CAPS"/>
3114 <keyword type="constant" name="TP_ANONYMITY_MODE_NETWORK_INFO" link="telepathy-glib-enums.html#TP-ANONYMITY-MODE-NETWORK-INFO:CAPS"/>
30223115 <keyword type="constant" name="TP_ERROR_NETWORK_ERROR" link="telepathy-glib-errors.html#TP-ERROR-NETWORK-ERROR:CAPS"/>
30233116 <keyword type="constant" name="TP_ERROR_NOT_IMPLEMENTED" link="telepathy-glib-errors.html#TP-ERROR-NOT-IMPLEMENTED:CAPS"/>
30243117 <keyword type="constant" name="TP_ERROR_INVALID_ARGUMENT" link="telepathy-glib-errors.html#TP-ERROR-INVALID-ARGUMENT:CAPS"/>
30573150 <keyword type="constant" name="TP_ERROR_REGISTRATION_EXISTS" link="telepathy-glib-errors.html#TP-ERROR-REGISTRATION-EXISTS:CAPS"/>
30583151 <keyword type="constant" name="TP_ERROR_SERVICE_BUSY" link="telepathy-glib-errors.html#TP-ERROR-SERVICE-BUSY:CAPS"/>
30593152 <keyword type="constant" name="TP_ERROR_RESOURCE_UNAVAILABLE" link="telepathy-glib-errors.html#TP-ERROR-RESOURCE-UNAVAILABLE:CAPS"/>
3153 <keyword type="constant" name="TP_ERROR_WOULD_BREAK_ANONYMITY" link="telepathy-glib-errors.html#TP-ERROR-WOULD-BREAK-ANONYMITY:CAPS"/>
30603154 <keyword type="constant" name="TP_CM_INFO_SOURCE_NONE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-NONE:CAPS"/>
30613155 <keyword type="constant" name="TP_CM_INFO_SOURCE_FILE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-FILE:CAPS"/>
30623156 <keyword type="constant" name="TP_CM_INFO_SOURCE_LIVE" link="telepathy-glib-connection-manager.html#TP-CM-INFO-SOURCE-LIVE:CAPS"/>
30663160 <keyword type="constant" name="TP_CONTACT_FEATURE_LOCATION" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-LOCATION:CAPS"/>
30673161 <keyword type="constant" name="TP_CONTACT_FEATURE_CAPABILITIES" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-CAPABILITIES:CAPS"/>
30683162 <keyword type="constant" name="TP_CONTACT_FEATURE_AVATAR_DATA" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-AVATAR-DATA:CAPS"/>
3163 <keyword type="constant" name="TP_CONTACT_FEATURE_CONTACT_INFO" link="telepathy-glib-contact.html#TP-CONTACT-FEATURE-CONTACT-INFO:CAPS"/>
30693164 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_IMPLEMENTED" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-NOT-IMPLEMENTED:CAPS"/>
30703165 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_AVAILABLE" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-NOT-AVAILABLE:CAPS"/>
30713166 <keyword type="constant" name="TP_CHANNEL_FACTORY_REQUEST_STATUS_INVALID_HANDLE" link="TpChannelFactoryIface.html#TP-CHANNEL-FACTORY-REQUEST-STATUS-INVALID-HANDLE:CAPS"/>
4848 <xi:include href="xml/channel-tubes.xml"/>
4949 <xi:include href="xml/channel-tube.xml"/>
5050 <xi:include href="xml/channel-roomlist.xml"/>
51 <xi:include href="xml/cli-anonymity.xml"/>
52 <xi:include href="xml/cli-service-point.xml"/>
5153 <xi:include href="xml/media-interfaces.xml"/>
5254 <xi:include href="xml/account-manager.xml"/>
5355 <xi:include href="xml/account.xml"/>
7274 <xi:include href="xml/svc-channel-roomlist.xml"/>
7375 <xi:include href="xml/svc-debug.xml"/>
7476 <xi:include href="xml/svc-connection.xml"/>
77 <xi:include href="xml/svc-anonymity.xml"/>
78 <xi:include href="xml/svc-service-point.xml"/>
7579 <xi:include href="xml/svc-media-interfaces.xml"/>
7680 <xi:include href="xml/svc-connection-manager.xml"/>
7781 <xi:include href="xml/svc-account-manager.xml"/>
203203 TP_TYPE_HANDLE_SET
204204 TpHandleSetMemberFunc
205205 tp_handle_set_new
206 tp_handle_set_new_from_array
206207 tp_handle_set_copy
207208 tp_handle_set_clear
208209 tp_handle_set_destroy
723724 TP_TYPE_SVC_CHANNEL_INTERFACE_MEDIA_SIGNALLING
724725 tp_svc_channel_interface_media_signalling_get_type
725726 TP_SVC_CHANNEL_INTERFACE_MEDIA_SIGNALLING_GET_CLASS
727 </SECTION>
728
729 <SECTION>
730 <FILE>svc-anonymity</FILE>
731 <TITLE>svc-anonymity</TITLE>
732 <INCLUDE>telepathy-glib/svc-channel.h,telepathy-glib/svc-connection.h</INCLUDE>
733 TpSvcConnectionInterfaceAnonymity
734 TpSvcConnectionInterfaceAnonymityClass
735 tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed
736 <SUBSECTION>
737 TpSvcChannelInterfaceAnonymity
738 TpSvcChannelInterfaceAnonymityClass
739 <SUBSECTION Standard>
740 tp_svc_channel_interface_anonymity_get_type
741 TP_IS_SVC_CHANNEL_INTERFACE_ANONYMITY
742 TP_SVC_CHANNEL_INTERFACE_ANONYMITY
743 TP_SVC_CHANNEL_INTERFACE_ANONYMITY_GET_CLASS
744 TP_TYPE_SVC_CHANNEL_INTERFACE_ANONYMITY
745 TP_IS_SVC_CONNECTION_INTERFACE_ANONYMITY
746 TP_SVC_CONNECTION_INTERFACE_ANONYMITY
747 TP_SVC_CONNECTION_INTERFACE_ANONYMITY_GET_CLASS
748 TP_TYPE_SVC_CONNECTION_INTERFACE_ANONYMITY
749 tp_svc_connection_interface_anonymity_get_type
750 </SECTION>
751
752 <SECTION>
753 <FILE>svc-service-point</FILE>
754 <TITLE>svc-service-point</TITLE>
755 <INCLUDE>telepathy-glib/svc-channel.h,telepathy-glib/svc-connection.h</INCLUDE>
756 TpSvcConnectionInterfaceServicePoint
757 TpSvcConnectionInterfaceServicePointClass
758 tp_svc_connection_interface_service_point_emit_service_points_changed
759 <SUBSECTION>
760 TpSvcChannelInterfaceServicePoint
761 TpSvcChannelInterfaceServicePointClass
762 tp_svc_channel_interface_service_point_emit_service_point_changed
763 <SUBSECTION Standard>
764 tp_svc_channel_interface_service_point_get_type
765 TP_IS_SVC_CHANNEL_INTERFACE_SERVICE_POINT
766 TP_SVC_CHANNEL_INTERFACE_SERVICE_POINT
767 TP_SVC_CHANNEL_INTERFACE_SERVICE_POINT_GET_CLASS
768 TP_TYPE_SVC_CHANNEL_INTERFACE_SERVICE_POINT
769 TP_IS_SVC_CONNECTION_INTERFACE_SERVICE_POINT
770 TP_SVC_CONNECTION_INTERFACE_SERVICE_POINT
771 TP_SVC_CONNECTION_INTERFACE_SERVICE_POINT_GET_CLASS
772 TP_TYPE_SVC_CONNECTION_INTERFACE_SERVICE_POINT
773 tp_svc_connection_interface_service_point_get_type
726774 </SECTION>
727775
728776 <SECTION>
11391187 tp_weak_ref_dup_object
11401188 tp_weak_ref_get_user_data
11411189 tp_weak_ref_destroy
1190 tp_clear_pointer
1191 tp_clear_object
1192 tp_clear_boxed
11421193 </SECTION>
11431194
11441195 <SECTION>
12531304 TP_HASH_TYPE_MESSAGE_PART
12541305 TP_ARRAY_TYPE_MESSAGE_PART_LIST
12551306 TP_HASH_TYPE_MESSAGE_PART_CONTENT_MAP
1307 TP_HASH_TYPE_CHAT_STATE_MAP
12561308 <SUBSECTION>
12571309 # Channel - Tubes
12581310 TP_HASH_TYPE_SUPPORTED_SOCKET_MAP
12891341 TP_ARRAY_TYPE_ROOM_INFO_LIST
12901342 TP_STRUCT_TYPE_ROOM_INFO
12911343 <SUBSECTION>
1344 # Channel - Service Point
1345 TP_STRUCT_TYPE_SERVICE_POINT
1346 TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST
1347 TP_STRUCT_TYPE_SERVICE_POINT_INFO
1348 <SUBSECTION>
12921349 # Account and AM
12931350 TP_STRUCT_TYPE_AVATAR
12941351 <SUBSECTION>
13001357 TP_STRUCT_TYPE_DEBUG_MESSAGE
13011358 TP_ARRAY_TYPE_DEBUG_MESSAGE_LIST
13021359 <SUBSECTION Private>
1360 tp_type_dbus_array__28us_29as
13031361 tp_type_dbus_array_a_7bsv_7das
13041362 tp_type_dbus_array_dsus
13051363 tp_type_dbus_array_oa_7bsv_7d
13441402 tp_type_dbus_hash_us
13451403 tp_type_dbus_hash_uu
13461404 tp_type_dbus_hash_uv
1405 tp_type_dbus_struct__28us_29as
13471406 tp_type_dbus_struct_a_7bsv_7das
13481407 tp_type_dbus_struct_ays
13491408 tp_type_dbus_struct_dsus
18591918 TP_ERROR_STR_REGISTRATION_EXISTS
18601919 TP_ERROR_STR_SERVICE_BUSY
18611920 TP_ERROR_STR_RESOURCE_UNAVAILABLE
1921 TP_ERROR_STR_WOULD_BREAK_ANONYMITY
18621922 <SUBSECTION Standard>
18631923 tp_error_get_type
18641924 tp_errors_quark
1925 <SUBSECTION Private>
1926 TP_ERROR
18651927 </SECTION>
18661928
18671929 <SECTION>
20322094 TpContactInfoFlags
20332095 TpContactInfoFieldFlags
20342096 TpLocationFeatures
2097 TpServicePointType
2098 NUM_TP_SERVICE_POINT_TYPES
2099 TpAnonymityModeFlags
20352100 </SECTION>
20362101
20372102 <SECTION>
20602125 TP_IFACE_QUARK_CONNECTION
20612126 TP_IFACE_CONNECTION_INTERFACE_ALIASING
20622127 TP_IFACE_QUARK_CONNECTION_INTERFACE_ALIASING
2128 TP_IFACE_CONNECTION_INTERFACE_ANONYMITY
2129 TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY
20632130 TP_IFACE_CONNECTION_INTERFACE_AVATARS
20642131 TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS
20652132 TP_IFACE_CONNECTION_INTERFACE_BALANCE
20802147 TP_IFACE_QUARK_CONNECTION_INTERFACE_PRESENCE
20812148 TP_IFACE_CONNECTION_INTERFACE_LOCATION
20822149 TP_IFACE_QUARK_CONNECTION_INTERFACE_LOCATION
2150 TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT
2151 TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT
20832152 TP_IFACE_CHANNEL
20842153 TP_IFACE_QUARK_CHANNEL
20852154 TP_IFACE_CHANNEL_TYPE_CONTACT_LIST
21002169 TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE
21012170 TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE
21022171 TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE
2172 TP_IFACE_CHANNEL_INTERFACE_ANONYMITY
2173 TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY
21032174 TP_IFACE_CHANNEL_INTERFACE_CALL_STATE
21042175 TP_IFACE_QUARK_CHANNEL_INTERFACE_CALL_STATE
21052176 TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE
21182189 TP_IFACE_QUARK_CHANNEL_INTERFACE_MEDIA_SIGNALLING
21192190 TP_IFACE_CHANNEL_INTERFACE_MESSAGES
21202191 TP_IFACE_QUARK_CHANNEL_INTERFACE_MESSAGES
2192 TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT
2193 TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT
21212194 TP_IFACE_CHANNEL_DISPATCHER
21222195 TP_IFACE_QUARK_CHANNEL_DISPATCHER
21232196 TP_IFACE_CHANNEL_DISPATCHER_INTERFACE_OPERATION_LIST
21452218 TP_PROP_ACCOUNT_AUTOMATIC_PRESENCE
21462219 TP_PROP_ACCOUNT_CHANGING_PRESENCE
21472220 TP_PROP_ACCOUNT_CONNECTION
2221 TP_PROP_ACCOUNT_CONNECTION_ERROR
2222 TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS
21482223 TP_PROP_ACCOUNT_CONNECTION_STATUS
21492224 TP_PROP_ACCOUNT_CONNECTION_STATUS_REASON
21502225 TP_PROP_ACCOUNT_CONNECT_AUTOMATICALLY
21752250 TP_PROP_CHANNEL_INITIATOR_HANDLE
21762251 TP_PROP_CHANNEL_INITIATOR_ID
21772252 TP_PROP_CHANNEL_INTERFACES
2253 TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY
2254 TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES
2255 TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID
2256 TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES
21782257 TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES
21792258 TP_PROP_CHANNEL_INTERFACE_DTMF_INITIAL_TONES
21802259 TP_PROP_CHANNEL_INTERFACE_GROUP_GROUP_FLAGS
21872266 TP_PROP_CHANNEL_INTERFACE_MESSAGES_MESSAGE_PART_SUPPORT_FLAGS
21882267 TP_PROP_CHANNEL_INTERFACE_MESSAGES_PENDING_MESSAGES
21892268 TP_PROP_CHANNEL_INTERFACE_MESSAGES_SUPPORTED_CONTENT_TYPES
2269 TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT
2270 TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT
21902271 TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS
21912272 TP_PROP_CHANNEL_INTERFACE_TUBE_STATE
21922273 TP_PROP_CHANNEL_REQUESTED
22262307 TP_PROP_CLIENT_INTERFACES
22272308 TP_PROP_CLIENT_OBSERVER_OBSERVER_CHANNEL_FILTER
22282309 TP_PROP_CLIENT_OBSERVER_RECOVER
2310 TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY
2311 TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES
2312 TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES
22292313 TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES
22302314 TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_HEIGHT
22312315 TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_WIDTH
22432327 TP_PROP_CONNECTION_INTERFACE_LOCATION_SUPPORTED_LOCATION_FEATURES
22442328 TP_PROP_CONNECTION_INTERFACE_REQUESTS_CHANNELS
22452329 TP_PROP_CONNECTION_INTERFACE_REQUESTS_REQUESTABLE_CHANNEL_CLASSES
2330 TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS
22462331 TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES
22472332 TP_PROP_CONNECTION_MANAGER_INTERFACES
22482333 TP_PROP_CONNECTION_INTERFACES
23182403 tp_iface_quark_media_stream_handler
23192404 tp_iface_quark_properties_interface
23202405 tp_iface_quark_channel_interface_call_state
2406 tp_iface_quark_channel_interface_anonymity
2407 tp_iface_quark_channel_interface_service_point
2408 tp_iface_quark_connection_interface_anonymity
2409 tp_iface_quark_connection_interface_service_point
23212410 </SECTION>
23222411
23232412 <SECTION>
27752864 </SECTION>
27762865
27772866 <SECTION>
2867 <FILE>cli-anonymity</FILE>
2868 <TITLE>cli-anonymity</TITLE>
2869 <INCLUDE>telepathy-glib/telepathy-glib.h</INCLUDE>
2870 tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed
2871 tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed
2872 </SECTION>
2873
2874 <SECTION>
2875 <FILE>cli-service-point</FILE>
2876 <TITLE>cli-service-point</TITLE>
2877 <INCLUDE>telepathy-glib/telepathy-glib.h</INCLUDE>
2878 tp_cli_channel_interface_service_point_connect_to_service_point_changed
2879 tp_cli_channel_interface_service_point_signal_callback_service_point_changed
2880 tp_cli_connection_interface_service_point_connect_to_service_points_changed
2881 tp_cli_connection_interface_service_point_signal_callback_service_points_changed
2882 </SECTION>
2883
2884 <SECTION>
27782885 <FILE>connection</FILE>
27792886 <TITLE>connection</TITLE>
27802887 <INCLUDE>telepathy-glib/connection.h</INCLUDE>
27872894 TP_CONNECTION_FEATURE_CONNECTED
27882895 TP_CONNECTION_FEATURE_CAPABILITIES
27892896 TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS
2897 TP_CONNECTION_FEATURE_CONTACT_INFO
27902898 tp_connection_run_until_ready
27912899 TpConnectionWhenReadyCb
27922900 tp_connection_call_when_ready
28042912 tp_connection_parse_object_path
28052913 tp_connection_get_capabilities
28062914 tp_connection_get_avatar_requirements
2915 tp_connection_get_contact_info_flags
2916 tp_connection_get_contact_info_supported_fields
2917 tp_connection_set_contact_info_async
2918 tp_connection_set_contact_info_finish
28072919 TP_UNKNOWN_CONNECTION_STATUS
28082920 TP_ERRORS_DISCONNECTED
28092921 tp_connection_get_detailed_error
28182930 TP_IS_CONNECTION_CLASS
28192931 TpConnectionPrivate
28202932 tp_avatar_requirements_get_type
2933 tp_contact_info_field_spec_get_type
2934 tp_contact_info_spec_list_get_type
2935 tp_contact_info_field_get_type
2936 tp_contact_info_list_get_type
28212937 tp_connection_get_feature_quark_core
28222938 tp_connection_get_feature_quark_connected
28232939 tp_connection_get_feature_quark_capabilities
28242940 tp_connection_get_feature_quark_avatar_requirements
2941 tp_connection_get_feature_quark_contact_info
28252942 <SUBSECTION avatar-requirements>
28262943 TP_TYPE_AVATAR_REQUIREMENTS
28272944 TpAvatarRequirements
28282945 tp_avatar_requirements_new
28292946 tp_avatar_requirements_copy
28302947 tp_avatar_requirements_destroy
2948 <SUBSECTION contact-info>
2949 TpContactInfoFieldSpec
2950 TP_TYPE_CONTACT_INFO_FIELD_SPEC
2951 tp_contact_info_field_spec_copy
2952 tp_contact_info_field_spec_free
2953 TP_TYPE_CONTACT_INFO_SPEC_LIST
2954 tp_contact_info_spec_list_copy
2955 tp_contact_info_spec_list_free
2956 TpContactInfoField
2957 TP_TYPE_CONTACT_INFO_FIELD
2958 tp_contact_info_field_new
2959 tp_contact_info_field_copy
2960 tp_contact_info_field_free
2961 TP_TYPE_CONTACT_INFO_LIST
2962 tp_contact_info_list_copy
2963 tp_contact_info_list_free
28312964 <SUBSECTION>
28322965 tp_cli_connection_callback_for_connect
28332966 tp_cli_connection_call_connect
32533386 tp_connection_get_contacts_by_id
32543387 TpConnectionUpgradeContactsCb
32553388 tp_connection_upgrade_contacts
3389 tp_connection_refresh_contact_info
32563390 tp_contact_get_alias
32573391 tp_contact_get_avatar_token
32583392 tp_contact_get_avatar_file
32653399 tp_contact_get_presence_type
32663400 tp_contact_get_location
32673401 tp_contact_get_capabilities
3402 tp_contact_get_contact_info
3403 tp_contact_request_contact_info_async
3404 tp_contact_request_contact_info_finish
32683405 tp_contact_has_feature
32693406 <SUBSECTION Standard>
32703407 tp_contact_feature_get_type
33903527 tp_account_set_connect_automatically_finish
33913528 tp_account_get_has_been_online
33923529 tp_account_get_connection_status
3530 tp_account_get_detailed_error
33933531 tp_account_get_changing_presence
33943532 tp_account_get_current_presence
33953533 tp_account_get_requested_presence
35633701 tp_channel_dispatch_operation_borrow_possible_handlers
35643702 tp_channel_dispatch_operation_handle_with_async
35653703 tp_channel_dispatch_operation_handle_with_finish
3704 tp_channel_dispatch_operation_handle_with_time_async
3705 tp_channel_dispatch_operation_handle_with_time_finish
35663706 tp_channel_dispatch_operation_claim_async
35673707 tp_channel_dispatch_operation_claim_finish
35683708 <SUBSECTION Standard>
2020 tp_connection_manager_protocol_get_type
2121 tp_contact_feature_get_type
2222 tp_contact_get_type
23 tp_contact_info_field_get_type
24 tp_contact_info_field_spec_get_type
25 tp_contact_info_list_get_type
26 tp_contact_info_spec_list_get_type
2327 tp_dbus_daemon_get_type
2428 tp_dbus_error_get_type
2529 tp_dbus_name_type_get_type
4751 tp_svc_channel_dispatcher_get_type
4852 tp_svc_channel_dispatcher_interface_operation_list_get_type
4953 tp_svc_channel_get_type
54 tp_svc_channel_interface_anonymity_get_type
5055 tp_svc_channel_interface_call_state_get_type
5156 tp_svc_channel_interface_chat_state_get_type
5257 tp_svc_channel_interface_destroyable_get_type
5661 tp_svc_channel_interface_media_signalling_get_type
5762 tp_svc_channel_interface_messages_get_type
5863 tp_svc_channel_interface_password_get_type
64 tp_svc_channel_interface_service_point_get_type
5965 tp_svc_channel_interface_tube_get_type
6066 tp_svc_channel_request_get_type
6167 tp_svc_channel_type_contact_list_get_type
7379 tp_svc_client_observer_get_type
7480 tp_svc_connection_get_type
7581 tp_svc_connection_interface_aliasing_get_type
82 tp_svc_connection_interface_anonymity_get_type
7683 tp_svc_connection_interface_avatars_get_type
7784 tp_svc_connection_interface_balance_get_type
7885 tp_svc_connection_interface_capabilities_get_type
8289 tp_svc_connection_interface_location_get_type
8390 tp_svc_connection_interface_presence_get_type
8491 tp_svc_connection_interface_requests_get_type
92 tp_svc_connection_interface_service_point_get_type
8593 tp_svc_connection_interface_simple_presence_get_type
8694 tp_svc_connection_manager_get_type
8795 tp_svc_dbus_introspectable_get_type
6262
6363 </para>
6464
65 <!-- ##### ARG TpAccount:connection-error ##### -->
66 <para>
67
68 </para>
69
70 <!-- ##### ARG TpAccount:connection-error-details ##### -->
71 <para>
72
73 </para>
74
6575 <!-- ##### ARG TpAccount:connection-manager ##### -->
6676 <para>
6777
459469 @Returns:
460470
461471
472 <!-- ##### FUNCTION tp_account_get_detailed_error ##### -->
473 <para>
474
475 </para>
476
477 @self:
478 @details:
479 @Returns:
480
481
462482 <!-- ##### FUNCTION tp_account_get_changing_presence ##### -->
463483 <para>
464484
0 <!-- ##### SECTION Title ##### -->
1 base-contact-list
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### STRUCT TpBaseContactList ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpBaseContactList:connection ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### STRUCT TpBaseContactListClass ##### -->
34 <para>
35
36 </para>
37
38 @parent_class:
39 @get_contacts:
40 @get_states:
41 @get_subscriptions_persist:
42
43 <!-- ##### FUNCTION tp_base_contact_list_mixin_class_init ##### -->
44 <para>
45
46 </para>
47
48 @cls:
49
50
51 <!-- ##### FUNCTION tp_base_contact_list_mixin_register_with_contacts_mixin ##### -->
52 <para>
53
54 </para>
55
56 @conn:
57
58
59 <!-- ##### FUNCTION tp_base_contact_list_mixin_list_iface_init ##### -->
60 <para>
61
62 </para>
63
64 @klass:
65
66
67 <!-- ##### FUNCTION tp_base_contact_list_mixin_groups_iface_init ##### -->
68 <para>
69
70 </para>
71
72 @klass:
73
74
75 <!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
76 <para>
77
78 </para>
79
80 @self:
81
82
83 <!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
84 <para>
85
86 </para>
87
88 @self:
89 @changed:
90 @removed:
91
92
93 <!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
94 <para>
95
96 </para>
97
98 @self:
99 @Returns:
100
101
102 <!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
103 <para>
104
105 </para>
106
107 @self:
108 @Returns:
109
110
111 <!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
112 <para>
113
114 </para>
115
116 @self:
117 @Returns:
118
119
120 <!-- ##### FUNCTION tp_base_contact_list_get_subscriptions_persist ##### -->
121 <para>
122
123 </para>
124
125 @self:
126 @Returns:
127
128
129 <!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
130 <para>
131
132 </para>
133
134 @self:
135 @Returns:
136
137
138 <!-- ##### FUNCTION tp_base_contact_list_get_contacts ##### -->
139 <para>
140
141 </para>
142
143 @self:
144 @Returns:
145
146
147 <!-- ##### USER_FUNCTION TpBaseContactListGetStatesFunc ##### -->
148 <para>
149
150 </para>
151
152 @self:
153 @contact:
154 @subscribe:
155 @publish:
156 @publish_request:
157
158
159 <!-- ##### FUNCTION tp_base_contact_list_get_states ##### -->
160 <para>
161
162 </para>
163
164 @self:
165 @contact:
166 @subscribe:
167 @publish:
168 @publish_request:
169
170
171 <!-- ##### USER_FUNCTION TpBaseContactListUIntFunc ##### -->
172 <para>
173
174 </para>
175
176 @self:
177 @Returns:
178
179
180 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_LIST ##### -->
181 <para>
182
183 </para>
184
185
186
187 <!-- ##### STRUCT TpMutableContactListInterface ##### -->
188 <para>
189
190 </para>
191
192 @parent:
193 @request_subscription:
194 @authorize_publication:
195 @remove_contacts:
196 @unsubscribe:
197 @unpublish:
198 @store_contacts:
199 @can_change_subscriptions:
200 @get_request_uses_message:
201
202 <!-- ##### FUNCTION tp_base_contact_list_can_change_subscriptions ##### -->
203 <para>
204
205 </para>
206
207 @self:
208 @Returns:
209
210
211 <!-- ##### FUNCTION tp_base_contact_list_get_request_uses_message ##### -->
212 <para>
213
214 </para>
215
216 @self:
217 @Returns:
218
219
220 <!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
221 <para>
222
223 </para>
224
225 @self:
226 @contacts:
227 @message:
228
229
230 <!-- ##### FUNCTION tp_base_contact_list_request_subscription ##### -->
231 <para>
232
233 </para>
234
235 @self:
236 @contacts:
237 @message:
238
239
240 <!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
241 <para>
242
243 </para>
244
245 @self:
246 @contacts:
247
248
249 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication ##### -->
250 <para>
251
252 </para>
253
254 @self:
255 @contacts:
256
257
258 <!-- ##### FUNCTION tp_base_contact_list_store_contacts ##### -->
259 <para>
260
261 </para>
262
263 @self:
264 @contacts:
265
266
267 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts ##### -->
268 <para>
269
270 </para>
271
272 @self:
273 @contacts:
274
275
276 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe ##### -->
277 <para>
278
279 </para>
280
281 @self:
282 @contacts:
283
284
285 <!-- ##### FUNCTION tp_base_contact_list_unpublish ##### -->
286 <para>
287
288 </para>
289
290 @self:
291 @contacts:
292
293
294 <!-- ##### MACRO TP_TYPE_CONTACT_GROUP_LIST ##### -->
295 <para>
296
297 </para>
298
299
300
301 <!-- ##### STRUCT TpContactGroupListInterface ##### -->
302 <para>
303
304 </para>
305
306 @parent:
307 @get_groups:
308 @get_contact_groups:
309 @has_disjoint_groups:
310 @normalize_group:
311
312 <!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
313 <para>
314
315 </para>
316
317 @self:
318 @s:
319 @Returns:
320
321
322 <!-- ##### FUNCTION tp_base_contact_list_normalize_group ##### -->
323 <para>
324
325 </para>
326
327 @self:
328 @s:
329 @Returns:
330
331
332 <!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
333 <para>
334
335 </para>
336
337 @self:
338 @contact:
339 @Returns:
340
341
342 <!-- ##### FUNCTION tp_base_contact_list_get_contact_groups ##### -->
343 <para>
344
345 </para>
346
347 @self:
348 @contact:
349 @Returns:
350
351
352 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
353 <para>
354
355 </para>
356
357 @self:
358 @Returns:
359
360
361 <!-- ##### FUNCTION tp_base_contact_list_get_groups ##### -->
362 <para>
363
364 </para>
365
366 @self:
367 @Returns:
368
369
370 <!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
371 <para>
372
373 </para>
374
375 @self:
376 @old_name:
377 @new_name:
378
379
380 <!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
381 <para>
382
383 </para>
384
385 @self:
386 @contacts:
387 @added:
388 @n_added:
389 @removed:
390 @n_removed:
391
392
393 <!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
394 <para>
395
396 </para>
397
398 @self:
399 @created:
400 @n_created:
401
402
403 <!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
404 <para>
405
406 </para>
407
408 @self:
409 @removed:
410 @n_removed:
411
412
413 <!-- ##### FUNCTION tp_base_contact_list_has_disjoint_groups ##### -->
414 <para>
415
416 </para>
417
418 @self:
419 @Returns:
420
421
422 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_GROUP_LIST ##### -->
423 <para>
424
425 </para>
426
427
428
429 <!-- ##### STRUCT TpMutableContactGroupListInterface ##### -->
430 <para>
431
432 </para>
433
434 @parent:
435 @set_contact_groups:
436 @create_groups:
437 @add_to_group:
438 @remove_from_group:
439 @remove_group:
440 @rename_group:
441 @get_group_storage:
442
443 <!-- ##### USER_FUNCTION TpBaseContactListSetContactGroupsFunc ##### -->
444 <para>
445
446 </para>
447
448 @self:
449 @contact:
450 @normalized_names:
451 @n_names:
452
453
454 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups ##### -->
455 <para>
456
457 </para>
458
459 @self:
460 @contact:
461 @normalized_names:
462 @n_names:
463
464
465 <!-- ##### USER_FUNCTION TpBaseContactListCreateGroupsFunc ##### -->
466 <para>
467
468 </para>
469
470 @self:
471 @normalized_names:
472 @n_names:
473
474
475 <!-- ##### FUNCTION tp_base_contact_list_create_groups ##### -->
476 <para>
477
478 </para>
479
480 @self:
481 @normalized_names:
482 @n_names:
483
484
485 <!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
486 <para>
487
488 </para>
489
490 @self:
491 @group:
492 @contacts:
493
494
495 <!-- ##### FUNCTION tp_base_contact_list_add_to_group ##### -->
496 <para>
497
498 </para>
499
500 @self:
501 @group:
502 @contacts:
503
504
505 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group ##### -->
506 <para>
507
508 </para>
509
510 @self:
511 @group:
512 @contacts:
513
514
515 <!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
516 <para>
517
518 </para>
519
520 @self:
521 @group:
522
523
524 <!-- ##### FUNCTION tp_base_contact_list_remove_group ##### -->
525 <para>
526
527 </para>
528
529 @self:
530 @group:
531
532
533 <!-- ##### USER_FUNCTION TpBaseContactListRenameGroupFunc ##### -->
534 <para>
535
536 </para>
537
538 @self:
539 @old_name:
540 @new_name:
541
542
543 <!-- ##### FUNCTION tp_base_contact_list_rename_group ##### -->
544 <para>
545
546 </para>
547
548 @self:
549 @old_name:
550 @new_name:
551
552
553 <!-- ##### FUNCTION tp_base_contact_list_get_group_storage ##### -->
554 <para>
555
556 </para>
557
558 @self:
559 @Returns:
560
561
562 <!-- ##### MACRO TP_TYPE_BLOCKABLE_CONTACT_LIST ##### -->
563 <para>
564
565 </para>
566
567
568
569 <!-- ##### STRUCT TpBlockableContactListInterface ##### -->
570 <para>
571
572 </para>
573
574 @parent:
575 @get_blocked_contacts:
576 @block_contacts:
577 @unblock_contacts:
578 @can_block:
579
580 <!-- ##### FUNCTION tp_base_contact_list_can_block ##### -->
581 <para>
582
583 </para>
584
585 @self:
586 @Returns:
587
588
589 <!-- ##### FUNCTION tp_base_contact_list_get_blocked_contacts ##### -->
590 <para>
591
592 </para>
593
594 @self:
595 @Returns:
596
597
598 <!-- ##### FUNCTION tp_base_contact_list_block_contacts ##### -->
599 <para>
600
601 </para>
602
603 @self:
604 @contacts:
605
606
607 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts ##### -->
608 <para>
609
610 </para>
611
612 @self:
613 @contacts:
614
615
616 <!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
617 <para>
618
619 </para>
620
621 @self:
622 @changed:
623
624
290290 @Returns:
291291
292292
293 <!-- ##### FUNCTION tp_channel_dispatch_operation_handle_with_time_async ##### -->
294 <para>
295
296 </para>
297
298 @self:
299 @handler:
300 @user_action_timestamp:
301 @callback:
302 @user_data:
303
304
305 <!-- ##### FUNCTION tp_channel_dispatch_operation_handle_with_time_finish ##### -->
306 <para>
307
308 </para>
309
310 @self:
311 @result:
312 @error:
313 @Returns:
314
315
293316 <!-- ##### FUNCTION tp_channel_dispatch_operation_claim_async ##### -->
294317 <para>
295318
0 <!-- ##### SECTION Title ##### -->
1 cli-anonymity
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### FUNCTION tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed ##### -->
23 <para>
24
25 </para>
26
27 @proxy:
28 @callback:
29 @user_data:
30 @destroy:
31 @weak_object:
32 @error:
33 @Returns:
34
35
36 <!-- ##### USER_FUNCTION tp_cli_connection_interface_anonymity_signal_callback_anonymity_modes_changed ##### -->
37 <para>
38
39 </para>
40
41 @proxy:
42 @arg_Modes:
43 @user_data:
44 @weak_object:
45
46
0 <!-- ##### SECTION Title ##### -->
1 cli-service-point
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### FUNCTION tp_cli_channel_interface_service_point_connect_to_service_point_changed ##### -->
23 <para>
24
25 </para>
26
27 @proxy:
28 @callback:
29 @user_data:
30 @destroy:
31 @weak_object:
32 @error:
33 @Returns:
34
35
36 <!-- ##### USER_FUNCTION tp_cli_channel_interface_service_point_signal_callback_service_point_changed ##### -->
37 <para>
38
39 </para>
40
41 @proxy:
42 @arg_Service_Point:
43 @user_data:
44 @weak_object:
45
46
47 <!-- ##### FUNCTION tp_cli_connection_interface_service_point_connect_to_service_points_changed ##### -->
48 <para>
49
50 </para>
51
52 @proxy:
53 @callback:
54 @user_data:
55 @destroy:
56 @weak_object:
57 @error:
58 @Returns:
59
60
61 <!-- ##### USER_FUNCTION tp_cli_connection_interface_service_point_signal_callback_service_points_changed ##### -->
62 <para>
63
64 </para>
65
66 @proxy:
67 @arg_Service_Points:
68 @user_data:
69 @weak_object:
70
71
0 <!-- ##### SECTION Title ##### -->
1 connection-contact-list
2
3 <!-- ##### SECTION Short_Description ##### -->
4
5
6 <!-- ##### SECTION Long_Description ##### -->
7 <para>
8
9 </para>
10
11 <!-- ##### SECTION See_Also ##### -->
12 <para>
13
14 </para>
15
16 <!-- ##### SECTION Stability_Level ##### -->
17
18
19 <!-- ##### SECTION Image ##### -->
20
21
22 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_add_to_group ##### -->
23 <para>
24
25 </para>
26
27 @proxy:
28 @timeout_ms:
29 @in_Group:
30 @in_Members:
31 @callback:
32 @user_data:
33 @destroy:
34 @weak_object:
35 @Returns:
36
37
38 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_from_group ##### -->
39 <para>
40
41 </para>
42
43 @proxy:
44 @timeout_ms:
45 @in_Group:
46 @in_Members:
47 @callback:
48 @user_data:
49 @destroy:
50 @weak_object:
51 @Returns:
52
53
54 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_group ##### -->
55 <para>
56
57 </para>
58
59 @proxy:
60 @timeout_ms:
61 @in_Group:
62 @callback:
63 @user_data:
64 @destroy:
65 @weak_object:
66 @Returns:
67
68
69 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_rename_group ##### -->
70 <para>
71
72 </para>
73
74 @proxy:
75 @timeout_ms:
76 @in_Old_Name:
77 @in_New_Name:
78 @callback:
79 @user_data:
80 @destroy:
81 @weak_object:
82 @Returns:
83
84
85 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_contact_groups ##### -->
86 <para>
87
88 </para>
89
90 @proxy:
91 @timeout_ms:
92 @in_Contact:
93 @in_Groups:
94 @callback:
95 @user_data:
96 @destroy:
97 @weak_object:
98 @Returns:
99
100
101 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_group_members ##### -->
102 <para>
103
104 </para>
105
106 @proxy:
107 @timeout_ms:
108 @in_Group:
109 @in_Members:
110 @callback:
111 @user_data:
112 @destroy:
113 @weak_object:
114 @Returns:
115
116
117 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_add_to_group ##### -->
118 <para>
119
120 </para>
121
122 @proxy:
123 @error:
124 @user_data:
125 @weak_object:
126
127
128 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_from_group ##### -->
129 <para>
130
131 </para>
132
133 @proxy:
134 @error:
135 @user_data:
136 @weak_object:
137
138
139 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_group ##### -->
140 <para>
141
142 </para>
143
144 @proxy:
145 @error:
146 @user_data:
147 @weak_object:
148
149
150 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_rename_group ##### -->
151 <para>
152
153 </para>
154
155 @proxy:
156 @error:
157 @user_data:
158 @weak_object:
159
160
161 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_contact_groups ##### -->
162 <para>
163
164 </para>
165
166 @proxy:
167 @error:
168 @user_data:
169 @weak_object:
170
171
172 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_group_members ##### -->
173 <para>
174
175 </para>
176
177 @proxy:
178 @error:
179 @user_data:
180 @weak_object:
181
182
183 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_group_renamed ##### -->
184 <para>
185
186 </para>
187
188 @proxy:
189 @callback:
190 @user_data:
191 @destroy:
192 @weak_object:
193 @error:
194 @Returns:
195
196
197 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_changed ##### -->
198 <para>
199
200 </para>
201
202 @proxy:
203 @callback:
204 @user_data:
205 @destroy:
206 @weak_object:
207 @error:
208 @Returns:
209
210
211 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_created ##### -->
212 <para>
213
214 </para>
215
216 @proxy:
217 @callback:
218 @user_data:
219 @destroy:
220 @weak_object:
221 @error:
222 @Returns:
223
224
225 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_removed ##### -->
226 <para>
227
228 </para>
229
230 @proxy:
231 @callback:
232 @user_data:
233 @destroy:
234 @weak_object:
235 @error:
236 @Returns:
237
238
239 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_group_renamed ##### -->
240 <para>
241
242 </para>
243
244 @proxy:
245 @arg_Old_Name:
246 @arg_New_Name:
247 @user_data:
248 @weak_object:
249
250
251 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_changed ##### -->
252 <para>
253
254 </para>
255
256 @proxy:
257 @arg_Contact:
258 @arg_Added:
259 @arg_Removed:
260 @user_data:
261 @weak_object:
262
263
264 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_created ##### -->
265 <para>
266
267 </para>
268
269 @proxy:
270 @arg_Names:
271 @user_data:
272 @weak_object:
273
274
275 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_removed ##### -->
276 <para>
277
278 </para>
279
280 @proxy:
281 @arg_Names:
282 @user_data:
283 @weak_object:
284
285
286 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_authorize_publication ##### -->
287 <para>
288
289 </para>
290
291 @proxy:
292 @timeout_ms:
293 @in_Contacts:
294 @callback:
295 @user_data:
296 @destroy:
297 @weak_object:
298 @Returns:
299
300
301 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_remove_contacts ##### -->
302 <para>
303
304 </para>
305
306 @proxy:
307 @timeout_ms:
308 @in_Contacts:
309 @callback:
310 @user_data:
311 @destroy:
312 @weak_object:
313 @Returns:
314
315
316 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_request_subscription ##### -->
317 <para>
318
319 </para>
320
321 @proxy:
322 @timeout_ms:
323 @in_Contacts:
324 @in_Message:
325 @callback:
326 @user_data:
327 @destroy:
328 @weak_object:
329 @Returns:
330
331
332 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unpublish ##### -->
333 <para>
334
335 </para>
336
337 @proxy:
338 @timeout_ms:
339 @in_Contacts:
340 @callback:
341 @user_data:
342 @destroy:
343 @weak_object:
344 @Returns:
345
346
347 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unsubscribe ##### -->
348 <para>
349
350 </para>
351
352 @proxy:
353 @timeout_ms:
354 @in_Contacts:
355 @callback:
356 @user_data:
357 @destroy:
358 @weak_object:
359 @Returns:
360
361
362 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_authorize_publication ##### -->
363 <para>
364
365 </para>
366
367 @proxy:
368 @error:
369 @user_data:
370 @weak_object:
371
372
373 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_remove_contacts ##### -->
374 <para>
375
376 </para>
377
378 @proxy:
379 @error:
380 @user_data:
381 @weak_object:
382
383
384 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_request_subscription ##### -->
385 <para>
386
387 </para>
388
389 @proxy:
390 @error:
391 @user_data:
392 @weak_object:
393
394
395 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unpublish ##### -->
396 <para>
397
398 </para>
399
400 @proxy:
401 @error:
402 @user_data:
403 @weak_object:
404
405
406 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unsubscribe ##### -->
407 <para>
408
409 </para>
410
411 @proxy:
412 @error:
413 @user_data:
414 @weak_object:
415
416
417 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contacts_changed ##### -->
418 <para>
419
420 </para>
421
422 @proxy:
423 @callback:
424 @user_data:
425 @destroy:
426 @weak_object:
427 @error:
428 @Returns:
429
430
431 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contacts_changed ##### -->
432 <para>
433
434 </para>
435
436 @proxy:
437 @arg_Changes:
438 @arg_Removals:
439 @user_data:
440 @weak_object:
441
442
117117
118118
119119 <!-- ##### MACRO TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS ##### -->
120 <para>
121
122 </para>
123
124
125
126 <!-- ##### MACRO TP_CONNECTION_FEATURE_CONTACT_INFO ##### -->
120127 <para>
121128
122129 </para>
315322 </para>
316323
317324 @self:
325 @Returns:
326
327
328 <!-- ##### FUNCTION tp_connection_get_contact_info_flags ##### -->
329 <para>
330
331 </para>
332
333 @self:
334 @Returns:
335
336
337 <!-- ##### FUNCTION tp_connection_get_contact_info_supported_fields ##### -->
338 <para>
339
340 </para>
341
342 @self:
343 @Returns:
344
345
346 <!-- ##### FUNCTION tp_connection_set_contact_info_async ##### -->
347 <para>
348
349 </para>
350
351 @self:
352 @info:
353 @callback:
354 @user_data:
355
356
357 <!-- ##### FUNCTION tp_connection_set_contact_info_finish ##### -->
358 <para>
359
360 </para>
361
362 @self:
363 @result:
364 @error:
318365 @Returns:
319366
320367
396443 @self:
397444
398445
446 <!-- ##### STRUCT TpContactInfoFieldSpec ##### -->
447 <para>
448
449 </para>
450
451 @name:
452 @parameters:
453 @flags:
454 @max:
455
456 <!-- ##### MACRO TP_TYPE_CONTACT_INFO_FIELD_SPEC ##### -->
457 <para>
458
459 </para>
460
461
462
463 <!-- ##### FUNCTION tp_contact_info_field_spec_copy ##### -->
464 <para>
465
466 </para>
467
468 @self:
469 @Returns:
470
471
472 <!-- ##### FUNCTION tp_contact_info_field_spec_free ##### -->
473 <para>
474
475 </para>
476
477 @self:
478
479
480 <!-- ##### MACRO TP_TYPE_CONTACT_INFO_SPEC_LIST ##### -->
481 <para>
482
483 </para>
484
485
486
487 <!-- ##### FUNCTION tp_contact_info_spec_list_copy ##### -->
488 <para>
489
490 </para>
491
492 @list:
493 @Returns:
494
495
496 <!-- ##### FUNCTION tp_contact_info_spec_list_free ##### -->
497 <para>
498
499 </para>
500
501 @list:
502
503
504 <!-- ##### STRUCT TpContactInfoField ##### -->
505 <para>
506
507 </para>
508
509 @field_name:
510 @parameters:
511 @field_value:
512
513 <!-- ##### MACRO TP_TYPE_CONTACT_INFO_FIELD ##### -->
514 <para>
515
516 </para>
517
518
519
520 <!-- ##### FUNCTION tp_contact_info_field_new ##### -->
521 <para>
522
523 </para>
524
525 @field_name:
526 @parameters:
527 @field_value:
528 @Returns:
529
530
531 <!-- ##### FUNCTION tp_contact_info_field_copy ##### -->
532 <para>
533
534 </para>
535
536 @self:
537 @Returns:
538
539
540 <!-- ##### FUNCTION tp_contact_info_field_free ##### -->
541 <para>
542
543 </para>
544
545 @self:
546
547
548 <!-- ##### MACRO TP_TYPE_CONTACT_INFO_LIST ##### -->
549 <para>
550
551 </para>
552
553
554
555 <!-- ##### FUNCTION tp_contact_info_list_copy ##### -->
556 <para>
557
558 </para>
559
560 @list:
561 @Returns:
562
563
564 <!-- ##### FUNCTION tp_contact_info_list_free ##### -->
565 <para>
566
567 </para>
568
569 @list:
570
571
399572 <!-- ##### USER_FUNCTION tp_cli_connection_callback_for_connect ##### -->
400573 <para>
401574
1919 <!-- ##### SECTION Image ##### -->
2020
2121
22 <!-- ##### STRUCT TpContactListManager ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpContactListManager:connection ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### STRUCT TpContactListManagerClass ##### -->
22 <!-- ##### STRUCT TpBaseContactList ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### ARG TpBaseContactList:connection ##### -->
29 <para>
30
31 </para>
32
33 <!-- ##### STRUCT TpBaseContactListClass ##### -->
3434 <para>
3535
3636 </para>
4545 @TP_PRESENCE_STATE_ASK:
4646 @TP_PRESENCE_STATE_YES:
4747
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 ##### -->
48 <!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
49 <para>
50
51 </para>
52
53 @self:
54
55
56 <!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
5757 <para>
5858
5959 </para>
6363 @removed:
6464
6565
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 ##### -->
66 <!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
67 <para>
68
69 </para>
70
71 @self:
72 @Returns:
73
74
75 <!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
76 <para>
77
78 </para>
79
80 @self:
81 @Returns:
82
83
84 <!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
85 <para>
86
87 </para>
88
89 @self:
90 @Returns:
91
92
93 <!-- ##### FUNCTION tp_base_contact_list_class_implement_can_change_subscriptions ##### -->
9494 <para>
9595
9696 </para>
9999 @check:
100100
101101
102 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_request_uses_message ##### -->
102 <!-- ##### FUNCTION tp_base_contact_list_class_implement_request_uses_message ##### -->
103103 <para>
104104
105105 </para>
108108 @check:
109109
110110
111 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_subscriptions_persist ##### -->
111 <!-- ##### FUNCTION tp_base_contact_list_class_implement_subscriptions_persist ##### -->
112112 <para>
113113
114114 </para>
117117 @check:
118118
119119
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 ##### -->
120 <!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
121 <para>
122
123 </para>
124
125 @self:
126 @Returns:
127
128
129 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contacts ##### -->
130 <para>
131
132 </para>
133
134 @cls:
135 @impl:
136
137
138 <!-- ##### USER_FUNCTION TpBaseContactListGetPresenceStatesFunc ##### -->
139139 <para>
140140
141141 </para>
147147 @publish_request:
148148
149149
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 ##### -->
150 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_states ##### -->
151 <para>
152
153 </para>
154
155 @cls:
156 @impl:
157
158
159 <!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
160160 <para>
161161
162162 </para>
168168 @Returns:
169169
170170
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 ##### -->
171 <!-- ##### FUNCTION tp_base_contact_list_class_implement_request_subscription ##### -->
172 <para>
173
174 </para>
175
176 @cls:
177 @impl:
178
179
180 <!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
181181 <para>
182182
183183 </para>
188188 @Returns:
189189
190190
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 ##### -->
191 <!-- ##### FUNCTION tp_base_contact_list_class_implement_authorize_publication ##### -->
192 <para>
193
194 </para>
195
196 @cls:
197 @impl:
198
199
200 <!-- ##### FUNCTION tp_base_contact_list_class_implement_just_store_contacts ##### -->
201 <para>
202
203 </para>
204
205 @cls:
206 @impl:
207
208
209 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_contacts ##### -->
210 <para>
211
212 </para>
213
214 @cls:
215 @impl:
216
217
218 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unsubscribe ##### -->
219 <para>
220
221 </para>
222
223 @cls:
224 @impl:
225
226
227 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unpublish ##### -->
228 <para>
229
230 </para>
231
232 @cls:
233 @impl:
234
235
236 <!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
237237 <para>
238238
239239 </para>
243243 @Returns:
244244
245245
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 ##### -->
246 <!-- ##### FUNCTION tp_base_contact_list_class_implement_normalize_group ##### -->
247 <para>
248
249 </para>
250
251 @cls:
252 @impl:
253
254
255 <!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
256256 <para>
257257
258258 </para>
262262 @Returns:
263263
264264
265 <!-- ##### USER_FUNCTION TpContactListManagerGetGroupsFunc ##### -->
266 <para>
267
268 </para>
269
270 @self:
271 @Returns:
272
273
274 <!-- ##### USER_FUNCTION TpContactListManagerGroupContactsFunc ##### -->
265 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
266 <para>
267
268 </para>
269
270 @self:
271 @Returns:
272
273
274 <!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
275275 <para>
276276
277277 </para>
281281 @contacts:
282282
283283
284 <!-- ##### USER_FUNCTION TpContactListManagerRemoveGroupFunc ##### -->
284 <!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
285285 <para>
286286
287287 </para>
292292 @Returns:
293293
294294
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 ##### -->
295 <!-- ##### FUNCTION tp_base_contact_list_class_implement_add_to_group ##### -->
296 <para>
297
298 </para>
299
300 @cls:
301 @impl:
302
303
304 <!-- ##### FUNCTION tp_base_contact_list_class_implement_disjoint_groups ##### -->
305 <para>
306
307 </para>
308
309 @cls:
310 @impl:
311
312
313 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contact_groups ##### -->
314 <para>
315
316 </para>
317
318 @cls:
319 @impl:
320
321
322 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_groups ##### -->
323 <para>
324
325 </para>
326
327 @cls:
328 @impl:
329
330
331 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_from_group ##### -->
332 <para>
333
334 </para>
335
336 @cls:
337 @impl:
338
339
340 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_group ##### -->
341 <para>
342
343 </para>
344
345 @cls:
346 @impl:
347
348
349 <!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
350350 <para>
351351
352352 </para>
356356 @new_name:
357357
358358
359 <!-- ##### FUNCTION tp_contact_list_manager_groups_changed ##### -->
359 <!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
360360 <para>
361361
362362 </para>
364364 @self:
365365 @contacts:
366366 @added:
367 @n_added:
367368 @removed:
368
369
370 <!-- ##### FUNCTION tp_contact_list_manager_groups_created ##### -->
369 @n_removed:
370
371
372 <!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
371373 <para>
372374
373375 </para>
374376
375377 @self:
376378 @created:
377
378
379 <!-- ##### FUNCTION tp_contact_list_manager_groups_removed ##### -->
379 @n_created:
380
381
382 <!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
380383 <para>
381384
382385 </para>
383386
384387 @self:
385388 @removed:
386
387
388 <!-- ##### USER_FUNCTION TpContactListManagerContactBooleanFunc ##### -->
389 @n_removed:
390
391
392 <!-- ##### USER_FUNCTION TpBaseContactListContactBooleanFunc ##### -->
389393 <para>
390394
391395 </para>
395399 @Returns:
396400
397401
398 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_can_block ##### -->
402 <!-- ##### FUNCTION tp_base_contact_list_class_implement_can_block ##### -->
399403 <para>
400404
401405 </para>
404408 @check:
405409
406410
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 ##### -->
411 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_blocked_contacts ##### -->
412 <para>
413
414 </para>
415
416 @cls:
417 @impl:
418
419
420 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contact_blocked ##### -->
421 <para>
422
423 </para>
424
425 @cls:
426 @impl:
427
428
429 <!-- ##### FUNCTION tp_base_contact_list_class_implement_block_contacts ##### -->
430 <para>
431
432 </para>
433
434 @cls:
435 @impl:
436
437
438 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unblock_contacts ##### -->
439 <para>
440
441 </para>
442
443 @cls:
444 @impl:
445
446
447 <!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
444448 <para>
445449
446450 </para>
2525 </para>
2626
2727
28 <!-- ##### SIGNAL TpContact::presence-changed ##### -->
29 <para>
30
31 </para>
32
33 @tpcontact: the object which received the signal.
34 @arg1:
35 @arg2:
36 @arg3:
37
2838 <!-- ##### ARG TpContact:alias ##### -->
2939 <para>
3040
5161 </para>
5262
5363 <!-- ##### ARG TpContact:connection ##### -->
64 <para>
65
66 </para>
67
68 <!-- ##### ARG TpContact:contact-info ##### -->
5469 <para>
5570
5671 </para>
96111 @TP_CONTACT_FEATURE_LOCATION:
97112 @TP_CONTACT_FEATURE_CAPABILITIES:
98113 @TP_CONTACT_FEATURE_AVATAR_DATA:
114 @TP_CONTACT_FEATURE_CONTACT_INFO:
99115
100116 <!-- ##### MACRO TP_TYPE_CONTACT_FEATURE ##### -->
101117 <para>
195211 @weak_object:
196212
197213
214 <!-- ##### FUNCTION tp_connection_refresh_contact_info ##### -->
215 <para>
216
217 </para>
218
219 @self:
220 @n_contacts:
221 @contacts:
222
223
198224 <!-- ##### FUNCTION tp_contact_get_alias ##### -->
199225 <para>
200226
303329 @Returns:
304330
305331
332 <!-- ##### FUNCTION tp_contact_get_contact_info ##### -->
333 <para>
334
335 </para>
336
337 @self:
338 @Returns:
339
340
341 <!-- ##### FUNCTION tp_contact_request_contact_info_async ##### -->
342 <para>
343
344 </para>
345
346 @self:
347 @cancellable:
348 @callback:
349 @user_data:
350
351
352 <!-- ##### FUNCTION tp_contact_request_contact_info_finish ##### -->
353 <para>
354
355 </para>
356
357 @self:
358 @result:
359 @error:
360 @Returns:
361
362
306363 <!-- ##### FUNCTION tp_contact_has_feature ##### -->
307364 <para>
308365
682682
683683 @TP_LOCATION_FEATURE_CAN_SET:
684684
685 <!-- ##### ENUM TpServicePointType ##### -->
686 <para>
687
688 </para>
689
690 @TP_SERVICE_POINT_TYPE_NONE:
691 @TP_SERVICE_POINT_TYPE_EMERGENCY:
692 @TP_SERVICE_POINT_TYPE_COUNSELING:
693
694 <!-- ##### MACRO NUM_TP_SERVICE_POINT_TYPES ##### -->
695 <para>
696
697 </para>
698
699
700
701 <!-- ##### ENUM TpAnonymityModeFlags ##### -->
702 <para>
703
704 </para>
705
706 @TP_ANONYMITY_MODE_CLIENT_INFO:
707 @TP_ANONYMITY_MODE_SHOW_CLIENT_INFO:
708 @TP_ANONYMITY_MODE_NETWORK_INFO:
709
8383 @TP_ERROR_REGISTRATION_EXISTS:
8484 @TP_ERROR_SERVICE_BUSY:
8585 @TP_ERROR_RESOURCE_UNAVAILABLE:
86 @TP_ERROR_WOULD_BREAK_ANONYMITY:
8687
8788 <!-- ##### FUNCTION tp_g_set_error_invalid_handle_type ##### -->
8889 <para>
377378
378379
379380
381 <!-- ##### MACRO TP_ERROR_STR_WOULD_BREAK_ANONYMITY ##### -->
382 <para>
383
384 </para>
385
386
387
497497
498498
499499
500 <!-- ##### MACRO TP_HASH_TYPE_CHAT_STATE_MAP ##### -->
501 <para>
502
503 </para>
504
505
506
500507 <!-- ##### MACRO TP_HASH_TYPE_SUPPORTED_SOCKET_MAP ##### -->
501508 <para>
502509
672679
673680
674681
682 <!-- ##### MACRO TP_STRUCT_TYPE_SERVICE_POINT ##### -->
683 <para>
684
685 </para>
686
687
688
689 <!-- ##### MACRO TP_ARRAY_TYPE_SERVICE_POINT_INFO_LIST ##### -->
690 <para>
691
692 </para>
693
694
695
696 <!-- ##### MACRO TP_STRUCT_TYPE_SERVICE_POINT_INFO ##### -->
697 <para>
698
699 </para>
700
701
702
675703 <!-- ##### MACRO TP_STRUCT_TYPE_AVATAR ##### -->
676704 <para>
677705
245245 @Returns:
246246
247247
248 <!-- ##### FUNCTION tp_handle_set_new_from_array ##### -->
249 <para>
250
251 </para>
252
253 @repo:
254 @array:
255 @Returns:
256
257
248258 <!-- ##### FUNCTION tp_handle_set_copy ##### -->
249259 <para>
250260
173173
174174
175175
176 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_ANONYMITY ##### -->
177 <para>
178
179 </para>
180
181
182
183 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_ANONYMITY ##### -->
184 <para>
185
186 </para>
187
188
189
176190 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_AVATARS ##### -->
177191 <para>
178192
313327
314328
315329
330 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_SERVICE_POINT ##### -->
331 <para>
332
333 </para>
334
335
336
337 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_SERVICE_POINT ##### -->
338 <para>
339
340 </para>
341
342
343
316344 <!-- ##### MACRO TP_IFACE_CHANNEL ##### -->
317345 <para>
318346
453481
454482
455483
484 <!-- ##### MACRO TP_IFACE_CHANNEL_INTERFACE_ANONYMITY ##### -->
485 <para>
486
487 </para>
488
489
490
491 <!-- ##### MACRO TP_IFACE_QUARK_CHANNEL_INTERFACE_ANONYMITY ##### -->
492 <para>
493
494 </para>
495
496
497
456498 <!-- ##### MACRO TP_IFACE_CHANNEL_INTERFACE_CALL_STATE ##### -->
457499 <para>
458500
579621
580622
581623
624 <!-- ##### MACRO TP_IFACE_CHANNEL_INTERFACE_SERVICE_POINT ##### -->
625 <para>
626
627 </para>
628
629
630
631 <!-- ##### MACRO TP_IFACE_QUARK_CHANNEL_INTERFACE_SERVICE_POINT ##### -->
632 <para>
633
634 </para>
635
636
637
582638 <!-- ##### MACRO TP_IFACE_CHANNEL_DISPATCHER ##### -->
583639 <para>
584640
768824
769825
770826
827 <!-- ##### MACRO TP_PROP_ACCOUNT_CONNECTION_ERROR ##### -->
828 <para>
829
830 </para>
831
832
833
834 <!-- ##### MACRO TP_PROP_ACCOUNT_CONNECTION_ERROR_DETAILS ##### -->
835 <para>
836
837 </para>
838
839
840
771841 <!-- ##### MACRO TP_PROP_ACCOUNT_CONNECTION_STATUS ##### -->
772842 <para>
773843
9781048
9791049
9801050
1051 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY ##### -->
1052 <para>
1053
1054 </para>
1055
1056
1057
1058 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMITY_MODES ##### -->
1059 <para>
1060
1061 </para>
1062
1063
1064
1065 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_ANONYMITY_ANONYMOUS_ID ##### -->
1066 <para>
1067
1068 </para>
1069
1070
1071
1072 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_CHAT_STATE_CHAT_STATES ##### -->
1073 <para>
1074
1075 </para>
1076
1077
1078
9811079 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_DTMF_CURRENTLY_SENDING_TONES ##### -->
9821080 <para>
9831081
10621160
10631161
10641162
1163 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_CURRENT_SERVICE_POINT ##### -->
1164 <para>
1165
1166 </para>
1167
1168
1169
1170 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_SERVICE_POINT_INITIAL_SERVICE_POINT ##### -->
1171 <para>
1172
1173 </para>
1174
1175
1176
10651177 <!-- ##### MACRO TP_PROP_CHANNEL_INTERFACE_TUBE_PARAMETERS ##### -->
10661178 <para>
10671179
13351447
13361448
13371449
1450 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MANDATORY ##### -->
1451 <para>
1452
1453 </para>
1454
1455
1456
1457 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_ANONYMITY_ANONYMITY_MODES ##### -->
1458 <para>
1459
1460 </para>
1461
1462
1463
1464 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_ANONYMITY_SUPPORTED_ANONYMITY_MODES ##### -->
1465 <para>
1466
1467 </para>
1468
1469
1470
13381471 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_AVATARS_MAXIMUM_AVATAR_BYTES ##### -->
13391472 <para>
13401473
14541587
14551588
14561589
1590 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_SERVICE_POINT_KNOWN_SERVICE_POINTS ##### -->
1591 <para>
1592
1593 </para>
1594
1595
1596
14571597 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_SIMPLE_PRESENCE_STATUSES ##### -->
14581598 <para>
14591599
0 <!-- ##### SECTION Title ##### -->
1 svc-anonymity
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 TpSvcConnectionInterfaceAnonymity ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### SIGNAL TpSvcConnectionInterfaceAnonymity::anonymity-modes-changed ##### -->
29 <para>
30
31 </para>
32
33 @tpsvcconnectioninterfaceanonymity: the object which received the signal.
34 @arg1:
35
36 <!-- ##### STRUCT TpSvcConnectionInterfaceAnonymityClass ##### -->
37 <para>
38
39 </para>
40
41
42 <!-- ##### FUNCTION tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed ##### -->
43 <para>
44
45 </para>
46
47 @instance:
48 @arg_Modes:
49
50
51 <!-- ##### STRUCT TpSvcChannelInterfaceAnonymity ##### -->
52 <para>
53
54 </para>
55
56
57 <!-- ##### STRUCT TpSvcChannelInterfaceAnonymityClass ##### -->
58 <para>
59
60 </para>
61
62
0 <!-- ##### SECTION Title ##### -->
1 svc-service-point
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 TpSvcConnectionInterfaceServicePoint ##### -->
23 <para>
24
25 </para>
26
27
28 <!-- ##### SIGNAL TpSvcConnectionInterfaceServicePoint::service-points-changed ##### -->
29 <para>
30
31 </para>
32
33 @tpsvcconnectioninterfaceservicepoint: the object which received the signal.
34
35 <!-- ##### STRUCT TpSvcConnectionInterfaceServicePointClass ##### -->
36 <para>
37
38 </para>
39
40
41 <!-- ##### FUNCTION tp_svc_connection_interface_service_point_emit_service_points_changed ##### -->
42 <para>
43
44 </para>
45
46 @instance:
47 @arg_Service_Points:
48
49
50 <!-- ##### STRUCT TpSvcChannelInterfaceServicePoint ##### -->
51 <para>
52
53 </para>
54
55
56 <!-- ##### SIGNAL TpSvcChannelInterfaceServicePoint::service-point-changed ##### -->
57 <para>
58
59 </para>
60
61 @tpsvcchannelinterfaceservicepoint: the object which received the signal.
62
63 <!-- ##### STRUCT TpSvcChannelInterfaceServicePointClass ##### -->
64 <para>
65
66 </para>
67
68
69 <!-- ##### FUNCTION tp_svc_channel_interface_service_point_emit_service_point_changed ##### -->
70 <para>
71
72 </para>
73
74 @instance:
75 @arg_Service_Point:
76
77
0 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Image ##### -->
1
2
3
4 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Long_Description ##### -->
5 <para>
6
7 </para>
8
9
10 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:See_Also ##### -->
11 <para>
12
13 </para>
14
15
16 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Short_Description ##### -->
17
18
19
20 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Stability_Level ##### -->
21
22
23
24 <!-- ##### SECTION ./tmpl/base-contact-list.sgml:Title ##### -->
25 base-contact-list
26
27
028 <!-- ##### SECTION ./tmpl/base-protocol.sgml:Image ##### -->
129
230
2553 base-protocol
2654
2755
56 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Image ##### -->
57
58
59
60 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Long_Description ##### -->
61 <para>
62
63 </para>
64
65
66 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:See_Also ##### -->
67 <para>
68
69 </para>
70
71
72 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Short_Description ##### -->
73
74
75
76 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Stability_Level ##### -->
77
78
79
80 <!-- ##### SECTION ./tmpl/connection-contact-list.sgml:Title ##### -->
81 connection-contact-list
82
83
2884 <!-- ##### SECTION ./tmpl/contact-list-manager.sgml:Image ##### -->
2985
3086
109165 svc-protocol
110166
111167
168 <!-- ##### MACRO NUM_TP_CONTACT_METADATA_STORAGE_TYPES ##### -->
169 <para>
170
171 </para>
172
173
174 <!-- ##### MACRO NUM_TP_PRESENCE_STATES ##### -->
175 <para>
176
177 </para>
178
179
180 <!-- ##### MACRO TP_HASH_TYPE_CONTACT_SUBSCRIPTION_MAP ##### -->
181 <para>
182
183 </para>
184
185
112186 <!-- ##### MACRO TP_HASH_TYPE_PROTOCOL_PROPERTIES_MAP ##### -->
113187 <para>
114188
115189 </para>
116190
117191
192 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS ##### -->
193 <para>
194
195 </para>
196
197
198 <!-- ##### MACRO TP_IFACE_CONNECTION_INTERFACE_CONTACT_LIST ##### -->
199 <para>
200
201 </para>
202
203
118204 <!-- ##### MACRO TP_IFACE_PROTOCOL ##### -->
119205 <para>
120206
121207 </para>
122208
123209
210 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_GROUPS ##### -->
211 <para>
212
213 </para>
214
215
216 <!-- ##### MACRO TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_LIST ##### -->
217 <para>
218
219 </para>
220
221
124222 <!-- ##### MACRO TP_IFACE_QUARK_PROTOCOL ##### -->
125223 <para>
126224
127225 </para>
128226
129227
228 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_DISJOINT_GROUPS ##### -->
229 <para>
230
231 </para>
232
233
234 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUPS ##### -->
235 <para>
236
237 </para>
238
239
240 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUP_STORAGE ##### -->
241 <para>
242
243 </para>
244
245
246 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_CAN_CHANGE_SUBSCRIPTIONS ##### -->
247 <para>
248
249 </para>
250
251
252 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_REQUEST_USES_MESSAGE ##### -->
253 <para>
254
255 </para>
256
257
258 <!-- ##### MACRO TP_PROP_CONNECTION_INTERFACE_CONTACT_LIST_SUBSCRIPTIONS_PERSIST ##### -->
259 <para>
260
261 </para>
262
263
130264 <!-- ##### MACRO TP_PROP_CONNECTION_MANAGER_PROTOCOLS ##### -->
131265 <para>
132266
212346
213347
214348 <!-- ##### MACRO TP_PROTOCOL_FEATURE_PARAMETERS ##### -->
349 <para>
350
351 </para>
352
353
354 <!-- ##### MACRO TP_STRUCT_TYPE_CONTACT_SUBSCRIPTIONS ##### -->
355 <para>
356
357 </para>
358
359
360 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_GROUPS_GROUPS ##### -->
361 <para>
362
363 </para>
364
365
366 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_PUBLISH ##### -->
367 <para>
368
369 </para>
370
371
372 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_PUBLISH_REQUEST ##### -->
373 <para>
374
375 </para>
376
377
378 <!-- ##### MACRO TP_TOKEN_CONNECTION_INTERFACE_CONTACT_LIST_SUBSCRIBE ##### -->
379 <para>
380
381 </para>
382
383
384 <!-- ##### MACRO TP_TYPE_BLOCKABLE_CONTACT_LIST ##### -->
385 <para>
386
387 </para>
388
389
390 <!-- ##### MACRO TP_TYPE_CONTACT_GROUP_LIST ##### -->
391 <para>
392
393 </para>
394
395
396 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_GROUP_LIST ##### -->
397 <para>
398
399 </para>
400
401
402 <!-- ##### MACRO TP_TYPE_MUTABLE_CONTACT_LIST ##### -->
215403 <para>
216404
217405 </para>
244432
245433 </para>
246434
435
436 <!-- ##### STRUCT TpBaseContactList ##### -->
437 <para>
438
439 </para>
440
441
442 <!-- ##### ARG TpBaseContactList:connection ##### -->
443 <para>
444
445 </para>
446
447
448 <!-- ##### USER_FUNCTION TpBaseContactListActOnContactsFunc ##### -->
449 <para>
450
451 </para>
452
453 @self:
454 @contacts:
455 @error:
456 @Returns:
457
458 <!-- ##### USER_FUNCTION TpBaseContactListBooleanFunc ##### -->
459 <para>
460
461 </para>
462
463 @self:
464 @Returns:
465
466 <!-- ##### STRUCT TpBaseContactListClass ##### -->
467 <para>
468
469 </para>
470
471
472 <!-- ##### USER_FUNCTION TpBaseContactListContactBooleanFunc ##### -->
473 <para>
474
475 </para>
476
477 @self:
478 @contact:
479 @Returns:
480
481 <!-- ##### USER_FUNCTION TpBaseContactListCreateGroupsFunc ##### -->
482 <para>
483
484 </para>
485
486 @self:
487 @normalized_names:
488 @n_names:
489
490 <!-- ##### USER_FUNCTION TpBaseContactListGetContactGroupsFunc ##### -->
491 <para>
492
493 </para>
494
495 @self:
496 @contact:
497 @Returns:
498
499 <!-- ##### USER_FUNCTION TpBaseContactListGetContactsFunc ##### -->
500 <para>
501
502 </para>
503
504 @self:
505 @Returns:
506
507 <!-- ##### USER_FUNCTION TpBaseContactListGetGroupsFunc ##### -->
508 <para>
509
510 </para>
511
512 @self:
513 @Returns:
514
515 <!-- ##### USER_FUNCTION TpBaseContactListGetPresenceStatesFunc ##### -->
516 <para>
517
518 </para>
519
520 @self:
521 @contact:
522 @subscribe:
523 @publish:
524 @publish_request:
525
526 <!-- ##### USER_FUNCTION TpBaseContactListGetStatesFunc ##### -->
527 <para>
528
529 </para>
530
531 @self:
532 @contact:
533 @subscribe:
534 @publish:
535 @publish_request:
536
537 <!-- ##### USER_FUNCTION TpBaseContactListGroupContactsFunc ##### -->
538 <para>
539
540 </para>
541
542 @self:
543 @group:
544 @contacts:
545
546 <!-- ##### USER_FUNCTION TpBaseContactListNormalizeFunc ##### -->
547 <para>
548
549 </para>
550
551 @self:
552 @s:
553 @Returns:
554
555 <!-- ##### USER_FUNCTION TpBaseContactListRemoveGroupFunc ##### -->
556 <para>
557
558 </para>
559
560 @self:
561 @group:
562 @error:
563 @Returns:
564
565 <!-- ##### USER_FUNCTION TpBaseContactListRenameGroupFunc ##### -->
566 <para>
567
568 </para>
569
570 @self:
571 @old_name:
572 @new_name:
573
574 <!-- ##### USER_FUNCTION TpBaseContactListRequestSubscriptionFunc ##### -->
575 <para>
576
577 </para>
578
579 @self:
580 @contacts:
581 @message:
582 @error:
583 @Returns:
584
585 <!-- ##### USER_FUNCTION TpBaseContactListSetContactGroupsFunc ##### -->
586 <para>
587
588 </para>
589
590 @self:
591 @contact:
592 @normalized_names:
593 @n_names:
594
595 <!-- ##### USER_FUNCTION TpBaseContactListUIntFunc ##### -->
596 <para>
597
598 </para>
599
600 @self:
601 @Returns:
602
603 <!-- ##### USER_FUNCTION TpBaseContactListUintFunc ##### -->
604 <para>
605
606 </para>
607
608 @self:
609 @Returns:
247610
248611 <!-- ##### STRUCT TpBaseProtocol ##### -->
249612 <para>
278641 @get_interfaces:
279642 @get_connection_details:
280643
644 <!-- ##### STRUCT TpBlockableContactListInterface ##### -->
645 <para>
646
647 </para>
648
649 @parent:
650 @get_blocked_contacts:
651 @block_contacts:
652 @unblock_contacts:
653 @can_block:
654
655 <!-- ##### STRUCT TpContactGroupListInterface ##### -->
656 <para>
657
658 </para>
659
660 @parent:
661 @get_groups:
662 @get_contact_groups:
663 @has_disjoint_groups:
664 @normalize_group:
665
281666 <!-- ##### STRUCT TpContactListManager ##### -->
282667 <para>
283668
404789 @error:
405790 @Returns:
406791
792 <!-- ##### ENUM TpContactMetadataStorageType ##### -->
793 <para>
794
795 </para>
796
797 @TP_CONTACT_METADATA_STORAGE_TYPE_NONE:
798 @TP_CONTACT_METADATA_STORAGE_TYPE_SUBSCRIBED_OR_PENDING:
799 @TP_CONTACT_METADATA_STORAGE_TYPE_SUBSCRIBED:
800 @TP_CONTACT_METADATA_STORAGE_TYPE_ANYONE:
801
802 <!-- ##### STRUCT TpMutableContactGroupListInterface ##### -->
803 <para>
804
805 </para>
806
807 @parent:
808 @set_contact_groups:
809 @create_groups:
810 @add_to_group:
811 @remove_from_group:
812 @remove_group:
813 @rename_group:
814 @get_group_storage:
815
816 <!-- ##### STRUCT TpMutableContactListInterface ##### -->
817 <para>
818
819 </para>
820
821 @parent:
822 @request_subscription:
823 @authorize_publication:
824 @remove_contacts:
825 @unsubscribe:
826 @unpublish:
827 @store_contacts:
828 @can_change_subscriptions:
829 @get_request_uses_message:
830
407831 <!-- ##### ENUM TpPresenceState ##### -->
408832 <para>
409833
467891 </para>
468892
469893
894 <!-- ##### STRUCT TpSvcConnectionInterfaceContactGroups ##### -->
895 <para>
896
897 </para>
898
899
900 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::group-renamed ##### -->
901 <para>
902
903 </para>
904
905 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
906 @arg1:
907 @arg2:
908
909 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-changed ##### -->
910 <para>
911
912 </para>
913
914 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
915 @arg1:
916 @arg2:
917 @arg3:
918
919 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-created ##### -->
920 <para>
921
922 </para>
923
924 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
925 @arg1:
926
927 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactGroups::groups-removed ##### -->
928 <para>
929
930 </para>
931
932 @tpsvcconnectioninterfacecontactgroups: the object which received the signal.
933 @arg1:
934
935 <!-- ##### STRUCT TpSvcConnectionInterfaceContactGroupsClass ##### -->
936 <para>
937
938 </para>
939
940
941 <!-- ##### STRUCT TpSvcConnectionInterfaceContactList ##### -->
942 <para>
943
944 </para>
945
946
947 <!-- ##### SIGNAL TpSvcConnectionInterfaceContactList::contacts-changed ##### -->
948 <para>
949
950 </para>
951
952 @tpsvcconnectioninterfacecontactlist: the object which received the signal.
953 @Param3:
954
955 <!-- ##### STRUCT TpSvcConnectionInterfaceContactListClass ##### -->
956 <para>
957
958 </para>
959
960
470961 <!-- ##### STRUCT TpSvcProtocol ##### -->
471962 <para>
472963
497988 @self:
498989 @protocol:
499990
991 <!-- ##### FUNCTION tp_base_contact_list_add_to_group ##### -->
992 <para>
993
994 </para>
995
996 @self:
997 @group:
998 @contacts:
999
1000 <!-- ##### FUNCTION tp_base_contact_list_authorize_publication ##### -->
1001 <para>
1002
1003 </para>
1004
1005 @self:
1006 @contacts:
1007
1008 <!-- ##### FUNCTION tp_base_contact_list_block_contacts ##### -->
1009 <para>
1010
1011 </para>
1012
1013 @self:
1014 @contacts:
1015
1016 <!-- ##### FUNCTION tp_base_contact_list_can_block ##### -->
1017 <para>
1018
1019 </para>
1020
1021 @self:
1022 @Returns:
1023
1024 <!-- ##### FUNCTION tp_base_contact_list_can_change_subscriptions ##### -->
1025 <para>
1026
1027 </para>
1028
1029 @self:
1030 @Returns:
1031
1032 <!-- ##### FUNCTION tp_base_contact_list_class_implement_add_to_group ##### -->
1033 <para>
1034
1035 </para>
1036
1037 @cls:
1038 @impl:
1039
1040 <!-- ##### FUNCTION tp_base_contact_list_class_implement_authorize_publication ##### -->
1041 <para>
1042
1043 </para>
1044
1045 @cls:
1046 @impl:
1047
1048 <!-- ##### FUNCTION tp_base_contact_list_class_implement_block_contacts ##### -->
1049 <para>
1050
1051 </para>
1052
1053 @cls:
1054 @impl:
1055
1056 <!-- ##### FUNCTION tp_base_contact_list_class_implement_can_block ##### -->
1057 <para>
1058
1059 </para>
1060
1061 @cls:
1062 @check:
1063
1064 <!-- ##### FUNCTION tp_base_contact_list_class_implement_can_change_subscriptions ##### -->
1065 <para>
1066
1067 </para>
1068
1069 @cls:
1070 @check:
1071
1072 <!-- ##### FUNCTION tp_base_contact_list_class_implement_create_groups ##### -->
1073 <para>
1074
1075 </para>
1076
1077 @cls:
1078 @impl:
1079
1080 <!-- ##### FUNCTION tp_base_contact_list_class_implement_disjoint_groups ##### -->
1081 <para>
1082
1083 </para>
1084
1085 @cls:
1086 @impl:
1087
1088 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_blocked_contacts ##### -->
1089 <para>
1090
1091 </para>
1092
1093 @cls:
1094 @impl:
1095
1096 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contact_blocked ##### -->
1097 <para>
1098
1099 </para>
1100
1101 @cls:
1102 @impl:
1103
1104 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contact_groups ##### -->
1105 <para>
1106
1107 </para>
1108
1109 @cls:
1110 @impl:
1111
1112 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_contacts ##### -->
1113 <para>
1114
1115 </para>
1116
1117 @cls:
1118 @impl:
1119
1120 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_group_storage ##### -->
1121 <para>
1122
1123 </para>
1124
1125 @cls:
1126 @impl:
1127
1128 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_groups ##### -->
1129 <para>
1130
1131 </para>
1132
1133 @cls:
1134 @impl:
1135
1136 <!-- ##### FUNCTION tp_base_contact_list_class_implement_get_states ##### -->
1137 <para>
1138
1139 </para>
1140
1141 @cls:
1142 @impl:
1143
1144 <!-- ##### FUNCTION tp_base_contact_list_class_implement_just_store_contacts ##### -->
1145 <para>
1146
1147 </para>
1148
1149 @cls:
1150 @impl:
1151
1152 <!-- ##### FUNCTION tp_base_contact_list_class_implement_normalize_group ##### -->
1153 <para>
1154
1155 </para>
1156
1157 @cls:
1158 @impl:
1159
1160 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_contacts ##### -->
1161 <para>
1162
1163 </para>
1164
1165 @cls:
1166 @impl:
1167
1168 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_from_group ##### -->
1169 <para>
1170
1171 </para>
1172
1173 @cls:
1174 @impl:
1175
1176 <!-- ##### FUNCTION tp_base_contact_list_class_implement_remove_group ##### -->
1177 <para>
1178
1179 </para>
1180
1181 @cls:
1182 @impl:
1183
1184 <!-- ##### FUNCTION tp_base_contact_list_class_implement_rename_group ##### -->
1185 <para>
1186
1187 </para>
1188
1189 @cls:
1190 @impl:
1191
1192 <!-- ##### FUNCTION tp_base_contact_list_class_implement_request_subscription ##### -->
1193 <para>
1194
1195 </para>
1196
1197 @cls:
1198 @impl:
1199
1200 <!-- ##### FUNCTION tp_base_contact_list_class_implement_request_uses_message ##### -->
1201 <para>
1202
1203 </para>
1204
1205 @cls:
1206 @check:
1207
1208 <!-- ##### FUNCTION tp_base_contact_list_class_implement_set_contact_groups ##### -->
1209 <para>
1210
1211 </para>
1212
1213 @cls:
1214 @impl:
1215
1216 <!-- ##### FUNCTION tp_base_contact_list_class_implement_subscriptions_persist ##### -->
1217 <para>
1218
1219 </para>
1220
1221 @cls:
1222 @check:
1223
1224 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unblock_contacts ##### -->
1225 <para>
1226
1227 </para>
1228
1229 @cls:
1230 @impl:
1231
1232 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unpublish ##### -->
1233 <para>
1234
1235 </para>
1236
1237 @cls:
1238 @impl:
1239
1240 <!-- ##### FUNCTION tp_base_contact_list_class_implement_unsubscribe ##### -->
1241 <para>
1242
1243 </para>
1244
1245 @cls:
1246 @impl:
1247
1248 <!-- ##### FUNCTION tp_base_contact_list_contact_blocking_changed ##### -->
1249 <para>
1250
1251 </para>
1252
1253 @self:
1254 @changed:
1255
1256 <!-- ##### FUNCTION tp_base_contact_list_contacts_changed ##### -->
1257 <para>
1258
1259 </para>
1260
1261 @self:
1262 @changed:
1263 @removed:
1264
1265 <!-- ##### FUNCTION tp_base_contact_list_create_groups ##### -->
1266 <para>
1267
1268 </para>
1269
1270 @self:
1271 @normalized_names:
1272 @n_names:
1273
1274 <!-- ##### FUNCTION tp_base_contact_list_false_func ##### -->
1275 <para>
1276
1277 </para>
1278
1279 @self:
1280 @Returns:
1281
1282 <!-- ##### FUNCTION tp_base_contact_list_get_blocked_contacts ##### -->
1283 <para>
1284
1285 </para>
1286
1287 @self:
1288 @Returns:
1289
1290 <!-- ##### FUNCTION tp_base_contact_list_get_contact_groups ##### -->
1291 <para>
1292
1293 </para>
1294
1295 @self:
1296 @contact:
1297 @Returns:
1298
1299 <!-- ##### FUNCTION tp_base_contact_list_get_contacts ##### -->
1300 <para>
1301
1302 </para>
1303
1304 @self:
1305 @Returns:
1306
1307 <!-- ##### FUNCTION tp_base_contact_list_get_group_storage ##### -->
1308 <para>
1309
1310 </para>
1311
1312 @self:
1313 @Returns:
1314
1315 <!-- ##### FUNCTION tp_base_contact_list_get_groups ##### -->
1316 <para>
1317
1318 </para>
1319
1320 @self:
1321 @Returns:
1322
1323 <!-- ##### FUNCTION tp_base_contact_list_get_request_uses_message ##### -->
1324 <para>
1325
1326 </para>
1327
1328 @self:
1329 @Returns:
1330
1331 <!-- ##### FUNCTION tp_base_contact_list_get_states ##### -->
1332 <para>
1333
1334 </para>
1335
1336 @self:
1337 @contact:
1338 @subscribe:
1339 @publish:
1340 @publish_request:
1341
1342 <!-- ##### FUNCTION tp_base_contact_list_get_subscriptions_persist ##### -->
1343 <para>
1344
1345 </para>
1346
1347 @self:
1348 @Returns:
1349
1350 <!-- ##### FUNCTION tp_base_contact_list_group_renamed ##### -->
1351 <para>
1352
1353 </para>
1354
1355 @self:
1356 @old_name:
1357 @new_name:
1358
1359 <!-- ##### FUNCTION tp_base_contact_list_groups_changed ##### -->
1360 <para>
1361
1362 </para>
1363
1364 @self:
1365 @contacts:
1366 @added:
1367 @n_added:
1368 @removed:
1369 @n_removed:
1370
1371 <!-- ##### FUNCTION tp_base_contact_list_groups_created ##### -->
1372 <para>
1373
1374 </para>
1375
1376 @self:
1377 @created:
1378 @n_created:
1379
1380 <!-- ##### FUNCTION tp_base_contact_list_groups_removed ##### -->
1381 <para>
1382
1383 </para>
1384
1385 @self:
1386 @removed:
1387 @n_removed:
1388
1389 <!-- ##### FUNCTION tp_base_contact_list_has_disjoint_groups ##### -->
1390 <para>
1391
1392 </para>
1393
1394 @self:
1395 @Returns:
1396
1397 <!-- ##### FUNCTION tp_base_contact_list_mixin_class_init ##### -->
1398 <para>
1399
1400 </para>
1401
1402 @cls:
1403
1404 <!-- ##### FUNCTION tp_base_contact_list_mixin_groups_iface_init ##### -->
1405 <para>
1406
1407 </para>
1408
1409 @klass:
1410
1411 <!-- ##### FUNCTION tp_base_contact_list_mixin_implement_groups ##### -->
1412 <para>
1413
1414 </para>
1415
1416 @klass:
1417
1418 <!-- ##### FUNCTION tp_base_contact_list_mixin_implement_list ##### -->
1419 <para>
1420
1421 </para>
1422
1423 @klass:
1424
1425 <!-- ##### FUNCTION tp_base_contact_list_mixin_list_iface_init ##### -->
1426 <para>
1427
1428 </para>
1429
1430 @klass:
1431
1432 <!-- ##### FUNCTION tp_base_contact_list_mixin_register_with_contacts_mixin ##### -->
1433 <para>
1434
1435 </para>
1436
1437 @conn:
1438
1439 <!-- ##### FUNCTION tp_base_contact_list_normalize_group ##### -->
1440 <para>
1441
1442 </para>
1443
1444 @self:
1445 @s:
1446 @Returns:
1447
1448 <!-- ##### FUNCTION tp_base_contact_list_remove_contacts ##### -->
1449 <para>
1450
1451 </para>
1452
1453 @self:
1454 @contacts:
1455
1456 <!-- ##### FUNCTION tp_base_contact_list_remove_from_group ##### -->
1457 <para>
1458
1459 </para>
1460
1461 @self:
1462 @group:
1463 @contacts:
1464
1465 <!-- ##### FUNCTION tp_base_contact_list_remove_group ##### -->
1466 <para>
1467
1468 </para>
1469
1470 @self:
1471 @group:
1472
1473 <!-- ##### FUNCTION tp_base_contact_list_rename_group ##### -->
1474 <para>
1475
1476 </para>
1477
1478 @self:
1479 @old_name:
1480 @new_name:
1481
1482 <!-- ##### FUNCTION tp_base_contact_list_request_subscription ##### -->
1483 <para>
1484
1485 </para>
1486
1487 @self:
1488 @contacts:
1489 @message:
1490
1491 <!-- ##### FUNCTION tp_base_contact_list_set_contact_groups ##### -->
1492 <para>
1493
1494 </para>
1495
1496 @self:
1497 @contact:
1498 @normalized_names:
1499 @n_names:
1500
1501 <!-- ##### FUNCTION tp_base_contact_list_set_list_received ##### -->
1502 <para>
1503
1504 </para>
1505
1506 @self:
1507
1508 <!-- ##### FUNCTION tp_base_contact_list_store_contacts ##### -->
1509 <para>
1510
1511 </para>
1512
1513 @self:
1514 @contacts:
1515
1516 <!-- ##### FUNCTION tp_base_contact_list_true_func ##### -->
1517 <para>
1518
1519 </para>
1520
1521 @self:
1522 @Returns:
1523
1524 <!-- ##### FUNCTION tp_base_contact_list_unblock_contacts ##### -->
1525 <para>
1526
1527 </para>
1528
1529 @self:
1530 @contacts:
1531
1532 <!-- ##### FUNCTION tp_base_contact_list_unpublish ##### -->
1533 <para>
1534
1535 </para>
1536
1537 @self:
1538 @contacts:
1539
1540 <!-- ##### FUNCTION tp_base_contact_list_unsubscribe ##### -->
1541 <para>
1542
1543 </para>
1544
1545 @self:
1546 @contacts:
1547
5001548 <!-- ##### FUNCTION tp_base_protocol_get_immutable_properties ##### -->
5011549 <para>
5021550
5711619 @user_data:
5721620 @weak_object:
5731621
1622 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_add_to_group ##### -->
1623 <para>
1624
1625 </para>
1626
1627 @proxy:
1628 @timeout_ms:
1629 @in_Group:
1630 @in_Members:
1631 @callback:
1632 @user_data:
1633 @destroy:
1634 @weak_object:
1635 @Returns:
1636
1637 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_from_group ##### -->
1638 <para>
1639
1640 </para>
1641
1642 @proxy:
1643 @timeout_ms:
1644 @in_Group:
1645 @in_Members:
1646 @callback:
1647 @user_data:
1648 @destroy:
1649 @weak_object:
1650 @Returns:
1651
1652 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_remove_group ##### -->
1653 <para>
1654
1655 </para>
1656
1657 @proxy:
1658 @timeout_ms:
1659 @in_Group:
1660 @callback:
1661 @user_data:
1662 @destroy:
1663 @weak_object:
1664 @Returns:
1665
1666 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_rename_group ##### -->
1667 <para>
1668
1669 </para>
1670
1671 @proxy:
1672 @timeout_ms:
1673 @in_Old_Name:
1674 @in_New_Name:
1675 @callback:
1676 @user_data:
1677 @destroy:
1678 @weak_object:
1679 @Returns:
1680
1681 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_contact_groups ##### -->
1682 <para>
1683
1684 </para>
1685
1686 @proxy:
1687 @timeout_ms:
1688 @in_Contact:
1689 @in_Groups:
1690 @callback:
1691 @user_data:
1692 @destroy:
1693 @weak_object:
1694 @Returns:
1695
1696 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_call_set_group_members ##### -->
1697 <para>
1698
1699 </para>
1700
1701 @proxy:
1702 @timeout_ms:
1703 @in_Group:
1704 @in_Members:
1705 @callback:
1706 @user_data:
1707 @destroy:
1708 @weak_object:
1709 @Returns:
1710
1711 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_add_to_group ##### -->
1712 <para>
1713
1714 </para>
1715
1716 @proxy:
1717 @error:
1718 @user_data:
1719 @weak_object:
1720
1721 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_from_group ##### -->
1722 <para>
1723
1724 </para>
1725
1726 @proxy:
1727 @error:
1728 @user_data:
1729 @weak_object:
1730
1731 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_remove_group ##### -->
1732 <para>
1733
1734 </para>
1735
1736 @proxy:
1737 @error:
1738 @user_data:
1739 @weak_object:
1740
1741 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_rename_group ##### -->
1742 <para>
1743
1744 </para>
1745
1746 @proxy:
1747 @error:
1748 @user_data:
1749 @weak_object:
1750
1751 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_contact_groups ##### -->
1752 <para>
1753
1754 </para>
1755
1756 @proxy:
1757 @error:
1758 @user_data:
1759 @weak_object:
1760
1761 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_callback_for_set_group_members ##### -->
1762 <para>
1763
1764 </para>
1765
1766 @proxy:
1767 @error:
1768 @user_data:
1769 @weak_object:
1770
1771 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_group_renamed ##### -->
1772 <para>
1773
1774 </para>
1775
1776 @proxy:
1777 @callback:
1778 @user_data:
1779 @destroy:
1780 @weak_object:
1781 @error:
1782 @Returns:
1783
1784 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_changed ##### -->
1785 <para>
1786
1787 </para>
1788
1789 @proxy:
1790 @callback:
1791 @user_data:
1792 @destroy:
1793 @weak_object:
1794 @error:
1795 @Returns:
1796
1797 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_created ##### -->
1798 <para>
1799
1800 </para>
1801
1802 @proxy:
1803 @callback:
1804 @user_data:
1805 @destroy:
1806 @weak_object:
1807 @error:
1808 @Returns:
1809
1810 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_connect_to_groups_removed ##### -->
1811 <para>
1812
1813 </para>
1814
1815 @proxy:
1816 @callback:
1817 @user_data:
1818 @destroy:
1819 @weak_object:
1820 @error:
1821 @Returns:
1822
1823 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_add_to_group ##### -->
1824 <para>
1825
1826 </para>
1827
1828 @proxy:
1829 @timeout_ms:
1830 @in_Group:
1831 @in_Members:
1832 @error:
1833 @loop:
1834 @Returns:
1835
1836 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_remove_from_group ##### -->
1837 <para>
1838
1839 </para>
1840
1841 @proxy:
1842 @timeout_ms:
1843 @in_Group:
1844 @in_Members:
1845 @error:
1846 @loop:
1847 @Returns:
1848
1849 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_remove_group ##### -->
1850 <para>
1851
1852 </para>
1853
1854 @proxy:
1855 @timeout_ms:
1856 @in_Group:
1857 @error:
1858 @loop:
1859 @Returns:
1860
1861 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_rename_group ##### -->
1862 <para>
1863
1864 </para>
1865
1866 @proxy:
1867 @timeout_ms:
1868 @in_Old_Name:
1869 @in_New_Name:
1870 @error:
1871 @loop:
1872 @Returns:
1873
1874 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_set_contact_groups ##### -->
1875 <para>
1876
1877 </para>
1878
1879 @proxy:
1880 @timeout_ms:
1881 @in_Contact:
1882 @in_Groups:
1883 @error:
1884 @loop:
1885 @Returns:
1886
1887 <!-- ##### FUNCTION tp_cli_connection_interface_contact_groups_run_set_group_members ##### -->
1888 <para>
1889
1890 </para>
1891
1892 @proxy:
1893 @timeout_ms:
1894 @in_Group:
1895 @in_Members:
1896 @error:
1897 @loop:
1898 @Returns:
1899
1900 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_group_renamed ##### -->
1901 <para>
1902
1903 </para>
1904
1905 @proxy:
1906 @arg_Old_Name:
1907 @arg_New_Name:
1908 @user_data:
1909 @weak_object:
1910
1911 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_changed ##### -->
1912 <para>
1913
1914 </para>
1915
1916 @proxy:
1917 @arg_Contact:
1918 @arg_Added:
1919 @arg_Removed:
1920 @user_data:
1921 @weak_object:
1922
1923 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_created ##### -->
1924 <para>
1925
1926 </para>
1927
1928 @proxy:
1929 @arg_Names:
1930 @user_data:
1931 @weak_object:
1932
1933 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_groups_signal_callback_groups_removed ##### -->
1934 <para>
1935
1936 </para>
1937
1938 @proxy:
1939 @arg_Names:
1940 @user_data:
1941 @weak_object:
1942
1943 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_authorize_publication ##### -->
1944 <para>
1945
1946 </para>
1947
1948 @proxy:
1949 @timeout_ms:
1950 @in_Contacts:
1951 @callback:
1952 @user_data:
1953 @destroy:
1954 @weak_object:
1955 @Returns:
1956
1957 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_get_contact_list_attributes ##### -->
1958 <para>
1959
1960 </para>
1961
1962 @proxy:
1963 @timeout_ms:
1964 @in_Interfaces:
1965 @in_Hold:
1966 @callback:
1967 @user_data:
1968 @destroy:
1969 @weak_object:
1970 @Returns:
1971
1972 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_remove_contacts ##### -->
1973 <para>
1974
1975 </para>
1976
1977 @proxy:
1978 @timeout_ms:
1979 @in_Contacts:
1980 @callback:
1981 @user_data:
1982 @destroy:
1983 @weak_object:
1984 @Returns:
1985
1986 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_request_subscription ##### -->
1987 <para>
1988
1989 </para>
1990
1991 @proxy:
1992 @timeout_ms:
1993 @in_Contacts:
1994 @in_Message:
1995 @callback:
1996 @user_data:
1997 @destroy:
1998 @weak_object:
1999 @Returns:
2000
2001 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unpublish ##### -->
2002 <para>
2003
2004 </para>
2005
2006 @proxy:
2007 @timeout_ms:
2008 @in_Contacts:
2009 @callback:
2010 @user_data:
2011 @destroy:
2012 @weak_object:
2013 @Returns:
2014
2015 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_call_unsubscribe ##### -->
2016 <para>
2017
2018 </para>
2019
2020 @proxy:
2021 @timeout_ms:
2022 @in_Contacts:
2023 @callback:
2024 @user_data:
2025 @destroy:
2026 @weak_object:
2027 @Returns:
2028
2029 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_authorize_publication ##### -->
2030 <para>
2031
2032 </para>
2033
2034 @proxy:
2035 @error:
2036 @user_data:
2037 @weak_object:
2038
2039 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_get_contact_list_attributes ##### -->
2040 <para>
2041
2042 </para>
2043
2044 @proxy:
2045 @out_Attributes:
2046 @error:
2047 @user_data:
2048 @weak_object:
2049
2050 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_remove_contacts ##### -->
2051 <para>
2052
2053 </para>
2054
2055 @proxy:
2056 @error:
2057 @user_data:
2058 @weak_object:
2059
2060 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_request_subscription ##### -->
2061 <para>
2062
2063 </para>
2064
2065 @proxy:
2066 @error:
2067 @user_data:
2068 @weak_object:
2069
2070 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unpublish ##### -->
2071 <para>
2072
2073 </para>
2074
2075 @proxy:
2076 @error:
2077 @user_data:
2078 @weak_object:
2079
2080 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_callback_for_unsubscribe ##### -->
2081 <para>
2082
2083 </para>
2084
2085 @proxy:
2086 @error:
2087 @user_data:
2088 @weak_object:
2089
2090 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_connect_to_contacts_changed ##### -->
2091 <para>
2092
2093 </para>
2094
2095 @proxy:
2096 @callback:
2097 @user_data:
2098 @destroy:
2099 @weak_object:
2100 @error:
2101 @Returns:
2102
2103 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_authorize_publication ##### -->
2104 <para>
2105
2106 </para>
2107
2108 @proxy:
2109 @timeout_ms:
2110 @in_Contacts:
2111 @error:
2112 @loop:
2113 @Returns:
2114
2115 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_get_contact_list_attributes ##### -->
2116 <para>
2117
2118 </para>
2119
2120 @proxy:
2121 @timeout_ms:
2122 @in_Interfaces:
2123 @in_Hold:
2124 @out_Attributes:
2125 @error:
2126 @loop:
2127 @Returns:
2128
2129 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_remove_contacts ##### -->
2130 <para>
2131
2132 </para>
2133
2134 @proxy:
2135 @timeout_ms:
2136 @in_Contacts:
2137 @error:
2138 @loop:
2139 @Returns:
2140
2141 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_request_subscription ##### -->
2142 <para>
2143
2144 </para>
2145
2146 @proxy:
2147 @timeout_ms:
2148 @in_Contacts:
2149 @in_Message:
2150 @error:
2151 @loop:
2152 @Returns:
2153
2154 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_unpublish ##### -->
2155 <para>
2156
2157 </para>
2158
2159 @proxy:
2160 @timeout_ms:
2161 @in_Contacts:
2162 @error:
2163 @loop:
2164 @Returns:
2165
2166 <!-- ##### FUNCTION tp_cli_connection_interface_contact_list_run_unsubscribe ##### -->
2167 <para>
2168
2169 </para>
2170
2171 @proxy:
2172 @timeout_ms:
2173 @in_Contacts:
2174 @error:
2175 @loop:
2176 @Returns:
2177
2178 <!-- ##### USER_FUNCTION tp_cli_connection_interface_contact_list_signal_callback_contacts_changed ##### -->
2179 <para>
2180
2181 </para>
2182
2183 @proxy:
2184 @arg_Changes:
2185 @arg_Removals:
2186 @user_data:
2187 @weak_object:
2188
5742189 <!-- ##### FUNCTION tp_cli_protocol_call_identify_account ##### -->
5752190 <para>
5762191
6462261 @protocol:
6472262 @Returns:
6482263
2264 <!-- ##### FUNCTION tp_connection_request_contact_list_attributes ##### -->
2265 <para>
2266
2267 </para>
2268
2269 @self:
2270 @timeout_ms:
2271 @interfaces:
2272 @hold:
2273 @callback:
2274 @user_data:
2275 @destroy:
2276 @weak_object:
2277
6492278 <!-- ##### FUNCTION tp_contact_list_manager_class_implement_add_to_group ##### -->
6502279 <para>
6512280
8722501 @self:
8732502 @contacts:
8742503 @added:
2504 @n_added:
8752505 @removed:
2506 @n_removed:
8762507
8772508 <!-- ##### FUNCTION tp_contact_list_manager_groups_created ##### -->
8782509 <para>
8812512
8822513 @self:
8832514 @created:
2515 @n_created:
8842516
8852517 <!-- ##### FUNCTION tp_contact_list_manager_groups_removed ##### -->
8862518 <para>
8892521
8902522 @self:
8912523 @removed:
2524 @n_removed:
8922525
8932526 <!-- ##### FUNCTION tp_contact_list_manager_request_failed ##### -->
8942527 <para>
10612694 @klass:
10622695 @impl:
10632696
2697 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_add_to_group_impl ##### -->
2698 <para>
2699
2700 </para>
2701
2702 @self:
2703 @in_Group:
2704 @in_Members:
2705 @context:
2706
2707 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_group_renamed ##### -->
2708 <para>
2709
2710 </para>
2711
2712 @instance:
2713 @arg_Old_Name:
2714 @arg_New_Name:
2715
2716 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_changed ##### -->
2717 <para>
2718
2719 </para>
2720
2721 @instance:
2722 @arg_Contact:
2723 @arg_Added:
2724 @arg_Removed:
2725
2726 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_created ##### -->
2727 <para>
2728
2729 </para>
2730
2731 @instance:
2732 @arg_Names:
2733
2734 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_emit_groups_removed ##### -->
2735 <para>
2736
2737 </para>
2738
2739 @instance:
2740 @arg_Names:
2741
2742 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_add_to_group ##### -->
2743 <para>
2744
2745 </para>
2746
2747 @klass:
2748 @impl:
2749
2750 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_remove_from_group ##### -->
2751 <para>
2752
2753 </para>
2754
2755 @klass:
2756 @impl:
2757
2758 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_remove_group ##### -->
2759 <para>
2760
2761 </para>
2762
2763 @klass:
2764 @impl:
2765
2766 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_rename_group ##### -->
2767 <para>
2768
2769 </para>
2770
2771 @klass:
2772 @impl:
2773
2774 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_set_contact_groups ##### -->
2775 <para>
2776
2777 </para>
2778
2779 @klass:
2780 @impl:
2781
2782 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_implement_set_group_members ##### -->
2783 <para>
2784
2785 </para>
2786
2787 @klass:
2788 @impl:
2789
2790 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_remove_from_group_impl ##### -->
2791 <para>
2792
2793 </para>
2794
2795 @self:
2796 @in_Group:
2797 @in_Members:
2798 @context:
2799
2800 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_remove_group_impl ##### -->
2801 <para>
2802
2803 </para>
2804
2805 @self:
2806 @in_Group:
2807 @context:
2808
2809 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_rename_group_impl ##### -->
2810 <para>
2811
2812 </para>
2813
2814 @self:
2815 @in_Old_Name:
2816 @in_New_Name:
2817 @context:
2818
2819 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_add_to_group ##### -->
2820 <para>
2821
2822 </para>
2823
2824 @context:
2825
2826 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_remove_from_group ##### -->
2827 <para>
2828
2829 </para>
2830
2831 @context:
2832
2833 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_remove_group ##### -->
2834 <para>
2835
2836 </para>
2837
2838 @context:
2839
2840 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_rename_group ##### -->
2841 <para>
2842
2843 </para>
2844
2845 @context:
2846
2847 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_set_contact_groups ##### -->
2848 <para>
2849
2850 </para>
2851
2852 @context:
2853
2854 <!-- ##### FUNCTION tp_svc_connection_interface_contact_groups_return_from_set_group_members ##### -->
2855 <para>
2856
2857 </para>
2858
2859 @context:
2860
2861 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_set_contact_groups_impl ##### -->
2862 <para>
2863
2864 </para>
2865
2866 @self:
2867 @in_Contact:
2868 @in_Groups:
2869 @context:
2870
2871 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_groups_set_group_members_impl ##### -->
2872 <para>
2873
2874 </para>
2875
2876 @self:
2877 @in_Group:
2878 @in_Members:
2879 @context:
2880
2881 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_authorize_publication_impl ##### -->
2882 <para>
2883
2884 </para>
2885
2886 @self:
2887 @in_Contacts:
2888 @context:
2889
2890 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_emit_contacts_changed ##### -->
2891 <para>
2892
2893 </para>
2894
2895 @instance:
2896 @arg_Changes:
2897 @arg_Removals:
2898
2899 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_get_contact_list_attributes_impl ##### -->
2900 <para>
2901
2902 </para>
2903
2904 @self:
2905 @in_Interfaces:
2906 @in_Hold:
2907 @context:
2908
2909 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_authorize_publication ##### -->
2910 <para>
2911
2912 </para>
2913
2914 @klass:
2915 @impl:
2916
2917 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_get_contact_list_attributes ##### -->
2918 <para>
2919
2920 </para>
2921
2922 @klass:
2923 @impl:
2924
2925 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_remove_contacts ##### -->
2926 <para>
2927
2928 </para>
2929
2930 @klass:
2931 @impl:
2932
2933 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_request_subscription ##### -->
2934 <para>
2935
2936 </para>
2937
2938 @klass:
2939 @impl:
2940
2941 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_unpublish ##### -->
2942 <para>
2943
2944 </para>
2945
2946 @klass:
2947 @impl:
2948
2949 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_implement_unsubscribe ##### -->
2950 <para>
2951
2952 </para>
2953
2954 @klass:
2955 @impl:
2956
2957 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_remove_contacts_impl ##### -->
2958 <para>
2959
2960 </para>
2961
2962 @self:
2963 @in_Contacts:
2964 @context:
2965
2966 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_request_subscription_impl ##### -->
2967 <para>
2968
2969 </para>
2970
2971 @self:
2972 @in_Contacts:
2973 @in_Message:
2974 @context:
2975
2976 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_authorize_publication ##### -->
2977 <para>
2978
2979 </para>
2980
2981 @context:
2982
2983 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_get_contact_list_attributes ##### -->
2984 <para>
2985
2986 </para>
2987
2988 @context:
2989 @out_Attributes:
2990
2991 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_remove_contacts ##### -->
2992 <para>
2993
2994 </para>
2995
2996 @context:
2997
2998 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_request_subscription ##### -->
2999 <para>
3000
3001 </para>
3002
3003 @context:
3004
3005 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_unpublish ##### -->
3006 <para>
3007
3008 </para>
3009
3010 @context:
3011
3012 <!-- ##### FUNCTION tp_svc_connection_interface_contact_list_return_from_unsubscribe ##### -->
3013 <para>
3014
3015 </para>
3016
3017 @context:
3018
3019 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_unpublish_impl ##### -->
3020 <para>
3021
3022 </para>
3023
3024 @self:
3025 @in_Contacts:
3026 @context:
3027
3028 <!-- ##### USER_FUNCTION tp_svc_connection_interface_contact_list_unsubscribe_impl ##### -->
3029 <para>
3030
3031 </para>
3032
3033 @self:
3034 @in_Contacts:
3035 @context:
3036
10643037 <!-- ##### USER_FUNCTION tp_svc_connection_remove_client_interest_impl ##### -->
10653038 <para>
10663039
378378 @self:
379379
380380
381 <!-- ##### MACRO tp_clear_pointer ##### -->
382 <para>
383
384 </para>
385
386 @pp:
387 @destroy:
388
389
390 <!-- ##### MACRO tp_clear_object ##### -->
391 <para>
392
393 </para>
394
395 @op:
396
397
398 <!-- ##### MACRO tp_clear_boxed ##### -->
399 <para>
400
401 </para>
402
403 @gtype:
404 @pp:
405
406
112112 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
113113 CPP = @CPP@
114114 CPPFLAGS = @CPPFLAGS@
115 CXX = @CXX@
116 CXXCPP = @CXXCPP@
117 CXXDEPMODE = @CXXDEPMODE@
118 CXXFLAGS = @CXXFLAGS@
115119 CYGPATH_W = @CYGPATH_W@
116120 DBUS_CFLAGS = @DBUS_CFLAGS@
117121 DBUS_LIBS = @DBUS_LIBS@
199203 abs_top_builddir = @abs_top_builddir@
200204 abs_top_srcdir = @abs_top_srcdir@
201205 ac_ct_CC = @ac_ct_CC@
206 ac_ct_CXX = @ac_ct_CXX@
202207 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
203208 am__include = @am__include@
204209 am__leading_dot = @am__leading_dot@
198198 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
199199 CPP = @CPP@
200200 CPPFLAGS = @CPPFLAGS@
201 CXX = @CXX@
202 CXXCPP = @CXXCPP@
203 CXXDEPMODE = @CXXDEPMODE@
204 CXXFLAGS = @CXXFLAGS@
201205 CYGPATH_W = @CYGPATH_W@
202206 DBUS_CFLAGS = @DBUS_CFLAGS@
203207 DBUS_LIBS = @DBUS_LIBS@
285289 abs_top_builddir = @abs_top_builddir@
286290 abs_top_srcdir = @abs_top_srcdir@
287291 ac_ct_CC = @ac_ct_CC@
292 ac_ct_CXX = @ac_ct_CXX@
288293 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
289294 am__include = @am__include@
290295 am__leading_dot = @am__leading_dot@
112112 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
113113 CPP = @CPP@
114114 CPPFLAGS = @CPPFLAGS@
115 CXX = @CXX@
116 CXXCPP = @CXXCPP@
117 CXXDEPMODE = @CXXDEPMODE@
118 CXXFLAGS = @CXXFLAGS@
115119 CYGPATH_W = @CYGPATH_W@
116120 DBUS_CFLAGS = @DBUS_CFLAGS@
117121 DBUS_LIBS = @DBUS_LIBS@
199203 abs_top_builddir = @abs_top_builddir@
200204 abs_top_srcdir = @abs_top_srcdir@
201205 ac_ct_CC = @ac_ct_CC@
206 ac_ct_CXX = @ac_ct_CXX@
202207 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
203208 am__include = @am__include@
204209 am__leading_dot = @am__leading_dot@
145145 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
146146 CPP = @CPP@
147147 CPPFLAGS = @CPPFLAGS@
148 CXX = @CXX@
149 CXXCPP = @CXXCPP@
150 CXXDEPMODE = @CXXDEPMODE@
151 CXXFLAGS = @CXXFLAGS@
148152 CYGPATH_W = @CYGPATH_W@
149153 DBUS_CFLAGS = @DBUS_CFLAGS@
150154 DBUS_LIBS = @DBUS_LIBS@
232236 abs_top_builddir = @abs_top_builddir@
233237 abs_top_srcdir = @abs_top_srcdir@
234238 ac_ct_CC = @ac_ct_CC@
239 ac_ct_CXX = @ac_ct_CXX@
235240 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236241 am__include = @am__include@
237242 am__leading_dot = @am__leading_dot@
145145 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
146146 CPP = @CPP@
147147 CPPFLAGS = @CPPFLAGS@
148 CXX = @CXX@
149 CXXCPP = @CXXCPP@
150 CXXDEPMODE = @CXXDEPMODE@
151 CXXFLAGS = @CXXFLAGS@
148152 CYGPATH_W = @CYGPATH_W@
149153 DBUS_CFLAGS = @DBUS_CFLAGS@
150154 DBUS_LIBS = @DBUS_LIBS@
232236 abs_top_builddir = @abs_top_builddir@
233237 abs_top_srcdir = @abs_top_srcdir@
234238 ac_ct_CC = @ac_ct_CC@
239 ac_ct_CXX = @ac_ct_CXX@
235240 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236241 am__include = @am__include@
237242 am__leading_dot = @am__leading_dot@
2828 enum
2929 {
3030 PROP_ACCOUNT = 1,
31 PROP_SIMULATION_DELAY,
3132 N_PROPS
3233 };
3334
3435 struct _ExampleCSHConnectionPrivate
3536 {
3637 gchar *account;
38 guint simulation_delay;
3739 };
3840
3941 static void
5557 case PROP_ACCOUNT:
5658 g_value_set_string (value, self->priv->account);
5759 break;
60
61 case PROP_SIMULATION_DELAY:
62 g_value_set_uint (value, self->priv->simulation_delay);
63 break;
64
5865 default:
5966 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec);
6067 }
7380 g_free (self->priv->account);
7481 self->priv->account = g_utf8_strdown (g_value_get_string (value), -1);
7582 break;
83
84 case PROP_SIMULATION_DELAY:
85 self->priv->simulation_delay = g_value_get_uint (value);
86 break;
87
7688 default:
7789 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec);
7890 }
197209 static GPtrArray *
198210 create_channel_managers (TpBaseConnection *conn)
199211 {
212 ExampleCSHConnection *self = EXAMPLE_CSH_CONNECTION (conn);
200213 GPtrArray *ret = g_ptr_array_sized_new (1);
201214
202215 g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_CSH_ROOM_MANAGER,
203216 "connection", conn,
217 "simulation-delay", self->priv->simulation_delay,
204218 NULL));
205219
206220 return ret;
267281 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
268282 G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
269283 g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec);
270 }
284
285 param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay",
286 "Delay between simulated network events",
287 0, G_MAXUINT32, 500,
288 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
289 g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
290 param_spec);
291 }
3434
3535 typedef struct {
3636 gchar *account;
37 guint simulation_delay;
3738 } ExampleParams;
3839
3940
7778 static gpointer
7879 alloc_params (void)
7980 {
80 return g_slice_new0 (ExampleParams);
81 ExampleParams *params = g_slice_new0 (ExampleParams);
82
83 params->simulation_delay = 500;
84 return params;
8185 }
8286
8387 static void
109113 (g_object_new (EXAMPLE_TYPE_CSH_CONNECTION,
110114 "account", params->account,
111115 "protocol", proto,
116 "simulation-delay", params->simulation_delay,
112117 NULL));
113118
114119 return (TpBaseConnection *) conn;
1111 # 'struct_field': '...',
1212 # 'setter_data': 'NULL',
1313 },
14 'simulation-delay': {
15 'dtype': 'u',
16 'default': 500,
17 },
1418 },
1519 }
1620 STRUCTS = {
2929 enum
3030 {
3131 PROP_CONNECTION = 1,
32 PROP_SIMULATION_DELAY,
3233 N_PROPS
3334 };
3435
3536 struct _ExampleCSHRoomManagerPrivate
3637 {
3738 TpBaseConnection *conn;
39 guint simulation_delay;
3840
3941 /* GUINT_TO_POINTER (room handle) => ExampleCSHRoomChannel */
4042 GHashTable *channels;
7779 case PROP_CONNECTION:
7880 g_value_set_object (value, self->priv->conn);
7981 break;
82
83 case PROP_SIMULATION_DELAY:
84 g_value_set_uint (value, self->priv->simulation_delay);
85 break;
86
8087 default:
8188 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
8289 }
98105 * less than its lifetime */
99106 self->priv->conn = g_value_get_object (value);
100107 break;
108
109 case PROP_SIMULATION_DELAY:
110 self->priv->simulation_delay = g_value_get_uint (value);
111 break;
112
101113 default:
102114 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
103115 }
146158 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
147159 G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
148160 g_object_class_install_property (object_class, PROP_CONNECTION, param_spec);
161
162 param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay",
163 "Delay between simulated network events",
164 0, G_MAXUINT32, 500,
165 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
166 g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
167 param_spec);
149168
150169 g_type_class_add_private (klass, sizeof (ExampleCSHRoomManagerPrivate));
151170 }
4545 PROP_INTERFACES,
4646 PROP_CHANNEL_DESTROYED,
4747 PROP_CHANNEL_PROPERTIES,
48 PROP_SIMULATION_DELAY,
4849 N_PROPS
4950 };
5051
5455 gchar *object_path;
5556 TpHandle handle;
5657 TpHandle initiator;
58 guint simulation_delay;
5759
5860 /* These are really booleans, but gboolean is signed. Thanks, GLib */
5961 unsigned closed:1;
231233
232234 /* Actually join the room. In a real implementation this would be a network
233235 * round-trip - we don't have a network, so pretend that joining takes
234 * 500ms */
235 g_timeout_add (500, (GSourceFunc) complete_join, self);
236 * a short time */
237 g_timeout_add (self->priv->simulation_delay, (GSourceFunc) complete_join,
238 self);
236239 }
237240
238241
362365 TP_IFACE_CHANNEL, "Interfaces",
363366 NULL));
364367 break;
368 case PROP_SIMULATION_DELAY:
369 g_value_set_uint (value, self->priv->simulation_delay);
370 break;
365371 default:
366372 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
367373 break;
399405 break;
400406 case PROP_CONNECTION:
401407 self->priv->conn = g_value_get_object (value);
408 break;
409 case PROP_SIMULATION_DELAY:
410 self->priv->simulation_delay = g_value_get_uint (value);
402411 break;
403412 default:
404413 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
576585 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
577586 g_object_class_install_property (object_class, PROP_REQUESTED, param_spec);
578587
588 param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay",
589 "Delay between simulated network events",
590 0, G_MAXUINT32, 500,
591 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
592 g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
593 param_spec);
594
579595 tp_text_mixin_class_init (object_class,
580596 G_STRUCT_OFFSET (ExampleCSHRoomChannelClass, text_class));
581597
145145 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
146146 CPP = @CPP@
147147 CPPFLAGS = @CPPFLAGS@
148 CXX = @CXX@
149 CXXCPP = @CXXCPP@
150 CXXDEPMODE = @CXXDEPMODE@
151 CXXFLAGS = @CXXFLAGS@
148152 CYGPATH_W = @CYGPATH_W@
149153 DBUS_CFLAGS = @DBUS_CFLAGS@
150154 DBUS_LIBS = @DBUS_LIBS@
232236 abs_top_builddir = @abs_top_builddir@
233237 abs_top_srcdir = @abs_top_srcdir@
234238 ac_ct_CC = @ac_ct_CC@
239 ac_ct_CXX = @ac_ct_CXX@
235240 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236241 am__include = @am__include@
237242 am__leading_dot = @am__leading_dot@
142142 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
143143 CPP = @CPP@
144144 CPPFLAGS = @CPPFLAGS@
145 CXX = @CXX@
146 CXXCPP = @CXXCPP@
147 CXXDEPMODE = @CXXDEPMODE@
148 CXXFLAGS = @CXXFLAGS@
145149 CYGPATH_W = @CYGPATH_W@
146150 DBUS_CFLAGS = @DBUS_CFLAGS@
147151 DBUS_LIBS = @DBUS_LIBS@
229233 abs_top_builddir = @abs_top_builddir@
230234 abs_top_srcdir = @abs_top_srcdir@
231235 ac_ct_CC = @ac_ct_CC@
236 ac_ct_CXX = @ac_ct_CXX@
232237 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
233238 am__include = @am__include@
234239 am__leading_dot = @am__leading_dot@
143143 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
144144 CPP = @CPP@
145145 CPPFLAGS = @CPPFLAGS@
146 CXX = @CXX@
147 CXXCPP = @CXXCPP@
148 CXXDEPMODE = @CXXDEPMODE@
149 CXXFLAGS = @CXXFLAGS@
146150 CYGPATH_W = @CYGPATH_W@
147151 DBUS_CFLAGS = @DBUS_CFLAGS@
148152 DBUS_LIBS = @DBUS_LIBS@
230234 abs_top_builddir = @abs_top_builddir@
231235 abs_top_srcdir = @abs_top_srcdir@
232236 ac_ct_CC = @ac_ct_CC@
237 ac_ct_CXX = @ac_ct_CXX@
233238 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
234239 am__include = @am__include@
235240 am__leading_dot = @am__leading_dot@
136136 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
137137 CPP = @CPP@
138138 CPPFLAGS = @CPPFLAGS@
139 CXX = @CXX@
140 CXXCPP = @CXXCPP@
141 CXXDEPMODE = @CXXDEPMODE@
142 CXXFLAGS = @CXXFLAGS@
139143 CYGPATH_W = @CYGPATH_W@
140144 DBUS_CFLAGS = @DBUS_CFLAGS@
141145 DBUS_LIBS = @DBUS_LIBS@
223227 abs_top_builddir = @abs_top_builddir@
224228 abs_top_srcdir = @abs_top_srcdir@
225229 ac_ct_CC = @ac_ct_CC@
230 ac_ct_CXX = @ac_ct_CXX@
226231 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
227232 am__include = @am__include@
228233 am__leading_dot = @am__leading_dot@
135135 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
136136 CPP = @CPP@
137137 CPPFLAGS = @CPPFLAGS@
138 CXX = @CXX@
139 CXXCPP = @CXXCPP@
140 CXXDEPMODE = @CXXDEPMODE@
141 CXXFLAGS = @CXXFLAGS@
138142 CYGPATH_W = @CYGPATH_W@
139143 DBUS_CFLAGS = @DBUS_CFLAGS@
140144 DBUS_LIBS = @DBUS_LIBS@
222226 abs_top_builddir = @abs_top_builddir@
223227 abs_top_srcdir = @abs_top_srcdir@
224228 ac_ct_CC = @ac_ct_CC@
229 ac_ct_CXX = @ac_ct_CXX@
225230 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
226231 am__include = @am__include@
227232 am__leading_dot = @am__leading_dot@
119119 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
120120 CPP = @CPP@
121121 CPPFLAGS = @CPPFLAGS@
122 CXX = @CXX@
123 CXXCPP = @CXXCPP@
124 CXXDEPMODE = @CXXDEPMODE@
125 CXXFLAGS = @CXXFLAGS@
122126 CYGPATH_W = @CYGPATH_W@
123127 DBUS_CFLAGS = @DBUS_CFLAGS@
124128 DBUS_LIBS = @DBUS_LIBS@
206210 abs_top_builddir = @abs_top_builddir@
207211 abs_top_srcdir = @abs_top_srcdir@
208212 ac_ct_CC = @ac_ct_CC@
213 ac_ct_CXX = @ac_ct_CXX@
209214 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
210215 am__include = @am__include@
211216 am__leading_dot = @am__leading_dot@
112112 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
113113 CPP = @CPP@
114114 CPPFLAGS = @CPPFLAGS@
115 CXX = @CXX@
116 CXXCPP = @CXXCPP@
117 CXXDEPMODE = @CXXDEPMODE@
118 CXXFLAGS = @CXXFLAGS@
115119 CYGPATH_W = @CYGPATH_W@
116120 DBUS_CFLAGS = @DBUS_CFLAGS@
117121 DBUS_LIBS = @DBUS_LIBS@
199203 abs_top_builddir = @abs_top_builddir@
200204 abs_top_srcdir = @abs_top_srcdir@
201205 ac_ct_CC = @ac_ct_CC@
206 ac_ct_CXX = @ac_ct_CXX@
202207 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
203208 am__include = @am__include@
204209 am__leading_dot = @am__leading_dot@
145145 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
146146 CPP = @CPP@
147147 CPPFLAGS = @CPPFLAGS@
148 CXX = @CXX@
149 CXXCPP = @CXXCPP@
150 CXXDEPMODE = @CXXDEPMODE@
151 CXXFLAGS = @CXXFLAGS@
148152 CYGPATH_W = @CYGPATH_W@
149153 DBUS_CFLAGS = @DBUS_CFLAGS@
150154 DBUS_LIBS = @DBUS_LIBS@
232236 abs_top_builddir = @abs_top_builddir@
233237 abs_top_srcdir = @abs_top_srcdir@
234238 ac_ct_CC = @ac_ct_CC@
239 ac_ct_CXX = @ac_ct_CXX@
235240 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236241 am__include = @am__include@
237242 am__leading_dot = @am__leading_dot@
116116 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
117117 CPP = @CPP@
118118 CPPFLAGS = @CPPFLAGS@
119 CXX = @CXX@
120 CXXCPP = @CXXCPP@
121 CXXDEPMODE = @CXXDEPMODE@
122 CXXFLAGS = @CXXFLAGS@
119123 CYGPATH_W = @CYGPATH_W@
120124 DBUS_CFLAGS = @DBUS_CFLAGS@
121125 DBUS_LIBS = @DBUS_LIBS@
203207 abs_top_builddir = @abs_top_builddir@
204208 abs_top_srcdir = @abs_top_srcdir@
205209 ac_ct_CC = @ac_ct_CC@
210 ac_ct_CXX = @ac_ct_CXX@
206211 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
207212 am__include = @am__include@
208213 am__leading_dot = @am__leading_dot@
7272 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
7373 CPP = @CPP@
7474 CPPFLAGS = @CPPFLAGS@
75 CXX = @CXX@
76 CXXCPP = @CXXCPP@
77 CXXDEPMODE = @CXXDEPMODE@
78 CXXFLAGS = @CXXFLAGS@
7579 CYGPATH_W = @CYGPATH_W@
7680 DBUS_CFLAGS = @DBUS_CFLAGS@
7781 DBUS_LIBS = @DBUS_LIBS@
159163 abs_top_builddir = @abs_top_builddir@
160164 abs_top_srcdir = @abs_top_srcdir@
161165 ac_ct_CC = @ac_ct_CC@
166 ac_ct_CXX = @ac_ct_CXX@
162167 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
163168 am__include = @am__include@
164169 am__leading_dot = @am__leading_dot@
441441 </tp:docstring>
442442 </property>
443443
444 <property name="ConnectionError" tp:name-for-bindings="Connection_Error"
445 access="read" type="s" tp:type="DBus_Error_Name">
446 <tp:added version="0.19.7"/>
447 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
448 <p>If the last connection to this account failed with an error,
449 the D-Bus error name of that error; otherwise, the empty string.
450 The account manager is expected to set this by observing the
451 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
452 >Connection.ConnectionError</tp:dbus-ref> and
453 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
454 >Connection.StatusChanged</tp:dbus-ref>
455 signals.</p>
456
457 <p>If ConnectionError is received before the connection disconnects,
458 its first argument should be used to set this property;
459 otherwise, the Reason argument of StatusChanged should be converted
460 to a suitable D-Bus error name.</p>
461
462 <p>Whenever the Connection connects successfully, this property should
463 be reset to the empty string.</p>
464
465 <tp:rationale>
466 <p>This combines the state-recoverability of
467 <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
468 extensibility of Connection.ConnectionError.</p>
469 </tp:rationale>
470 </tp:docstring>
471 </property>
472
473 <property name="ConnectionErrorDetails"
474 tp:name-for-bindings="Connection_Error_Details"
475 access="read" type="a{sv}" tp:type="String_Variant_Map">
476 <tp:added version="0.19.7"/>
477 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
478 <p>If the last connection to this account failed with an error,
479 a mapping representing any additional information about the last
480 disconnection; otherwise, the empty map. The keys and values are
481 the same as for the second argument of
482 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
483 >Connection.ConnectionError</tp:dbus-ref>.</p>
484
485 <p>Whenever the Connection connects successfully, this property should
486 be reset to the empty map.</p>
487
488 <tp:rationale>
489 <p>This combines the state-recoverability of
490 <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
491 extensibility of Connection.ConnectionError.</p>
492 </tp:rationale>
493 </tp:docstring>
494 </property>
495
444496 <property name="CurrentPresence" type="(uss)" access="read"
445497 tp:type="Simple_Presence" tp:name-for-bindings="Current_Presence">
446498 <tp:docstring>
2020 02110-1301, USA.</p>
2121 </tp:license>
2222
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>
23 <interface name="org.freedesktop.Telepathy.Channel.Interface.Anonymity">
24 <tp:added version="0.19.7">(as stable API)</tp:added>
2625
2726 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2827 <p>Interface for requesting the anonymity modes of a channel
29 (as defined in Connection.Interface.Anonymity.DRAFT).</p>
28 (as defined in <tp:dbus-ref namespace="org.freedesktop.Telepathy"
29 >Connection.Interface.Anonymity</tp:dbus-ref>).</p>
3030 </tp:docstring>
3131
3232 <property name="AnonymityModes" type="u" tp:type="Anonymity_Mode_Flags"
1717 </tp:license>
1818 <interface name="org.freedesktop.Telepathy.Channel.Interface.ChatState">
1919 <tp:requires interface="org.freedesktop.Telepathy.Channel.Type.Text"/>
20
21 <tp:mapping name="Chat_State_Map">
22 <tp:added version="0.19.7"/>
23 <tp:docstring>A map from contacts to their chat states.</tp:docstring>
24 <tp:member name="Contact" type="u" tp:type="Contact_Handle">
25 <tp:docstring>A contact</tp:docstring>
26 </tp:member>
27 <tp:member name="State" type="u" tp:type="Channel_Chat_State">
28 <tp:docstring>The contact's chat state</tp:docstring>
29 </tp:member>
30 </tp:mapping>
31
32 <property name="ChatStates" tp:name-for-bindings="Chat_States"
33 access="read" type="a{uu}" tp:type="Chat_State_Map">
34 <tp:added version="0.19.7"/>
35 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
36 <p>A map containing the chat states of all contacts in this
37 channel whose chat state is not Inactive.</p>
38
39 <p>Contacts in this channel, but who are not listed in this map,
40 may be assumed to be in the Inactive state.</p>
41
42 <p>In implementations that do not have this property, its value may be
43 assumed to be empty until a
44 <tp:member-ref>ChatStateChanged</tp:member-ref> signal indicates
45 otherwise.</p>
46
47 <tp:rationale>
48 <p>This property was not present in older versions of telepathy-spec,
49 because chat states in XMPP are not state-recoverable (if you
50 miss the change notification signal, there's no way to know the
51 state). However, this property still allows clients to recover
52 state changes that were seen by the CM before the client started
53 to deal with the channel.</p>
54
55 <p>In CMs that follow older spec versions, assuming Inactive will
56 mean that initial chat states will always be assumed to be
57 Inactive, which is the best we can do. XEP 0085 specifies
58 Inactive as the "neutral" state to be assumed unless told
59 otherwise.</p>
60 </tp:rationale>
61 </tp:docstring>
62 </property>
2063
2164 <method name="SetChatState" tp:name-for-bindings="Set_Chat_State">
2265 <arg direction="in" name="State" type="u" tp:type="Channel_Chat_State">
1616 License along with this library; if not, write to the Free Software
1717 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
1818 </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>
19 <interface name="org.freedesktop.Telepathy.Channel.Interface.ServicePoint">
20 <tp:added version="0.19.7">(as stable API)</tp:added>
2121
2222 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2323 <p>An interface for channels
5454 type="(us)" tp:type="Service_Point" access="read">
5555 <tp:docstring>
5656 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.
57 not connected to a service point, the CM MUST set the
58 <tp:type>Service_Point_Type</tp:type> field to None; for instance,
59 this will be the case for ordinary calls.
5960 </tp:docstring>
6061 </property>
6162
7273 be in the process of connecting to the new service point.</p>
7374 </tp:docstring>
7475
75 <arg name="ServicePoint" type="(us)" tp:type="Service_Point">
76 <arg name="Service_Point" type="(us)" tp:type="Service_Point">
7677 <tp:docstring>
7778 The new service point that is being used.
7879 </tp:docstring>
2020 02110-1301, USA.</p>
2121 </tp:license>
2222
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>
23 <interface name="org.freedesktop.Telepathy.Connection.Interface.Anonymity">
24 <tp:added version="0.19.7">(as stable API)</tp:added>
2625
2726 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2827 <p>An interface to support anonymity settings on a per-connection basis.
5655 service level would choose both (anonymity services are opaque
5756 to clients of this interface).</p>
5857
59 <p>Clients SHOULD NOT set both Client_Info and ShowClient_Info modes.
58 <p>Clients SHOULD NOT set both Client_Info and Show_Client_Info modes.
6059 If they are set, the CM MUST respect Client_Info and ignore
6160 Show_Client_Info.</p>
6261 </tp:docstring>
6766 <p>Explicitly request showing of client information. In connection
6867 context, this can be used to override service default. In channel
6968 context, this overrides connection anonymity modes.</p>
69
7070 <tp:rationale>
71 In GSM, it's possible to have CLIR enabled by default, and
72 explicitly suppress CLIR for a single phone call.
71 <p>In GSM, it's possible to have CLIR enabled by default, and
72 explicitly suppress CLIR for a single phone call.</p>
7373 </tp:rationale>
7474
7575 <p>Clients SHOULD NOT set both Client_Info and Show_Client_Info modes.
7676 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
77 Show_Client_Info. The CM MAY set both Client_Info and Show_Client_Info
7878 in <tp:member-ref>SupportedAnonymityModes</tp:member-ref> to indicate
7979 its support for explicitly hiding and publicising client information.
8080 </p>
109109 </tp:docstring>
110110 </property>
111111
112 <property name="Mandatory" type="b" access="readwrite"
113 tp:name-for-bindings="Mandatory">
112 <property name="AnonymityMandatory" type="b" access="readwrite"
113 tp:name-for-bindings="Anonymity_Mandatory">
114114 <tp:docstring>
115115 <p>This specifies whether or not the anonymity settings MUST be respected
116116 by the CM and any intermediaries between the local and remote contacts.
117117 If this is set to true but anonymity settings cannot be followed, then
118118 the session MUST be denied with a
119 <code>org.freedesktop.Telepathy.Errors.NotAvailable</code> error.
119 <code>org.freedesktop.Telepathy.Errors.WouldBreakAnonymity</code>
120 error.
120121 Any client that sets <tp:member-ref>AnonymityModes</tp:member-ref>
121122 SHOULD also set this property first (rather than accepting the CM's
122123 default value).</p>
123124
124 <p>This property can also be set using a connection parameter in <tp:dbus-ref
125 <p>This property SHOULD also be made available as a parameter to
126 <tp:dbus-ref
125127 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
126 see <tp:type>Conn_Mgr_Param_Flags</tp:type> for more information.</p>
128 with the DBus_Property flag in its
129 <tp:type>Conn_Mgr_Param_Flags</tp:type>. For connections managed
130 by the <tp:dbus-ref
131 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
132 clients (other than the account manager itself) SHOULD set this
133 property via the Account's <tp:dbus-ref
134 namespace="org.freedesktop.Telepathy.Account">UpdateParameters</tp:dbus-ref>
135 method.</p>
127136 </tp:docstring>
128137 </property>
129138
133142 <p>The currently enabled anonymity modes for the connection. Setting
134143 has the effect of requesting new modes for the connection, and may
135144 raise an error if the unsupported modes are set. Successfully changing
136 the modes will result in emmision of
145 the modes will result in emission of
137146 <tp:member-ref>AnonymityModesChanged</tp:member-ref> signal.</p>
138147
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>
148 <p>This property SHOULD also be made available as a parameter to
149 <tp:dbus-ref
150 namespace="org.freedesktop.Telepathy.ConnectionManager">RequestConnection</tp:dbus-ref>,
151 with the DBus_Property flag in its
152 <tp:type>Conn_Mgr_Param_Flags</tp:type>. For connections managed
153 by the <tp:dbus-ref
154 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
155 clients (other than the account manager itself) SHOULD set this
156 property via the Account's <tp:dbus-ref
157 namespace="org.freedesktop.Telepathy.Account">UpdateParameters</tp:dbus-ref>
158 method.</p>
142159 </tp:docstring>
143160 <tp:possible-errors>
144161 <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
2525 <tp:added version="0.19.6">(draft version, not API-stable)</tp:added>
2626
2727 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
28 <p>This interface is for various cellular things (GSM and/or CDMA) things that
28 <p>This interface is for various cellular things (GSM and/or CDMA) that
2929 aren't really applicable to other protocols.</p>
3030 </tp:docstring>
3131
3333 type="u" access="readwrite">
3434 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
3535 <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>
36 giving up, failing delivery and deleting the message. A value of 0
37 means to use the service centre's default period.</p>
38
3839 <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>
40 implementations may round the value up (eg. to a minute or hour
41 precision). The maximum validity period may vary depending on
42 protocol or provider.</p>
43
44 <p>Connections with this interface SHOULD provide this property as a
45 parameter for <tp:dbus-ref namespace="org.freedesktop.Telepathy"
46 >ConnectionManager.RequestConnection</tp:dbus-ref>, with the
47 <code>DBus_Property</code> flag.</p>
48
49 <p>For connections managed by the <tp:dbus-ref
50 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
51 this property SHOULD be set via the Account Manager, by calling
52 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
53 >Account.UpdateParameters</tp:dbus-ref>; the AccountManager
54 provides change-notification, as long as all other clients cooperate
55 by using it instead of setting this property directly.</p>
4256 </tp:docstring>
4357 </property>
4458
4559 <property name="MessageServiceCentre" tp:name-for-bindings="Message_Service_Centre"
4660 type="s" access="readwrite">
4761 <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).
62 <p>Address for the messaging service centre. Typically (as is the case
63 for GSM's SMSC), it's the ISDN / telephony address (ie. a phone
64 number).</p>
65
66 <p>Connections with this interface SHOULD provide this property as a
67 parameter for <tp:dbus-ref namespace="org.freedesktop.Telepathy"
68 >ConnectionManager.RequestConnection</tp:dbus-ref>, with the
69 <code>DBus_Property</code> flag.</p>
70
71 <p>For connections managed by the <tp:dbus-ref
72 namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>,
73 this property SHOULD be set via the Account Manager, by calling
74 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
75 >Account.UpdateParameters</tp:dbus-ref>; the AccountManager
76 provides change-notification, as long as all other clients cooperate
77 by using it instead of setting this property directly.</p>
5078 </tp:docstring>
5179 </property>
5280
104104 </tp:enumvalue>
105105
106106 <tp:enumvalue value="1" suffix="Busy">
107 <tp:docstring>
107 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
108108 <p>The incoming channel should be forwarded if a busy signal is
109109 detected. What defines "Busy" is CM-specific (perhaps a single
110110 resource is already in use, or a user's status is set to Busy
111111 <tp:type>Connection_Presence_Type</tp:type>).</p>
112
112113 <p>If initial timeout is specified for Busy condition and call
113114 waiting is not supported by the service, the timeout will be
114115 ignored.</p>
146147 </tp:docstring>
147148
148149 <tp:member type="u" name="Timeout">
149 <tp:docstring>
150 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
150151 <p>The length of time (in seconds) to wait the contact to respond
151152 to the forwarded channel. This MAY be ignored by the CM if it
152153 isn't supported by the underlying network/protocol for the
153154 specific status of the remote contact (for example, a GSM call
154155 that is forwarded may return Not_Reachable immediately without
155156 waiting for the timeout value to expire).</p>
157
156158 <p>A value of 0 means the condition can match immediately. A
157159 value of MAX_UINT32 means that the CM's default should be
158160 used.</p>
207209 <property name="SupportedForwardingConditions" type="a{uu}" access="read"
208210 tp:type="Supported_Forwarding_Conditions_Map"
209211 tp:name-for-bindings="Supported_Forwarding_Conditions">
210 <tp:docstring>
211 <p>
212 A map of forwarding conditions supported on this connection to
212 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
213 <p>A map of forwarding conditions supported on this connection to
213214 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
215 supported for the specific condition.</p>
216
217 <tp:rationale>
218 <p>When forwarding is done by the provider, different providers
217219 might support different chain sizes, or provider and local
218 implementation chain sizes might differ.
219 </tp:rationale>
220 </p>
220 implementation chain sizes might differ.</p>
221 </tp:rationale>
221222 </tp:docstring>
222223 </property>
223224
224225 <property name="ForwardingRules" type="a{u(ua(uu))}" access="read"
225226 tp:type="Forwarding_Rule_Map" tp:name-for-bindings="Forwarding_Rules">
226 <tp:docstring>
227 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
227228 <p>The current forwarding rules that are enabled for this connection.
228229 Forwarding rules each contain an array of type
229230 <tp:type>Forwarding_Rule_Entry</tp:type>.</p>
268269 </tp:docstring>
269270
270271 <arg direction="in" name="Condition" type="u" tp:type="Forwarding_Condition">
271 <tp:docstring>
272 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
272273 <p>The forwarding rule to override. Note that this SHOULD not affect
273274 other rules; setting a rule that overrides others (such as
274275 Forwarding_Rule_Unconditional) will not modify other rules. This
1616 License along with this library; if not, write to the Free Software
1717 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
1818 </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>
19 <interface name="org.freedesktop.Telepathy.Connection.Interface.ServicePoint">
20 <tp:added version="0.19.7">(as stable API)</tp:added>
2121
2222 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
2323 <p>An interface for connections whose channels may be able to indicate
3232 </tp:docstring>
3333
3434 <tp:struct name="Service_Point_Info" array-name="Service_Point_Info_List">
35 <tp:member type="(us)" tp:type="Service_Point" name="ServicePoint">
35 <tp:member type="(us)" tp:type="Service_Point" name="Service_Point">
3636 <tp:docstring>
3737 The service point.
3838 </tp:docstring>
3939 </tp:member>
40 <tp:member type="as" name="ServiceIDs">
40 <tp:member type="as" name="Service_IDs">
4141 <tp:docstring>
4242 A list of IDs that are mapped to this service. This is provided as
4343 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.
44 requesting channel to a service is by setting the <tp:dbus-ref
45 namespace="org.freedesktop.Telepathy.Channel.Interface.ServicePoint">InitialServicePoint</tp:dbus-ref>
46 property in a channel request.
4747 </tp:docstring>
4848 </tp:member>
4949 <tp:docstring>
50 <p>Description of a service point and IDs which are mapped to id.</p>
50 <p>Description of a service point and IDs which are mapped to it.</p>
5151
52 <p>An example Service Point info for GSM emergency calls (callable through
53 "911" and "112") could look like:</p>
52 <p>An example Service Point info for GSM emergency calls (callable
53 through "911" and "112") could look like:</p>
5454
5555 <pre>
5656 ServicePointInfo = (
57 ServicePoint: (
58 ServicePointType: 1 (Emergency),
59 ServicePoint: "urn:service:sos"
57 Service_Point: (
58 Service_Point_Type: 1 (Emergency),
59 Service_Point: "urn:service:sos"
6060 ),
61 ServiceIDs: [ "911", "112" ]
61 Service_IDs: [ "911", "112" ]
6262 )
6363 </pre>
6464 </tp:docstring>
7272 </property>
7373
7474 <signal name="ServicePointsChanged" tp:name-for-bindings="Service_Points_Changed">
75 <arg name="ServicePoints" type="a((us)as)" tp:type="Service_Point_Info[]">
75 <arg name="Service_Points" type="a((us)as)" tp:type="Service_Point_Info[]">
7676 <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
77 <p>The new list of service points.</p>
77 <p>The new value of
78 <tp:member-ref>KnownServicePoints</tp:member-ref>.</p>
7879 </tp:docstring>
7980 </arg>
8081 <tp:docstring>
81 Indicate that the list of known service points (or their IDs) have
82 changed, presenting the new list.
82 Emitted when the list of known service points (or their IDs) has
83 changed.
8384 </tp:docstring>
8485 </signal>
8586
8687 <tp:struct name="Service_Point">
8788 <tp:docstring>A service point.</tp:docstring>
88 <tp:member type="u" name="ServicePointType" tp:type="Service_Point_Type">
89 <tp:member type="u" name="Service_Point_Type"
90 tp:type="Service_Point_Type">
8991 <tp:docstring>
9092 The service type.
9193 </tp:docstring>
9395 <tp:member type="s" name="Service">
9496 <tp:docstring>
9597 String representation of the service point. The representation is
96 service specific; it may be <tp:type>Uniform_Resource_Name</tp:type>
98 service specific; it may be a 'service' Uniform Resource Name as
99 specified by <a
100 href="http://www.rfc-editor.org/rfc/rfc5031.txt">RFC 5031</a>,
97101 or may be in some other form. Empty, unused or unknown value is
98102 represented by "".
99103 </tp:docstring>
102106
103107 <tp:enum name="Service_Point_Type" type="u">
104108 <tp:docstring>
105 The various types of service points the channel might connect to.
109 The various types of service points a channel might connect to.
106110 </tp:docstring>
107111
108112 <tp:enumvalue value="0" suffix="None">
109113 <tp:docstring>
110 The service point is not used/available.
114 The channel is not communicating with a service point, or it is not
115 known whether it is communicating with a service point (e.g. an
116 ordinary call).
111117 </tp:docstring>
112118 </tp:enumvalue>
113119
124130 </tp:docstring>
125131 </tp:enumvalue>
126132 </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>
132133 </interface>
133134 </node>
134135 <!-- vim:set sw=2 sts=2 et ft=xml: -->
7272 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
7373 CPP = @CPP@
7474 CPPFLAGS = @CPPFLAGS@
75 CXX = @CXX@
76 CXXCPP = @CXXCPP@
77 CXXDEPMODE = @CXXDEPMODE@
78 CXXFLAGS = @CXXFLAGS@
7579 CYGPATH_W = @CYGPATH_W@
7680 DBUS_CFLAGS = @DBUS_CFLAGS@
7781 DBUS_LIBS = @DBUS_LIBS@
159163 abs_top_builddir = @abs_top_builddir@
160164 abs_top_srcdir = @abs_top_srcdir@
161165 ac_ct_CC = @ac_ct_CC@
166 ac_ct_CXX = @ac_ct_CXX@
162167 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
163168 am__include = @am__include@
164169 am__leading_dot = @am__leading_dot@
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.6</tp:version>
5 <tp:version>0.19.7</tp:version>
66
77 <tp:copyright>Copyright © 2005-2010 Collabora Limited</tp:copyright>
88 <tp:copyright>Copyright © 2005-2010 Nokia Corporation</tp:copyright>
419419 </tp:docstring>
420420 </tp:error>
421421
422 <tp:copyright>Copyright © 2005-2009 Collabora Limited</tp:copyright>
422 <tp:error name="Would Break Anonymity">
423 <tp:added version="0.19.7"/>
424 <tp:docstring>
425 Raised if a request cannot be satisfied without violating an earlier
426 request for anonymity, and the earlier request specified that raising
427 an error is preferable to disclosing the user's identity (for instance
428 via <tp:dbus-ref namespace="org.freedesktop.Telepathy"
429 >Connection.Interface.Anonymity.AnonymityMandatory</tp:dbus-ref> or
430 <tp:dbus-ref namespace="org.freedesktop.Telepathy"
431 >Channel.Interface.Anonymity.AnonymityMandatory</tp:dbus-ref>).
432 </tp:docstring>
433 </tp:error>
434
435 <tp:copyright>Copyright © 2005-2010 Collabora Limited</tp:copyright>
423436 <tp:copyright>Copyright © 2005-2009 Nokia Corporation</tp:copyright>
424437 <tp:license xmlns="http://www.w3.org/1999/xhtml">
425438 <p>This library is free software; you can redistribute it and/or
132132 channel-request.c \
133133 client.c \
134134 connection.c \
135 connection-contact-info.c \
135136 connection-internal.h \
136137 connection-handles.c \
137138 connection-manager.c \
107107 capabilities.lo channel.lo channel-group.lo \
108108 channel-dispatcher.lo channel-dispatch-operation.lo \
109109 channel-manager.lo channel-request.lo client.lo connection.lo \
110 connection-handles.lo connection-manager.lo contact.lo \
111 contacts-mixin.lo dbus.lo dbus-daemon.lo \
112 dbus-properties-mixin.lo debug.lo debug-sender.lo \
113 interfaces.lo errors.lo exportable-channel.lo gnio-util.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 \
110 connection-contact-info.lo connection-handles.lo \
111 connection-manager.lo contact.lo contacts-mixin.lo dbus.lo \
112 dbus-daemon.lo dbus-properties-mixin.lo debug.lo \
113 debug-sender.lo interfaces.lo errors.lo exportable-channel.lo \
114 gnio-util.lo group-mixin.lo gtypes.lo handle.lo \
115 handle-channels-context.lo handle-repo.lo \
116 handle-repo-dynamic.lo handle-repo-static.lo handle-set.lo \
117 heap.lo intset.lo channel-iface.lo channel-factory-iface.lo \
118 media-interfaces.lo message-mixin.lo \
118119 observe-channels-context.lo presence-mixin.lo \
119120 properties-mixin.lo proxy.lo proxy-methods.lo proxy-signals.lo \
120121 run.lo simple-approver.lo simple-handler.lo simple-observer.lo \
189190 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
190191 CPP = @CPP@
191192 CPPFLAGS = @CPPFLAGS@
193 CXX = @CXX@
194 CXXCPP = @CXXCPP@
195 CXXDEPMODE = @CXXDEPMODE@
196 CXXFLAGS = @CXXFLAGS@
192197 CYGPATH_W = @CYGPATH_W@
193198 DBUS_CFLAGS = @DBUS_CFLAGS@
194199 DBUS_LIBS = @DBUS_LIBS@
276281 abs_top_builddir = @abs_top_builddir@
277282 abs_top_srcdir = @abs_top_srcdir@
278283 ac_ct_CC = @ac_ct_CC@
284 ac_ct_CXX = @ac_ct_CXX@
279285 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
280286 am__include = @am__include@
281287 am__leading_dot = @am__leading_dot@
449455 channel-request.c \
450456 client.c \
451457 connection.c \
458 connection-contact-info.c \
452459 connection-internal.h \
453460 connection-handles.c \
454461 connection-manager.c \
552559 versions/0.11.3.abi \
553560 versions/0.11.4.abi \
554561 versions/0.11.5.abi \
555 versions/0.11.6.abi
562 versions/0.11.6.abi \
563 versions/0.11.7.abi
556564
557565
558566 # The quoting here is unnecessary but harmless, and has the useful side-effect
817825 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel-request.Plo@am__quote@
818826 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Plo@am__quote@
819827 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Plo@am__quote@
828 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-contact-info.Plo@am__quote@
820829 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-handles.Plo@am__quote@
821830 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-manager.Plo@am__quote@
822831 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection.Plo@am__quote@
4040 versions/0.11.3.abi \
4141 versions/0.11.4.abi \
4242 versions/0.11.5.abi \
43 versions/0.11.6.abi
43 versions/0.11.6.abi \
44 versions/0.11.7.abi
4445
4546 # The quoting here is unnecessary but harmless, and has the useful side-effect
4647 # that vim quickfix mode (:make) doesn't interpret the libtool --mode=link
2929 #include <telepathy-glib/gtypes.h>
3030 #include <telepathy-glib/interfaces.h>
3131 #include <telepathy-glib/proxy-subclass.h>
32 #include <telepathy-glib/util-internal.h>
3332 #include <telepathy-glib/util.h>
3433
3534 #define DEBUG_FLAG TP_DEBUG_ACCOUNTS
35 #include "telepathy-glib/connection-internal.h"
3636 #include "telepathy-glib/debug-internal.h"
3737 #include "telepathy-glib/proxy-internal.h"
38 #include <telepathy-glib/util-internal.h>
3839
3940 #include "telepathy-glib/_gen/signals-marshal.h"
4041 #include "telepathy-glib/_gen/tp-cli-account-body.h"
8485
8586 TpConnectionStatus connection_status;
8687 TpConnectionStatusReason reason;
88 gchar *error;
89 GHashTable *error_details;
8790
8891 TpConnectionPresenceType presence;
8992 gchar *status;
132135 PROP_CURRENT_STATUS_MESSAGE,
133136 PROP_CONNECTION_STATUS,
134137 PROP_CONNECTION_STATUS_REASON,
138 PROP_CONNECTION_ERROR,
139 PROP_CONNECTION_ERROR_DETAILS,
135140 PROP_CONNECTION,
136141 PROP_DISPLAY_NAME,
137142 PROP_CONNECTION_MANAGER,
208213 TpAccountPrivate);
209214
210215 self->priv->connection_status = TP_CONNECTION_STATUS_DISCONNECTED;
216 self->priv->error = g_strdup (TP_ERROR_STR_DISCONNECTED);
217 self->priv->error_details = g_hash_table_new_full (g_str_hash, g_str_equal,
218 g_free, (GDestroyNotify) tp_g_value_slice_free);
211219 }
212220
213221 static void
224232 if (priv->connection_status != TP_CONNECTION_STATUS_DISCONNECTED)
225233 {
226234 priv->connection_status = TP_CONNECTION_STATUS_DISCONNECTED;
235 tp_clear_pointer (&priv->error, g_free);
236 g_hash_table_remove_all (priv->error_details);
227237
228238 if (domain == TP_DBUS_ERRORS && code == TP_DBUS_ERROR_OBJECT_REMOVED)
229239 {
230240 /* presumably the user asked for it to be deleted... */
231241 priv->reason = TP_CONNECTION_STATUS_REASON_REQUESTED;
242 priv->error = g_strdup (TP_ERROR_STR_CANCELLED);
243 g_hash_table_insert (priv->error_details,
244 g_strdup ("debug-message"),
245 tp_g_value_slice_new_static_string ("TpAccount was removed"));
232246 }
233247 else
234248 {
249 gchar *s;
250
235251 priv->reason = TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED;
252 priv->error = g_strdup (TP_ERROR_STR_DISCONNECTED);
253 s = g_strdup_printf ("TpAccount was invalidated: %s #%u: %s",
254 g_quark_to_string (domain), code, message);
255 g_hash_table_insert (priv->error_details,
256 g_strdup ("debug-message"),
257 tp_g_value_slice_new_take_string (s));
236258 }
237259
238260 g_object_notify ((GObject *) self, "connection-status");
239261 g_object_notify ((GObject *) self, "connection-status-reason");
262 g_object_notify ((GObject *) self, "connection-error");
263 g_object_notify ((GObject *) self, "connection-error-details");
240264 }
241265 }
242266
257281 }
258282
259283 static void
260 _tp_account_free_connection (TpAccount *account)
261 {
262 TpAccountPrivate *priv = account->priv;
263
264 if (priv->connection == NULL)
265 return;
266
267 g_object_unref (priv->connection);
268 priv->connection = NULL;
269 }
270
271 static void
272284 _tp_account_set_connection (TpAccount *account,
273285 const gchar *path)
274286 {
283295 return;
284296 }
285297
286 _tp_account_free_connection (account);
298 tp_clear_object (&account->priv->connection);
287299
288300 if (tp_strdiff ("/", path))
289301 {
314326 TpAccountPrivate *priv = account->priv;
315327 GValueArray *arr;
316328 TpConnectionStatus old_s = priv->connection_status;
329 gboolean status_changed = FALSE;
317330 gboolean presence_changed = FALSE;
318331
319332 if (g_hash_table_lookup (properties, "Interfaces") != NULL)
338351 }
339352
340353 if (g_hash_table_lookup (properties, "ConnectionStatus") != NULL)
341 priv->connection_status =
342 tp_asv_get_uint32 (properties, "ConnectionStatus", NULL);
343
354 {
355 priv->connection_status =
356 tp_asv_get_uint32 (properties, "ConnectionStatus", NULL);
357
358 if (old_s != priv->connection_status)
359 status_changed = TRUE;
360 }
344361
345362 if (g_hash_table_lookup (properties, "ConnectionStatusReason") != NULL)
346 priv->reason = tp_asv_get_int32 (properties,
347 "ConnectionStatusReason", NULL);
363 {
364 TpConnectionStatusReason old = priv->reason;
365
366 priv->reason =
367 tp_asv_get_uint32 (properties, "ConnectionStatusReason", NULL);
368
369 if (old != priv->reason)
370 status_changed = TRUE;
371 }
372
373 if (g_hash_table_lookup (properties, "ConnectionError") != NULL)
374 {
375 const gchar *new_error = tp_asv_get_string (properties,
376 "ConnectionError");
377
378 if (tp_str_empty (new_error))
379 new_error = NULL;
380
381 if (tp_strdiff (new_error, priv->error))
382 {
383 tp_clear_pointer (&priv->error, g_free);
384 priv->error = g_strdup (new_error);
385 status_changed = TRUE;
386 }
387 }
388
389 if (g_hash_table_lookup (properties, "ConnectionErrorDetails") != NULL)
390 {
391 const GHashTable *details = tp_asv_get_boxed (properties,
392 "ConnectionErrorDetails", TP_HASH_TYPE_STRING_VARIANT_MAP);
393
394 if ((details != NULL && tp_asv_size (details) > 0) ||
395 tp_asv_size (priv->error_details) > 0)
396 {
397 g_hash_table_remove_all (priv->error_details);
398
399 if (details != NULL)
400 tp_g_hash_table_update (priv->error_details,
401 (GHashTable *) details,
402 (GBoxedCopyFunc) g_strdup,
403 (GBoxedCopyFunc) tp_g_value_slice_dup);
404
405 status_changed = TRUE;
406 }
407 }
408
409 if (status_changed)
410 {
411 if (priv->connection_status == TP_CONNECTION_STATUS_CONNECTED)
412 {
413 /* our connection status is CONNECTED - clear any error we may
414 * have recorded previously */
415 g_hash_table_remove_all (priv->error_details);
416 tp_clear_pointer (&priv->error, g_free);
417 }
418 else if (priv->error == NULL)
419 {
420 /* our connection status is worse than CONNECTED but the
421 * AccountManager didn't tell us why, so attempt to guess
422 * a detailed error from the status reason */
423 const gchar *guessed = NULL;
424
425 _tp_connection_status_reason_to_gerror (priv->reason,
426 old_s, &guessed, NULL);
427
428 if (guessed == NULL)
429 guessed = TP_ERROR_STR_DISCONNECTED;
430
431 priv->error = g_strdup (guessed);
432 }
433 }
348434
349435 if (g_hash_table_lookup (properties, "CurrentPresence") != NULL)
350436 {
453539 parameters);
454540 }
455541
456 if (priv->connection_status != old_s)
542 if (status_changed)
457543 {
458544 g_signal_emit (account, signals[STATUS_CHANGED], 0,
459 old_s, priv->connection_status, priv->reason, NULL, NULL);
545 old_s, priv->connection_status, priv->reason, priv->error,
546 priv->error_details);
460547
461548 g_object_notify (G_OBJECT (account), "connection-status");
462549 g_object_notify (G_OBJECT (account), "connection-status-reason");
550 g_object_notify (G_OBJECT (account), "connection-error");
551 g_object_notify (G_OBJECT (account), "connection-error-details");
463552 }
464553
465554 if (presence_changed)
481570
482571 priv->connection_object_path = g_strdup (path);
483572
484 if (priv->connection != NULL)
485 _tp_account_free_connection (account);
573 tp_clear_object (&account->priv->connection);
486574
487575 g_object_notify (G_OBJECT (account), "connection");
488576 }
628716 break;
629717 case PROP_CONNECTION_STATUS_REASON:
630718 g_value_set_uint (value, self->priv->reason);
719 break;
720 case PROP_CONNECTION_ERROR:
721 g_value_set_string (value, self->priv->error);
722 break;
723 case PROP_CONNECTION_ERROR_DETAILS:
724 g_value_set_boxed (value, self->priv->error_details);
631725 break;
632726 case PROP_CONNECTION:
633727 g_value_set_object (value,
687781
688782 priv->dispose_has_run = TRUE;
689783
690 _tp_account_free_connection (self);
784 tp_clear_object (&self->priv->connection);
691785
692786 /* release any references held by the object here */
693787 if (G_OBJECT_CLASS (tp_account_parent_class)->dispose != NULL)
713807 g_free (priv->icon_name);
714808 g_free (priv->display_name);
715809
716 if (priv->parameters != NULL)
717 g_hash_table_unref (priv->parameters);
810 tp_clear_pointer (&priv->parameters, g_hash_table_unref);
811 tp_clear_pointer (&priv->error_details, g_hash_table_unref);
718812
719813 /* free any data held directly by the object here */
720814 if (G_OBJECT_CLASS (tp_account_parent_class)->finalize != NULL)
856950 * The account's connection status type (a %TpConnectionStatus).
857951 *
858952 * One can receive change notifications on this property by connecting
953 * to the #TpAccount::status-changed signal, or by connecting
859954 * to the #GObject::notify signal and using this property as the signal
860955 * detail.
861956 *
880975 * The account's connection status reason (a %TpConnectionStatusReason).
881976 *
882977 * One can receive change notifications on this property by connecting
978 * to the #TpAccount::status-changed signal, or by connecting
883979 * to the #GObject::notify signal and using this property as the signal
884980 * detail.
885981 *
899995 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
900996
901997 /**
998 * TpAccount:connection-error:
999 *
1000 * The D-Bus error name for the last disconnection or connection failure,
1001 * (in particular, %TP_ERROR_STR_CANCELLED if it was disconnected by user
1002 * request), or %NULL if the account is connected.
1003 *
1004 * One can receive change notifications on this property by connecting
1005 * to the #TpAccount::status-changed signal, or by connecting
1006 * to the #GObject::notify signal and using this property as the signal
1007 * detail.
1008 *
1009 * This is not guaranteed to have been retrieved until
1010 * tp_proxy_prepare_async() has finished; until then, the value is
1011 * %NULL.
1012 *
1013 * Since: 0.11.7
1014 */
1015 g_object_class_install_property (object_class, PROP_CONNECTION_ERROR,
1016 g_param_spec_string ("connection-error",
1017 "ConnectionError",
1018 "The account's last connection error",
1019 NULL,
1020 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1021
1022 /**
1023 * TpAccount:connection-error-details:
1024 *
1025 * A map from string to #GValue containing extensible error details
1026 * related to #TpAccount:connection-error. Functions like tp_asv_get_string()
1027 * can be used to read from this map.
1028 *
1029 * The keys for this map are defined by
1030 * <ulink url="http://telepathy.freedesktop.org/spec/">the Telepathy D-Bus
1031 * Interface Specification</ulink>. They will typically include
1032 * <literal>debug-message</literal>, which is a debugging message in the C
1033 * locale, analogous to #GError.message.
1034 *
1035 * One can receive change notifications on this property by connecting
1036 * to the #TpAccount::status-changed signal, or by connecting
1037 * to the #GObject::notify signal and using this property as the signal
1038 * detail.
1039 *
1040 * This is not guaranteed to have been retrieved until
1041 * tp_proxy_prepare_async() has finished; until then, the value is
1042 * an empty map.
1043 *
1044 * Since: 0.11.7
1045 */
1046 g_object_class_install_property (object_class, PROP_CONNECTION_ERROR_DETAILS,
1047 g_param_spec_boxed ("connection-error-details",
1048 "ConnectionErrorDetails",
1049 "Extensible details of the account's last connection error",
1050 G_TYPE_HASH_TABLE,
1051 G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
1052
1053 /**
9021054 * TpAccount:connection:
9031055 *
9041056 * The connection of the account, or NULL if account is offline.
11421294 /**
11431295 * TpAccount::status-changed:
11441296 * @account: the #TpAccount
1145 * @old_status: old connection status
1146 * @new_status: new connection status
1147 * @reason: the reason for the status change
1148 * @dbus_error_name: currently unused, but for exposing the dbus error name
1149 * on a connection error in the future
1150 * @details: currently unused, but for exposing the error details
1151 * on a connection error in the future
1297 * @old_status: old #TpAccount:connection-status
1298 * @new_status: new #TpAccount:connection-status
1299 * @reason: the #TpAccount:connection-status-reason
1300 * @dbus_error_name: (allow-none): the #TpAccount:connection-error
1301 * @details: (element-type utf8 GObject.Value): the
1302 * #TpAccount:connection-error-details
11521303 *
11531304 * Emitted when the connection status on the account changes.
1305 *
1306 * The @dbus_error_name and @details parameters were present, but
1307 * non-functional (always %NULL), in older versions. They have been
1308 * available with their current behaviour since version 0.11.7.
11541309 *
11551310 * Since: 0.9.0
11561311 */
11581313 G_TYPE_FROM_CLASS (object_class),
11591314 G_SIGNAL_RUN_LAST,
11601315 0, NULL, NULL,
1161 _tp_marshal_VOID__UINT_UINT_UINT_STRING_POINTER,
1316 _tp_marshal_VOID__UINT_UINT_UINT_STRING_BOXED,
11621317 G_TYPE_NONE, 5, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING,
11631318 G_TYPE_HASH_TABLE);
11641319
27452900
27462901 g_value_unset (&value);
27472902 }
2903
2904 /**
2905 * tp_account_get_detailed_error: (skip)
2906 * @self: an account
2907 * @details: (out) (allow-none) (element-type utf8 GObject.Value) (transfer none):
2908 * optionally used to return a map from string to #GValue, which must not be
2909 * modified, destroyed or unreffed by the caller
2910 *
2911 * If the account's connection is not connected, return the D-Bus error name
2912 * with which it last disconnected or failed to connect (in particular, this
2913 * is %TP_ERROR_STR_CANCELLED if it was disconnected by a user request).
2914 * This is the same as #TpAccount:connection-error.
2915 *
2916 * If @details is not %NULL, it will be used to return additional details about
2917 * the error (the same as #TpAccount:connection-error-details).
2918 *
2919 * Otherwise, return %NULL, without altering @details.
2920 *
2921 * The returned string and @details may become invalid when the main loop is
2922 * re-entered or the account is destroyed.
2923 *
2924 * Returns: (transfer none) (allow-none): a D-Bus error name, or %NULL.
2925 *
2926 * Since: 0.11.7
2927 */
2928 const gchar *
2929 tp_account_get_detailed_error (TpAccount *self,
2930 const GHashTable **details)
2931 {
2932 g_return_val_if_fail (TP_IS_ACCOUNT (self), NULL);
2933
2934 if (self->priv->connection_status == TP_CONNECTION_STATUS_CONNECTED)
2935 return NULL;
2936
2937 if (details != NULL)
2938 *details = self->priv->error_details;
2939
2940 return self->priv->error;
2941 }
156156 TpConnectionStatus tp_account_get_connection_status (TpAccount *account,
157157 TpConnectionStatusReason *reason);
158158
159 const gchar *tp_account_get_detailed_error (TpAccount *self,
160 const GHashTable **details);
161
159162 TpConnectionPresenceType tp_account_get_current_presence (TpAccount *account,
160163 gchar **status, gchar **status_message);
161164
539539 self->self_handle = 0;
540540 }
541541
542 if (priv->bus_proxy != NULL)
543 {
544 if (self->bus_name != NULL)
545 {
546 tp_dbus_daemon_release_name (priv->bus_proxy, self->bus_name, NULL);
547 }
548
549 g_object_unref (priv->bus_proxy);
550 priv->bus_proxy = NULL;
551 }
542 if (priv->bus_proxy != NULL && self->bus_name != NULL)
543 tp_dbus_daemon_release_name (priv->bus_proxy, self->bus_name, NULL);
544
545 tp_clear_object (&priv->bus_proxy);
552546
553547 g_ptr_array_foreach (priv->channel_factories, (GFunc) g_object_unref, NULL);
554548 g_ptr_array_free (priv->channel_factories, TRUE);
566560 }
567561
568562 for (i = 0; i < NUM_TP_HANDLE_TYPES; i++)
569 {
570 if (priv->handles[i])
571 {
572 g_object_unref ((GObject *) priv->handles[i]);
573 priv->handles[i] = NULL;
574 }
575 }
563 tp_clear_object (priv->handles + i);
576564
577565 if (priv->interfaces)
578566 {
11131113 /**
11141114 * tp_channel_dispatch_operation_handle_with_async:
11151115 * @self: a #TpChannelDispatchOperation
1116 * @handler: The well-known bus name (starting with #TP_CLIENT_BUS_NAME_BASE)
1117 * of the channel handler that should handle the channel, or %NULL
1118 * if the client has no preferred channel handler
1116 * @handler: (allow-none): The well-known bus name (starting with
1117 * #TP_CLIENT_BUS_NAME_BASE) of the channel handler that should handle the
1118 * channel, or %NULL if the client has no preferred channel handler
11191119 * @callback: a callback to call when the call returns
11201120 * @user_data: data to pass to @callback
11211121 *
13221322
13231323 return self;
13241324 }
1325
1326 /**
1327 * tp_channel_dispatch_operation_handle_with_time_async:
1328 * @self: a #TpChannelDispatchOperation
1329 * @handler: (allow-none): The well-known bus name (starting with
1330 * #TP_CLIENT_BUS_NAME_BASE) of the channel handler that should handle the
1331 * channel, or %NULL if the client has no preferred channel handler
1332 * @user_action_timestamp: the time at which user action occurred
1333 * @callback: a callback to call when the call returns
1334 * @user_data: data to pass to @callback
1335 *
1336 * A variant of tp_channel_dispatch_operation_handle_with_async()
1337 * allowing the approver to pass an user action time.
1338 * This timestamp will be passed to the Handler when HandleChannels is called.
1339 *
1340 * If an X server timestamp for the user action causing this method call is
1341 * available, @user_action_timestamp should be this timestamp (for instance, the
1342 * result of gdk_event_get_time() if it is not %GDK_CURRENT_TIME). Otherwise, it
1343 * may be 0 to behave as if there was no user action or it happened a long time
1344 * ago, or %G_MAXINT64 to have the Handler behave as though the user action had
1345 * just happened (resembling, but not numerically equal to, %GDK_CURRENT_TIME).
1346 *
1347 * This method has been introduced in telepathy-mission-control 5.5.0.
1348 *
1349 * Since: 0.11.7
1350 */
1351 void
1352 tp_channel_dispatch_operation_handle_with_time_async (
1353 TpChannelDispatchOperation *self,
1354 const gchar *handler,
1355 gint64 user_action_timestamp,
1356 GAsyncReadyCallback callback,
1357 gpointer user_data)
1358 {
1359 GSimpleAsyncResult *result;
1360
1361 g_return_if_fail (TP_IS_CHANNEL_DISPATCH_OPERATION (self));
1362
1363 result = g_simple_async_result_new (G_OBJECT (self),
1364 callback, user_data,
1365 tp_channel_dispatch_operation_handle_with_time_async);
1366
1367 tp_cli_channel_dispatch_operation_call_handle_with_time (self, -1,
1368 handler != NULL ? handler: "", user_action_timestamp,
1369 handle_with_cb, result, NULL, G_OBJECT (self));
1370 }
1371
1372 /**
1373 * tp_channel_dispatch_operation_handle_with_time_finish:
1374 * @self: a #TpChannelDispatchOperation
1375 * @result: a #GAsyncResult
1376 * @error: a #GError to fill
1377 *
1378 * Finishes an async call to HandleWithTime().
1379 *
1380 * Returns: %TRUE if the HandleWithTime() call was successful, otherwise %FALSE
1381 *
1382 * Since: 0.11.7
1383 */
1384 gboolean
1385 tp_channel_dispatch_operation_handle_with_time_finish (
1386 TpChannelDispatchOperation *self,
1387 GAsyncResult *result,
1388 GError **error)
1389 {
1390 GSimpleAsyncResult *simple;
1391
1392 g_return_val_if_fail (TP_IS_CHANNEL_DISPATCH_OPERATION (self), FALSE);
1393 g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
1394 g_return_val_if_fail (g_simple_async_result_is_valid (result,
1395 G_OBJECT (self), tp_channel_dispatch_operation_handle_with_time_async),
1396 FALSE);
1397
1398 simple = G_SIMPLE_ASYNC_RESULT (result);
1399
1400 if (g_simple_async_result_propagate_error (simple, error))
1401 return FALSE;
1402
1403 return TRUE;
1404 }
117117 GAsyncResult *result,
118118 GError **error);
119119
120 void tp_channel_dispatch_operation_handle_with_time_async (
121 TpChannelDispatchOperation *self,
122 const gchar *handler,
123 gint64 user_action_timestamp,
124 GAsyncReadyCallback callback,
125 gpointer user_data);
126
127 gboolean tp_channel_dispatch_operation_handle_with_time_finish (
128 TpChannelDispatchOperation *self,
129 GAsyncResult *result,
130 GError **error);
131
120132 G_END_DECLS
121133
122134 #include <telepathy-glib/_gen/tp-cli-channel-dispatch-operation.h>
2222 * SECTION:channel-factory-iface
2323 * @title: TpChannelFactoryIface
2424 * @short_description: interface for channel allocation/tracking
25 * @see_also: #TpSvcConnection
25 * @see_also: #TpSvcConnection, #TpChannelManager
2626 *
2727 * A channel factory is attached to a connection. It carries out channel
2828 * requests from the connection, and responds to channel-related events
2929 * on the underlying network connection (e.g. incoming calls).
3030 *
31 * The connection has an array of channel factories. In a trivial
32 * implementation there might be a single channel factory which handles
33 * all requests and all incoming events, but in general, there will be
34 * multiple channel factories handling different types of channel.
35 *
36 * #TpChannelManager is a newer interface (introduced in telepathy-glib
37 * 0.7.15) for allocating and tracking channels which supports the
38 * Requests D-Bus interface introduced in version 0.17.11 of the
39 * specification. New connection managers should implement that interface
40 * instead, and existing connection managers should migrate to it.
31 * Deprecated since version 0.11.7. Use #TpChannelManager, a newer
32 * interface which can be used to implement modern D-Bus APIs, instead.
33 *
34 * Deprecated: 0.11.7
4135 */
4236
4337 #include <telepathy-glib/channel-factory-iface.h>
147141 * to be usable afterwards. This is called when the connection goes to
148142 * disconnected state, before either emitting the StatusChanged signal or
149143 * calling disconnected().
144 *
145 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
146 *
147 * Deprecated: 0.11.7
150148 */
151149 void
152150 tp_channel_factory_iface_close_all (TpChannelFactoryIface *self)
163161 *
164162 * Indicate that the connection has gone from disconnected to connecting
165163 * state.
164 *
165 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
166 *
167 * Deprecated: 0.11.7
166168 */
167169 void
168170 tp_channel_factory_iface_connecting (TpChannelFactoryIface *self)
178180 * @self: An implementation of the channel factory interface
179181 *
180182 * Indicate that the connection has gone from connecting to connected state.
183 *
184 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
185 *
186 * Deprecated: 0.11.7
181187 */
182188 void
183189 tp_channel_factory_iface_connected (TpChannelFactoryIface *self)
193199 * @self: An implementation of the channel factory interface
194200 *
195201 * Indicate that the connection has become disconnected.
202 *
203 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
204 *
205 * Deprecated: 0.11.7
196206 */
197207 void
198208 tp_channel_factory_iface_disconnected (TpChannelFactoryIface *self)
210220 * @data: Extra data to be passed to @func
211221 *
212222 * Call func(channel, data) for each channel managed by this factory.
223 *
224 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
225 *
226 * Deprecated: 0.11.7
213227 */
214228 void
215229 tp_channel_factory_iface_foreach (TpChannelFactoryIface *self,
243257 *
244258 * Request a channel.
245259 *
260 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
261 *
262 * Deprecated: 0.11.7
263 *
246264 * Returns: one of the values of #TpChannelFactoryRequestStatus, and
247265 * behaves as documented for that return value
248266 */
281299 * %NULL or a request that led to the channel's creation; callers are expected
282300 * to determine which channels satisfy which requests based on the handle
283301 * and handle-type.
302 *
303 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
304 *
305 * Deprecated: 0.11.7
284306 */
285307 void
286308 tp_channel_factory_iface_emit_new_channel (gpointer instance,
302324 * could become useful.
303325 *
304326 * request is as for tp_channel_factory_iface_emit_new_channel().
327 *
328 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
329 *
330 * Deprecated: 0.11.7
305331 */
306332 void
307333 tp_channel_factory_iface_emit_channel_error (gpointer instance,
2929
3030 G_BEGIN_DECLS
3131
32 #ifndef TP_DISABLE_DEPRECATED
33
3234 #define TP_TYPE_CHANNEL_FACTORY_IFACE (tp_channel_factory_iface_get_type ())
3335
3436 #define TP_CHANNEL_FACTORY_IFACE(obj) \
4749 * TpChannelFactoryIface:
4850 *
4951 * Opaque typedef representing any channel factory implementation.
52 *
53 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
54 *
55 * Deprecated: 0.11.7
5056 */
5157 typedef struct _TpChannelFactoryIface TpChannelFactoryIface;
5258
7682 * existing channel.
7783 *
7884 * Indicates the result of a channel request.
85 *
86 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
87 *
88 * Deprecated: 0.11.7
7989 */
8090 typedef enum { /*< skip >*/
8191 TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_IMPLEMENTED = 0,
93103 *
94104 * A virtual method on a channel factory that takes no extra parameters
95105 * and returns nothing.
106 *
107 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
108 *
109 * Deprecated: 0.11.7
96110 */
97111 typedef void (*TpChannelFactoryIfaceProc) (TpChannelFactoryIface *self);
98112
117131 *
118132 * Signature of an implementation of RequestChannel.
119133 *
134 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
135 *
136 * Deprecated: 0.11.7
137 *
120138 * Returns: one of the values of #TpChannelFactoryRequestStatus, and
121139 * behaves as documented for that return value
122140 */
133151 *
134152 * Signature of an implementation of foreach, which must call
135153 * func(channel, data) for each channel managed by this factory.
154 *
155 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
156 *
157 * Deprecated: 0.11.7
136158 */
137159 typedef void (*TpChannelFactoryIfaceForeachImpl) (TpChannelFactoryIface *self,
138160 TpChannelFunc func, gpointer data);
157179 * implementations. See #TpChannelFactoryIfaceRequestImpl for details.
158180 *
159181 * The class structure and vtable for a channel factory implementation.
182 *
183 * Deprecated since version 0.11.7. Use #TpChannelManager instead.
184 *
185 * Deprecated: 0.11.7
160186 */
161187 struct _TpChannelFactoryIfaceClass {
162188 GTypeInterface parent_class;
167193 TpChannelFactoryIfaceProc disconnected;
168194 TpChannelFactoryIfaceForeachImpl foreach;
169195 TpChannelFactoryIfaceRequestImpl request;
170 };
196 } _TP_GNUC_DEPRECATED;
171197
172198 GType tp_channel_factory_iface_get_type (void);
173199
193219 void tp_channel_factory_iface_emit_channel_error (gpointer instance,
194220 TpChannelIface *channel, GError *error, gpointer request);
195221
222 #endif /* not TP_DISABLE_DEPRECATED */
223
196224 G_END_DECLS
197225
198226 #endif /* __TP_CHANNEL_FACTORY_IFACE_H__ */
686686 {
687687 TpChannel *self = TP_CHANNEL (proxy);
688688
689 /* FIXME: fd.o #24882: when that spec bug is fixed, use Chat_State_Map
690 * instead of Channel_Call_State_Map (the underlying D-Bus type is the same
691 * though) */
692 if (error == NULL && G_VALUE_HOLDS (value,
693 TP_HASH_TYPE_CHANNEL_CALL_STATE_MAP))
689 if (error == NULL && G_VALUE_HOLDS (value, TP_HASH_TYPE_CHAT_STATE_MAP))
694690 {
695691 tp_g_hash_table_update (self->priv->chat_states,
696692 g_value_get_boxed (value), NULL, NULL);
730726 self, tp_channel_chat_state_changed_cb, NULL, NULL, NULL,
731727 NULL);
732728
733 /* this isn't really in telepathy-spec yet (fd.o #24882) but is
734 * harmless... */
735729 tp_cli_dbus_properties_call_get (self, -1,
736730 TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE, "ChatStates",
737731 tp_channel_get_initial_chat_states_cb,
12861280
12871281 self->priv->conn_invalidated_id = 0;
12881282
1289 g_object_unref (self->priv->connection);
1290 self->priv->connection = NULL;
1283 tp_clear_object (&self->priv->connection);
12911284
12921285 finally:
12931286 ((GObjectClass *) tp_channel_parent_class)->dispose (object);
1414 <xi:include href="../spec/Channel_Type_Stream_Tube.xml"/>
1515 <xi:include href="../spec/Channel_Type_DBus_Tube.xml"/>
1616
17 <xi:include href="../spec/Channel_Interface_Anonymity.xml"/>
1718 <xi:include href="../spec/Channel_Interface_Call_State.xml"/>
1819 <xi:include href="../spec/Channel_Interface_Chat_State.xml"/>
1920 <xi:include href="../spec/Channel_Interface_Destroyable.xml"/>
2324 <xi:include href="../spec/Channel_Interface_Media_Signalling.xml"/>
2425 <xi:include href="../spec/Channel_Interface_Messages.xml"/>
2526 <xi:include href="../spec/Channel_Interface_Password.xml"/>
27 <xi:include href="../spec/Channel_Interface_Service_Point.xml"/>
2628 <xi:include href="../spec/Channel_Interface_Tube.xml"/>
2729
2830 </tp:spec>
0 /*
1 * connection-contact-info.c - proxy for a Telepathy connection
2 *
3 * Copyright (C) 2010 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 #include "telepathy-glib/connection.h"
21
22 #include <string.h>
23
24 #include <dbus/dbus-protocol.h>
25
26 #include <telepathy-glib/dbus.h>
27 #include <telepathy-glib/gtypes.h>
28 #include <telepathy-glib/interfaces.h>
29 #include <telepathy-glib/util.h>
30
31 #define DEBUG_FLAG TP_DEBUG_CONNECTION
32 #include "telepathy-glib/connection-internal.h"
33 #include "telepathy-glib/debug-internal.h"
34 #include "telepathy-glib/proxy-internal.h"
35
36
37 /**
38 * TpContactInfoFieldSpec:
39 * @name: The name of the field; this is the lowercased name of a vCard
40 * field. For example, a field representing a contact's address would be named
41 * "adr".
42 * @parameters: The set of vCard type parameters which may be set on this field.
43 * If this list is empty and the #TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT
44 * flag is not set, any vCard type parameters may be used. The type parameter
45 * names, and any values that are case-insensitive in vCard, MUST be in lower
46 * case. For example, a contact's preferred home address would have parameters
47 * 'type=home' and 'type=pref'.
48 * @flags: Flags describing the behaviour of this field.
49 * @max: Maximum number of instances of this field which may be set.
50 * #G_MAXUINT32 is used to indicate that there is no limit.
51 *
52 * A struct describing a vCard field.
53 *
54 * Since: 0.11.7
55 */
56
57 /**
58 * _tp_contact_info_field_spec_new:
59 * @name: The name of the field; this is the lowercased name of a vCard
60 * field. For example, a field representing a contact's address would be named
61 * "adr".
62 * @parameters: The set of vCard type parameters which may be set on this field.
63 * If this list is empty and the #TP_CONTACT_INFO_FIELD_FLAG_PARAMETERS_EXACT
64 * flag is not set, any vCard type parameters may be used. The type parameter
65 * names, and any values that are case-insensitive in vCard, MUST be in lower
66 * case. For example, a contact's preferred home address would have parameters
67 * 'type=home' and 'type=pref'.
68 * @flags: Flags describing the behaviour of this field.
69 * @max: Maximum number of instances of this field which may be set.
70 * #G_MAXUINT32 is used to indicate that there is no limit.
71 *
72 * <!--Returns: says it all-->
73 *
74 * Returns: a newly allocated #TpContactInfoFieldSpec, free it with
75 * tp_contact_info_field_spec_free()
76 * Since: 0.11.7
77 */
78 TpContactInfoFieldSpec *
79 _tp_contact_info_field_spec_new (const gchar *name,
80 GStrv parameters,
81 TpContactInfoFieldFlags flags,
82 guint max)
83 {
84 TpContactInfoFieldSpec *self;
85 gchar *empty[] = { NULL };
86
87 self = g_slice_new0 (TpContactInfoFieldSpec);
88 self->name = g_strdup (name);
89 self->parameters = g_strdupv (parameters ? parameters : empty);
90 self->flags = flags;
91 self->max = max;
92
93 return self;
94 }
95
96 /**
97 * tp_contact_info_field_spec_copy: (skip)
98 * @self: a #TpContactInfoFieldSpec
99 *
100 * <!--Returns: says it all-->
101 *
102 * Returns: a newly allocated #TpContactInfoFieldSpec, free it with
103 * tp_contact_info_field_spec_free()
104 * Since: 0.11.7
105 */
106 TpContactInfoFieldSpec *
107 tp_contact_info_field_spec_copy (const TpContactInfoFieldSpec *self)
108 {
109 g_return_val_if_fail (self != NULL, NULL);
110
111 return _tp_contact_info_field_spec_new (self->name, self->parameters,
112 self->flags, self->max);
113 }
114
115 /**
116 * tp_contact_info_field_spec_free: (skip)
117 * @self: a #TpContactInfoFieldSpec
118 *
119 * Free all memory used by the #TpContactInfoFieldSpec.
120 *
121 * Since: 0.11.7
122 */
123 void
124 tp_contact_info_field_spec_free (TpContactInfoFieldSpec *self)
125 {
126 if (self != NULL)
127 {
128 g_free (self->name);
129 g_strfreev (self->parameters);
130 g_slice_free (TpContactInfoFieldSpec, self);
131 }
132 }
133
134 /**
135 * TP_TYPE_CONTACT_INFO_FIELD_SPEC:
136 *
137 * The boxed type of a #TpContactInfoFieldSpec.
138 *
139 * Since: 0.11.7
140 */
141 GType
142 tp_contact_info_field_spec_get_type (void)
143 {
144 static GType type = 0;
145
146 if (G_UNLIKELY (type == 0))
147 {
148 type = g_boxed_type_register_static (g_intern_static_string ("TpContactInfoFieldSpec"),
149 (GBoxedCopyFunc) tp_contact_info_field_spec_copy,
150 (GBoxedFreeFunc) tp_contact_info_field_spec_free);
151 }
152
153 return type;
154 }
155
156 /**
157 * tp_contact_info_spec_list_copy: (skip)
158 * @list: a #GList of #TpContactInfoFieldSpec
159 *
160 * <!--Returns: says it all-->
161 *
162 * Returns: a new #GList of newly allocated #TpContactInfoFieldSpec,
163 * free it with tp_contact_info_spec_list_free()
164 * Since: 0.11.7
165 */
166 GList *
167 tp_contact_info_spec_list_copy (GList *list)
168 {
169 GList *copy = NULL;
170
171 while (list != NULL)
172 {
173 copy = g_list_prepend (copy, tp_contact_info_field_spec_copy (list->data));
174 list = list->next;
175 }
176
177 return g_list_reverse (copy);
178 }
179
180 /**
181 * tp_contact_info_spec_list_free: (skip)
182 * @list: a #GList of #TpContactInfoFieldSpec
183 *
184 * Free all memory used by the #GList and its elements.
185 *
186 * Since: 0.11.7
187 */
188 void
189 tp_contact_info_spec_list_free (GList *list)
190 {
191 g_list_foreach (list, (GFunc) tp_contact_info_field_spec_free, NULL);
192 g_list_free (list);
193 }
194
195 /**
196 * TP_TYPE_CONTACT_INFO_SPEC_LIST:
197 *
198 * The boxed type of a #GList of #TpContactInfoFieldSpec.
199 *
200 * Since: 0.11.7
201 */
202 GType
203 tp_contact_info_spec_list_get_type (void)
204 {
205 static GType type = 0;
206
207 if (G_UNLIKELY (type == 0))
208 {
209 type = g_boxed_type_register_static (g_intern_static_string ("TpContactInfoSpecList"),
210 (GBoxedCopyFunc) tp_contact_info_spec_list_copy,
211 (GBoxedFreeFunc) tp_contact_info_spec_list_free);
212 }
213
214 return type;
215 }
216
217 /**
218 * TpContactInfoField:
219 * @field_name: The name of the field; this is the lowercased name of a vCard
220 * field. For example, a field representing a contact's address would be named
221 * "adr".
222 * @parameters: A list of vCard type parameters applicable to this field,
223 * with their values. The type parameter names, and any values that are
224 * case-insensitive in vCard, MUST be in lower case. For example, a contact's
225 * preferred home address would have parameters 'type=home' and 'type=pref'.
226 * @field_value: For unstructured vCard fields (such as 'fn', a formatted name
227 * field), a single-element array containing the field's value. For structured
228 * fields (such as 'adr', an address field), an array corresponding to the
229 * semicolon-separated elements of the field (with empty strings for empty
230 * elements).
231 *
232 * A structure representing an information about a contact. Similar to a vCard
233 * field.
234 *
235 * Since: 0.11.7
236 */
237
238 /**
239 * tp_contact_info_field_new:
240 * @field_name: The name of the field; this is the lowercased name of a vCard
241 * field. For example, a field representing a contact's address would be named
242 * "adr".
243 * @parameters: A list of vCard type parameters applicable to this field,
244 * with their values. The type parameter names, and any values that are
245 * case-insensitive in vCard, MUST be in lower case. For example, a contact's
246 * preferred home address would have parameters 'type=home' and 'type=pref'.
247 * @field_value: For unstructured vCard fields (such as 'fn', a formatted name
248 * field), a single-element array containing the field's value. For structured
249 * fields (such as 'adr', an address field), an array corresponding to the
250 * semicolon-separated elements of the field (with empty strings for empty
251 * elements).
252 *
253 * <!--Returns: says it all-->
254 *
255 * Returns: a newly allocated #TpContactInfoField, free it with
256 * tp_contact_info_field_free()
257 * Since: 0.11.7
258 */
259 TpContactInfoField *
260 tp_contact_info_field_new (const gchar *field_name,
261 GStrv parameters,
262 GStrv field_value)
263 {
264 TpContactInfoField *self;
265 gchar *empty[] = { NULL };
266
267 self = g_slice_new0 (TpContactInfoField);
268 self->field_name = g_strdup (field_name);
269 self->parameters = g_strdupv (parameters ? parameters : empty);
270 self->field_value = g_strdupv (field_value ? field_value : empty);
271
272 return self;
273 }
274
275 /**
276 * tp_contact_info_field_copy: (skip)
277 * @self: a #TpContactInfoField
278 *
279 * <!--Returns: says it all-->
280 *
281 * Returns: a newly allocated #TpContactInfoField, free it with
282 * tp_contact_info_field_free()
283 * Since: 0.11.7
284 */
285 TpContactInfoField *
286 tp_contact_info_field_copy (const TpContactInfoField *self)
287 {
288 g_return_val_if_fail (self != NULL, NULL);
289
290 return tp_contact_info_field_new (self->field_name, self->parameters,
291 self->field_value);
292 }
293
294 /**
295 * tp_contact_info_field_free: (skip)
296 * @self: a #TpContactInfoField
297 *
298 * Free all memory used by the #TpContactInfoField.
299 *
300 * Since: 0.11.7
301 */
302 void
303 tp_contact_info_field_free (TpContactInfoField *self)
304 {
305 if (self != NULL)
306 {
307 g_free (self->field_name);
308 g_strfreev (self->parameters);
309 g_strfreev (self->field_value);
310 g_slice_free (TpContactInfoField, self);
311 }
312 }
313
314 /**
315 * TP_TYPE_CONTACT_INFO_FIELD:
316 *
317 * The boxed type of a #TpContactInfoField.
318 *
319 * Since: 0.11.7
320 */
321 GType
322 tp_contact_info_field_get_type (void)
323 {
324 static GType type = 0;
325
326 if (G_UNLIKELY (type == 0))
327 {
328 type = g_boxed_type_register_static (g_intern_static_string ("TpContactInfoField"),
329 (GBoxedCopyFunc) tp_contact_info_field_copy,
330 (GBoxedFreeFunc) tp_contact_info_field_free);
331 }
332
333 return type;
334 }
335
336 /**
337 * tp_contact_info_list_copy: (skip)
338 * @list: a #GList of #TpContactInfoField
339 *
340 * <!--Returns: says it all-->
341 *
342 * Returns: a new #GList of newly allocated #TpContactInfoField, free it with
343 * tp_contact_info_list_free()
344 * Since: 0.11.7
345 */
346 GList *
347 tp_contact_info_list_copy (GList *list)
348 {
349 GList *copy = NULL;
350
351 while (list != NULL)
352 {
353 copy = g_list_prepend (copy, tp_contact_info_field_copy (list->data));
354 list = list->next;
355 }
356
357 return g_list_reverse (copy);
358 }
359
360 /**
361 * tp_contact_info_list_free: (skip)
362 * @list: a #GList of #TpContactInfoField
363 *
364 * Free all memory used by the #GList and its elements.
365 *
366 * Since: 0.11.7
367 */
368 void
369 tp_contact_info_list_free (GList *list)
370 {
371 g_list_foreach (list, (GFunc) tp_contact_info_field_free, NULL);
372 g_list_free (list);
373 }
374
375 /**
376 * TP_TYPE_CONTACT_INFO_LIST:
377 *
378 * The boxed type of a #GList of #TpContactInfoField.
379 *
380 * Since: 0.11.7
381 */
382 GType
383 tp_contact_info_list_get_type (void)
384 {
385 static GType type = 0;
386
387 if (G_UNLIKELY (type == 0))
388 {
389 type = g_boxed_type_register_static (g_intern_static_string ("TpContactInfoList"),
390 (GBoxedCopyFunc) tp_contact_info_list_copy,
391 (GBoxedFreeFunc) tp_contact_info_list_free);
392 }
393
394 return type;
395 }
396
397 /**
398 * TP_CONNECTION_FEATURE_CONTACT_INFO:
399 *
400 * Expands to a call to a function that returns a #GQuark representing the
401 * "contact-info" feature.
402 *
403 * When this feature is prepared, the ContactInfoFlags and SupportedFields of
404 * the Connection has been retrieved. Use tp_connection_get_contact_info_flags()
405 * and tp_connection_get_contact_info_supported_fields() to get them once
406 * prepared.
407 *
408 * One can ask for a feature to be prepared using the
409 * tp_proxy_prepare_async() function, and waiting for it to callback.
410 *
411 * Since: 0.11.7
412 */
413
414 GQuark
415 tp_connection_get_feature_quark_contact_info (void)
416 {
417 return g_quark_from_static_string ("tp-connection-feature-contact-info");
418 }
419
420
421 static void
422 tp_connection_get_contact_info_cb (TpProxy *proxy,
423 GHashTable *properties,
424 const GError *error,
425 gpointer user_data,
426 GObject *weak_object)
427 {
428 TpConnection *self = (TpConnection *) proxy;
429 GPtrArray *specs;
430 gboolean valid;
431 gboolean success = FALSE;
432 guint i;
433
434 if (error != NULL)
435 {
436 DEBUG ("Failed to get contact info properties: %s", error->message);
437 goto finally;
438 }
439
440 g_assert (self->priv->contact_info_supported_fields == NULL);
441
442 self->priv->contact_info_flags = tp_asv_get_uint32 (properties,
443 "ContactInfoFlags", &valid);
444
445 specs = tp_asv_get_boxed (properties, "SupportedFields",
446 TP_ARRAY_TYPE_FIELD_SPECS);
447
448 if (!valid || specs == NULL)
449 {
450 DEBUG ("Some properties are missing on the ContactInfo interface");
451 goto finally;
452 }
453
454 DEBUG ("CONTACT INFO ready");
455
456 for (i = 0; i < specs->len; i++)
457 {
458 GValueArray *va = g_ptr_array_index (specs, i);
459 const gchar *name;
460 GStrv parameters;
461 TpContactInfoFieldFlags flags;
462 guint max;
463
464 tp_value_array_unpack (va, 4, &name, &parameters, &flags, &max);
465 self->priv->contact_info_supported_fields = g_list_prepend (
466 self->priv->contact_info_supported_fields,
467 _tp_contact_info_field_spec_new (name, parameters, flags, max));
468 }
469
470 success = TRUE;
471
472 finally:
473
474 if (!success)
475 self->priv->contact_info_fetched = FALSE;
476
477 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_CONTACT_INFO,
478 success);
479 }
480
481 void
482 _tp_connection_maybe_prepare_contact_info (TpProxy *proxy)
483 {
484 TpConnection *self = (TpConnection *) proxy;
485
486 if (self->priv->contact_info_fetched)
487 return; /* already done */
488
489 if (!_tp_proxy_is_preparing (proxy, TP_CONNECTION_FEATURE_CONTACT_INFO))
490 return; /* not interested right now */
491
492 if (!self->priv->ready)
493 return; /* will try again when ready */
494
495 if (!tp_proxy_has_interface_by_id (proxy,
496 TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO))
497 {
498 _tp_proxy_set_feature_prepared (proxy, TP_CONNECTION_FEATURE_CONTACT_INFO,
499 FALSE);
500 return;
501 }
502
503 self->priv->contact_info_fetched = TRUE;
504
505 tp_cli_dbus_properties_call_get_all (self, -1,
506 TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO,
507 tp_connection_get_contact_info_cb, NULL, NULL, NULL);
508 }
509
510 /**
511 * tp_connection_get_contact_info_flags:
512 * @self: a connection
513 *
514 * Returns the flags describing how contact info (vCards) behaves on this
515 * connection
516 *
517 * To wait for valid contact info flags, call tp_proxy_prepare_async()
518 * with the feature %TP_CONNECTION_FEATURE_CONTACT_INFO.
519 *
520 * This property cannot change after @self goes to the Connected state.
521 *
522 * Returns: a set of #TpContactInfoFlags
523 * Since: 0.11.7
524 */
525 TpContactInfoFlags
526 tp_connection_get_contact_info_flags (TpConnection *self)
527 {
528 g_return_val_if_fail (TP_IS_CONNECTION (self), 0);
529
530 return self->priv->contact_info_flags;
531 }
532
533 /**
534 * tp_connection_get_contact_info_supported_fields:
535 * @self: a connection
536 *
537 * Returns a newly allocated #GList of supported contact info fields for this
538 * connection. The list must be freed with g_list_free() after used.
539 *
540 * Note that the #TpContactInfoFieldSpec<!-- -->s in the returned #GList are not
541 * dupped before returning from this function. One could copy every item in the
542 * list using tp_contact_info_field_spec_copy().
543 *
544 * To wait for valid supported fields, call tp_proxy_prepare_async() with the
545 * feature %TP_CONNECTION_FEATURE_CONTACT_INFO.
546 *
547 * This property cannot change after @self goes to the Connected state.
548 *
549 * Returns: (element-type TelepathyGLib.ContactInfoFieldSpec) (transfer container):
550 * a #GList of #TpContactInfoFieldSpec struct, or %NULL if the feature is not
551 * yet prepared or the connection doesn't have the necessary properties.
552 * Since: 0.11.7
553 */
554 GList *
555 tp_connection_get_contact_info_supported_fields (TpConnection *self)
556 {
557 g_return_val_if_fail (TP_IS_CONNECTION (self), NULL);
558
559 return g_list_copy (self->priv->contact_info_supported_fields);
560 }
561
562 static void
563 set_info_cb (TpConnection *self,
564 const GError *error,
565 gpointer user_data,
566 GObject *weak_object)
567 {
568 GSimpleAsyncResult *result = user_data;
569
570 if (error != NULL)
571 {
572 DEBUG ("Failed to set ContactInfo: %s", error->message);
573 g_simple_async_result_set_from_error (result, error);
574 }
575
576 g_simple_async_result_complete (result);
577 }
578
579 /**
580 * tp_connection_set_contact_info_async:
581 * @self: a #TpConnection
582 * @info: (element-type TelepathyGLib.ContactInfoField): a #GList of
583 * #TpContactInfoField
584 * @callback: a callback to call when the request is satisfied
585 * @user_data: data to pass to @callback
586 *
587 * Requests an asynchronous set of the contact info of @self. When
588 * the operation is finished, @callback will be called. You can then call
589 * tp_connection_set_contact_info_finish() to get the result of the operation.
590 *
591 * This method should not be expected to succeed if the result of
592 * tp_connection_get_contact_info_flags() does not include
593 * %TP_CONTACT_INFO_FLAG_CAN_SET.
594 * Since: 0.11.7
595 */
596 void
597 tp_connection_set_contact_info_async (TpConnection *self,
598 GList *info,
599 GAsyncReadyCallback callback,
600 gpointer user_data)
601 {
602 GSimpleAsyncResult *result;
603 GPtrArray *contact_info;
604
605 g_return_if_fail (TP_IS_CONNECTION (self));
606
607 result = g_simple_async_result_new (G_OBJECT (self), callback,
608 user_data, tp_connection_set_contact_info_finish);
609
610 contact_info = g_ptr_array_new ();
611 while (info != NULL)
612 {
613 TpContactInfoField *field = info->data;
614 GValueArray *va;
615
616 va = tp_value_array_build (3,
617 G_TYPE_STRING, field->field_name,
618 G_TYPE_STRV, field->parameters,
619 G_TYPE_STRV, field->field_value,
620 G_TYPE_INVALID);
621
622 g_ptr_array_add (contact_info, va);
623 info = info->next;
624 }
625
626 tp_cli_connection_interface_contact_info_call_set_contact_info (self, -1,
627 contact_info, set_info_cb, result, g_object_unref, NULL);
628
629 g_ptr_array_foreach (contact_info, (GFunc) g_value_array_free, NULL);
630 g_ptr_array_free (contact_info, TRUE);
631 }
632
633 /**
634 * tp_connection_set_contact_info_finish:
635 * @self: a #TpConnection
636 * @result: a #GAsyncResult
637 * @error: a #GError to be filled
638 *
639 * Finishes an async set of @self info.
640 *
641 * Returns: %TRUE if the request call was successful, otherwise %FALSE
642 *
643 * Since: 0.11.7
644 */
645 gboolean
646 tp_connection_set_contact_info_finish (TpConnection *self,
647 GAsyncResult *result,
648 GError **error)
649 {
650 GSimpleAsyncResult *simple;
651
652 g_return_val_if_fail (TP_IS_CONNECTION (self), FALSE);
653 g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
654
655 simple = G_SIMPLE_ASYNC_RESULT (result);
656
657 if (g_simple_async_result_propagate_error (simple, error))
658 return FALSE;
659
660 g_return_val_if_fail (g_simple_async_result_is_valid (result,
661 G_OBJECT (self), tp_connection_set_contact_info_finish), FALSE);
662
663 return TRUE;
664 }
665
5252 GArray *avatar_request_queue;
5353 guint avatar_request_idle_id;
5454
55 TpContactInfoFlags contact_info_flags;
56 GList *contact_info_supported_fields;
57
5558 TpProxyPendingCall *introspection_call;
5659 unsigned fetching_rcc:1;
5760 unsigned fetching_avatar_requirements:1;
61 unsigned contact_info_fetched:1;
5862
5963 unsigned ready:1;
6064 unsigned tracking_aliases_changed:1;
6468 unsigned tracking_presence_update:1;
6569 unsigned tracking_location_changed:1;
6670 unsigned tracking_contact_caps_changed:1;
71 unsigned tracking_contact_info_changed:1;
6772 unsigned introspecting_after_connected:1;
6873 };
74
75 void _tp_connection_status_reason_to_gerror (TpConnectionStatusReason reason,
76 TpConnectionStatus prev_status,
77 const gchar **ret_str,
78 GError **error);
6979
7080 void _tp_connection_init_handle_refs (TpConnection *self);
7181 void _tp_connection_clean_up_handle_refs (TpConnection *self);
8090 * just for this would be overkill */
8191 void _tp_contact_connection_invalidated (TpContact *contact);
8292
93 /* connection-contact-info.c */
94 void _tp_connection_maybe_prepare_contact_info (TpProxy *proxy);
95 TpContactInfoFieldSpec *_tp_contact_info_field_spec_new (const gchar *name,
96 GStrv parameters, TpContactInfoFieldFlags flags, guint max);
97
98
99
83100 G_END_DECLS
84101
85102 #endif
384384 GObject *weak_object)
385385 {
386386 TpConnection *self = (TpConnection *) proxy;
387 GStrv supported_mime_types;
388 GStrv empty_strv = { NULL };
389387
390388 self->priv->fetching_avatar_requirements = FALSE;
391389
399397
400398 DEBUG ("AVATAR REQUIREMENTS ready");
401399
402 supported_mime_types = (GStrv) tp_asv_get_strv (properties,
403 "SupportedAvatarMIMETypes");
404 if (supported_mime_types == NULL)
405 supported_mime_types = empty_strv;
406
407400 self->priv->avatar_requirements = tp_avatar_requirements_new (
408 supported_mime_types,
401 (GStrv) tp_asv_get_strv (properties, "SupportedAvatarMIMETypes"),
409402 tp_asv_get_uint32 (properties, "MinimumAvatarWidth", NULL),
410403 tp_asv_get_uint32 (properties, "MinimumAvatarHeight", NULL),
411404 tp_asv_get_uint32 (properties, "RecommendedAvatarWidth", NULL),
489482
490483 tp_connection_maybe_prepare_capabilities ((TpProxy *) self);
491484 tp_connection_maybe_prepare_avatar_requirements ((TpProxy *) self);
485 _tp_connection_maybe_prepare_contact_info ((TpProxy *) self);
492486 }
493487 else
494488 {
641635 self, -1, got_self_handle, NULL, NULL, NULL);
642636 }
643637
638 /* Appending callbacks to self->priv->introspect_needed relies on this */
639 G_STATIC_ASSERT (sizeof (TpConnectionProc) <= sizeof (gpointer));
640
644641 static void
645642 tp_connection_got_interfaces_cb (TpConnection *self,
646643 const gchar **interfaces,
668665 }
669666
670667 g_assert (self->priv->introspect_needed == NULL);
671 tp_verify_statement (sizeof (TpConnectionProc) <= sizeof (gpointer));
672668 self->priv->introspect_needed = g_list_append (self->priv->introspect_needed,
673669 get_self_handle);
674670
760756 TP_HASH_TYPE_STRING_VARIANT_MAP, details);
761757 }
762758
763 static void
764 tp_connection_status_reason_to_gerror (TpConnectionStatusReason reason,
765 TpConnectionStatus prev_status,
766 GError **error)
759 void
760 _tp_connection_status_reason_to_gerror (TpConnectionStatusReason reason,
761 TpConnectionStatus prev_status,
762 const gchar **ret_str,
763 GError **error)
767764 {
768765 TpError code;
769766 const gchar *message;
851848 default:
852849 g_set_error (error, TP_ERRORS_DISCONNECTED, reason,
853850 "Unknown disconnection reason");
851
852 if (ret_str != NULL)
853 *ret_str = TP_ERROR_STR_DISCONNECTED;
854
854855 return;
855856 }
856857
857858 g_set_error (error, TP_ERRORS, code, "%s", message);
859
860 if (ret_str != NULL)
861 *ret_str = tp_error_get_dbus_name (code);
858862 }
859863
860864 static void
884888
885889 if (self->priv->connection_error == NULL)
886890 {
887 g_assert (self->priv->connection_error_details == NULL);
888
889 tp_connection_status_reason_to_gerror (reason, prev_status, &error);
891 _tp_connection_status_reason_to_gerror (reason, prev_status,
892 NULL, &error);
890893 }
891894 else
892895 {
903906 {
904907 GError *from_csr = NULL;
905908
906 tp_connection_status_reason_to_gerror (reason, prev_status,
907 &from_csr);
909 _tp_connection_status_reason_to_gerror (reason, prev_status,
910 NULL, &from_csr);
908911 error->domain = from_csr->domain;
909912 error->code = from_csr->code;
910913 g_error_free (from_csr);
10531056 self->priv->avatar_request_idle_id = 0;
10541057 }
10551058
1059 tp_contact_info_spec_list_free (self->priv->contact_info_supported_fields);
1060 self->priv->contact_info_supported_fields = NULL;
1061
10561062 ((GObjectClass *) tp_connection_parent_class)->finalize (object);
10571063 }
1058
10591064
10601065 static void
10611066 contact_notify_invalidated (gpointer k G_GNUC_UNUSED,
10771082 {
10781083 g_hash_table_foreach (self->priv->contacts, contact_notify_invalidated,
10791084 NULL);
1080 g_hash_table_destroy (self->priv->contacts);
1081 self->priv->contacts = NULL;
1082 }
1083
1084 if (self->priv->capabilities != NULL)
1085 {
1086 g_object_unref (self->priv->capabilities);
1087 self->priv->capabilities = NULL;
1088 }
1089
1090 if (self->priv->avatar_requirements != NULL)
1091 {
1092 tp_avatar_requirements_destroy (self->priv->avatar_requirements);
1093 self->priv->avatar_requirements = NULL;
1094 }
1085 tp_clear_pointer (&self->priv->contacts, g_hash_table_destroy);
1086 }
1087
1088 tp_clear_object (&self->priv->capabilities);
1089 tp_clear_pointer (&self->priv->avatar_requirements,
1090 tp_avatar_requirements_destroy);
10951091
10961092 ((GObjectClass *) tp_connection_parent_class)->dispose (object);
10971093 }
11011097 FEAT_CONNECTED,
11021098 FEAT_CAPABILITIES,
11031099 FEAT_AVATAR_REQUIREMENTS,
1100 FEAT_CONTACT_INFO,
11041101 N_FEAT
11051102 };
11061103
11241121 features[FEAT_AVATAR_REQUIREMENTS].name = TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS;
11251122 features[FEAT_AVATAR_REQUIREMENTS].start_preparing =
11261123 tp_connection_maybe_prepare_avatar_requirements;
1124
1125 features[FEAT_CONTACT_INFO].name = TP_CONNECTION_FEATURE_CONTACT_INFO;
1126 features[FEAT_CONTACT_INFO].start_preparing =
1127 _tp_connection_maybe_prepare_contact_info;
11271128
11281129 /* assert that the terminator at the end is there */
11291130 g_assert (features[N_FEAT].name == 0);
21552156 guint maximum_bytes)
21562157 {
21572158 TpAvatarRequirements *self;
2159 gchar *empty[] = { NULL };
21582160
21592161 self = g_slice_new (TpAvatarRequirements);
2160 self->supported_mime_types = g_strdupv (supported_mime_types);
2162 self->supported_mime_types =
2163 g_strdupv (supported_mime_types ? supported_mime_types : empty);
21612164 self->minimum_width = minimum_width;
21622165 self->minimum_height = minimum_height;
21632166 self->recommended_width = recommended_width;
21702173 }
21712174
21722175 /**
2173 * tp_avatar_requirements_copy:
2176 * tp_avatar_requirements_copy: (skip)
21742177 * @self: a #TpAvatarRequirements
21752178 *
21762179 * <!--Returns: says it all-->
21802183 * Since: 0.11.4
21812184 */
21822185 TpAvatarRequirements *
2183 tp_avatar_requirements_copy (TpAvatarRequirements *self)
2186 tp_avatar_requirements_copy (const TpAvatarRequirements *self)
21842187 {
21852188 g_return_val_if_fail (self != NULL, NULL);
21862189
21952198 }
21962199
21972200 /**
2198 * tp_avatar_requirements_destroy:
2201 * tp_avatar_requirements_destroy: (skip)
21992202 * @self: a #TpAvatarRequirements
22002203 *
22012204 * Free all memory used by the #TpAvatarRequirements.
22522255 * on the invalidation reason, and don't give any details */
22532256
22542257 if (details != NULL)
2255 *details = tp_asv_new (NULL, NULL);
2258 {
2259 if (self->priv->connection_error_details == NULL)
2260 self->priv->connection_error_details = g_hash_table_new (
2261 g_str_hash, g_str_equal);
2262
2263 g_assert (g_hash_table_size (self->priv->connection_error_details)
2264 == 0);
2265
2266 *details = self->priv->connection_error_details;
2267 }
22562268
22572269 if (proxy->invalidated->domain == TP_ERRORS)
22582270 {
2828 #include <telepathy-glib/proxy.h>
2929
3030 G_BEGIN_DECLS
31
32 typedef struct _TpAvatarRequirements TpAvatarRequirements;
33 struct _TpAvatarRequirements
34 {
35 GStrv supported_mime_types;
36 guint minimum_width;
37 guint minimum_height;
38 guint recommended_width;
39 guint recommended_height;
40 guint maximum_width;
41 guint maximum_height;
42 guint maximum_bytes;
43
44 /*<private>*/
45 gpointer _1;
46 gpointer _2;
47 gpointer _3;
48 gpointer _4;
49 };
50
51 #define TP_TYPE_AVATAR_REQUIREMENTS (tp_avatar_requirements_get_type ())
52 GType tp_avatar_requirements_get_type (void);
53 TpAvatarRequirements * tp_avatar_requirements_new (GStrv supported_mime_types,
54 guint minimum_width,
55 guint minimum_height,
56 guint recommended_width,
57 guint recommended_height,
58 guint maximum_width,
59 guint maximum_height,
60 guint maximum_bytes);
61 TpAvatarRequirements * tp_avatar_requirements_copy (
62 const TpAvatarRequirements *self);
63 void tp_avatar_requirements_destroy (TpAvatarRequirements *self);
64
65 typedef struct _TpContactInfoFieldSpec TpContactInfoFieldSpec;
66 struct _TpContactInfoFieldSpec
67 {
68 gchar *name;
69 GStrv parameters;
70 TpContactInfoFieldFlags flags;
71 guint max;
72 /*<private>*/
73 gpointer priv;
74 };
75
76 #define TP_TYPE_CONTACT_INFO_FIELD_SPEC (tp_contact_info_field_spec_get_type ())
77 GType tp_contact_info_field_spec_get_type (void);
78 TpContactInfoFieldSpec *tp_contact_info_field_spec_copy (
79 const TpContactInfoFieldSpec *self);
80 void tp_contact_info_field_spec_free (TpContactInfoFieldSpec *self);
81
82 #define TP_TYPE_CONTACT_INFO_SPEC_LIST (tp_contact_info_spec_list_get_type ())
83 GType tp_contact_info_spec_list_get_type (void);
84 GList *tp_contact_info_spec_list_copy (GList *list);
85 void tp_contact_info_spec_list_free (GList *list);
86
87 typedef struct _TpContactInfoField TpContactInfoField;
88 struct _TpContactInfoField
89 {
90 gchar *field_name;
91 GStrv parameters;
92 GStrv field_value;
93 /*<private>*/
94 gpointer priv;
95 };
96
97 #define TP_TYPE_CONTACT_INFO_FIELD (tp_contact_info_field_get_type ())
98 GType tp_contact_info_field_get_type (void);
99 TpContactInfoField *tp_contact_info_field_new (const gchar *field_name,
100 GStrv parameters, GStrv field_value);
101 TpContactInfoField *tp_contact_info_field_copy (const TpContactInfoField *self);
102 void tp_contact_info_field_free (TpContactInfoField *self);
103
104 #define TP_TYPE_CONTACT_INFO_LIST (tp_contact_info_list_get_type ())
105 GType tp_contact_info_list_get_type (void);
106 GList *tp_contact_info_list_copy (GList *list);
107 void tp_contact_info_list_free (GList *list);
31108
32109 typedef struct _TpConnection TpConnection;
33110 typedef struct _TpConnectionPrivate TpConnectionPrivate;
47124 TpProxy parent;
48125 TpConnectionPrivate *priv;
49126 };
50
51 typedef struct _TpAvatarRequirements TpAvatarRequirements;
52 struct _TpAvatarRequirements
53 {
54 gchar **supported_mime_types;
55 guint minimum_width;
56 guint minimum_height;
57 guint recommended_width;
58 guint recommended_height;
59 guint maximum_width;
60 guint maximum_height;
61 guint maximum_bytes;
62
63 /*<private>*/
64 gpointer _1;
65 gpointer _2;
66 gpointer _3;
67 gpointer _4;
68 };
69
70 #define TP_TYPE_AVATAR_REQUIREMENTS (tp_avatar_requirements_get_type ())
71 GType tp_avatar_requirements_get_type (void);
72
73 TpAvatarRequirements * tp_avatar_requirements_new (
74 GStrv supported_mime_types,
75 guint minimum_width,
76 guint minimum_height,
77 guint recommended_width,
78 guint recommended_height,
79 guint maximum_width,
80 guint maximum_height,
81 guint maximum_bytes);
82
83 TpAvatarRequirements * tp_avatar_requirements_copy (
84 TpAvatarRequirements *self);
85
86 void tp_avatar_requirements_destroy (TpAvatarRequirements *self);
87
88127
89128 GType tp_connection_get_type (void);
90129
123162 TpAvatarRequirements * tp_connection_get_avatar_requirements (
124163 TpConnection *self);
125164
165 TpContactInfoFlags tp_connection_get_contact_info_flags (TpConnection *self);
166
167 GList *tp_connection_get_contact_info_supported_fields (TpConnection *self);
168
169 void tp_connection_set_contact_info_async (TpConnection *self,
170 GList *info, GAsyncReadyCallback callback,
171 gpointer user_data);
172
173 gboolean tp_connection_set_contact_info_finish (TpConnection *self,
174 GAsyncResult *result, GError **error);
175
126176 gboolean tp_connection_is_ready (TpConnection *self);
127177
128178 #ifndef TP_DISABLE_DEPRECATED
174224 (tp_connection_get_feature_quark_avatar_requirements ())
175225 GQuark tp_connection_get_feature_quark_avatar_requirements (void) G_GNUC_CONST;
176226
227 #define TP_CONNECTION_FEATURE_CONTACT_INFO \
228 (tp_connection_get_feature_quark_contact_info ())
229 GQuark tp_connection_get_feature_quark_contact_info (void) G_GNUC_CONST;
230
177231 /* connection-handles.c */
178232
179233 typedef void (*TpConnectionHoldHandlesCb) (TpConnection *connection,
66 <xi:include href="../spec/Connection.xml"/>
77
88 <xi:include href="../spec/Connection_Interface_Aliasing.xml"/>
9 <xi:include href="../spec/Connection_Interface_Anonymity.xml"/>
910 <xi:include href="../spec/Connection_Interface_Avatars.xml"/>
1011 <xi:include href="../spec/Connection_Interface_Balance.xml"/>
1112 <xi:include href="../spec/Connection_Interface_Capabilities.xml"/>
1617 <xi:include href="../spec/Connection_Interface_Contacts.xml"/>
1718 <xi:include href="../spec/Connection_Interface_Requests.xml"/>
1819 <xi:include href="../spec/Connection_Interface_Location.xml"/>
20 <xi:include href="../spec/Connection_Interface_Service_Point.xml"/>
1921
2022 </tp:spec>
3030 #define DEBUG_FLAG TP_DEBUG_CONTACTS
3131 #include "telepathy-glib/connection-internal.h"
3232 #include "telepathy-glib/debug-internal.h"
33
34 #include "telepathy-glib/_gen/signals-marshal.h"
3335
3436 /**
3537 * SECTION:contact
9395 * @TP_CONTACT_FEATURE_AVATAR_DATA: #TpContact:avatar-file and
9496 * #TpContact:avatar-mime-type. Implies %TP_CONTACT_FEATURE_AVATAR_TOKEN
9597 * (available since 0.11.6)
98 * @TP_CONTACT_FEATURE_CONTACT_INFO: #TpContact:contact-info
99 * (available since 0.11.7)
96100 * @NUM_TP_CONTACT_FEATURES: 1 higher than the highest TpContactFeature
97101 * supported by this version of telepathy-glib
98102 *
131135 PROP_PRESENCE_MESSAGE,
132136 PROP_LOCATION,
133137 PROP_CAPABILITIES,
138 PROP_CONTACT_INFO,
134139 N_PROPS
135140 };
141
142 enum {
143 SIGNAL_PRESENCE_CHANGED,
144 N_SIGNALS
145 };
146
147 static guint signals[N_SIGNALS] = {0};
136148
137149 /* The API allows for more than 32 features, but this implementation does
138150 * not. We can easily expand this later. */
143155 CONTACT_FEATURE_FLAG_LOCATION = 1 << TP_CONTACT_FEATURE_LOCATION,
144156 CONTACT_FEATURE_FLAG_CAPABILITIES = 1 << TP_CONTACT_FEATURE_CAPABILITIES,
145157 CONTACT_FEATURE_FLAG_AVATAR_DATA = 1 << TP_CONTACT_FEATURE_AVATAR_DATA,
158 CONTACT_FEATURE_FLAG_CONTACT_INFO = 1 << TP_CONTACT_FEATURE_CONTACT_INFO,
146159 } ContactFeatureFlags;
147160
148161 struct _TpContactPrivate {
170183
171184 /* capabilities */
172185 TpCapabilities *capabilities;
186
187 /* a list of TpContactInfoField */
188 GList *contact_info;
173189 };
174190
175191
467483 return self->priv->capabilities;
468484 }
469485
486 /**
487 * tp_contact_get_contact_info:
488 * @self: a #TpContact
489 *
490 * Returns a newly allocated #GList of contact's vCard fields. The list must be
491 * freed with g_list_free() after used.
492 *
493 * Note that the #TpContactInfoField<!-- -->s in the returned #GList are not
494 * dupped before returning from this function. One could copy every item in the
495 * list using tp_contact_info_field_copy().
496 *
497 * Same as the #TpContact:contact-info property.
498 *
499 * Returns: (element-type TelepathyGLib.ContactInfoField) (transfer container):
500 * a #GList of #TpContactInfoField, or %NULL if the feature is not yet
501 * prepared.
502 * Since: 0.11.7
503 */
504 GList *
505 tp_contact_get_contact_info (TpContact *self)
506 {
507 g_return_val_if_fail (TP_IS_CONTACT (self), NULL);
508
509 return g_list_copy (self->priv->contact_info);
510 }
470511
471512 void
472513 _tp_contact_connection_invalidated (TpContact *contact)
496537 self->priv->handle = 0;
497538 }
498539
499 if (self->priv->connection != NULL)
500 {
501 g_object_unref (self->priv->connection);
502 self->priv->connection = NULL;
503 }
504
505 if (self->priv->location != NULL)
506 {
507 g_hash_table_unref (self->priv->location);
508 self->priv->location = NULL;
509 }
510
511 if (self->priv->capabilities != NULL)
512 {
513 g_object_unref (self->priv->capabilities);
514 self->priv->capabilities = NULL;
515 }
516
517 if (self->priv->avatar_file != NULL)
518 {
519 g_object_unref (self->priv->avatar_file);
520 self->priv->avatar_file = NULL;
521 }
540 tp_clear_object (&self->priv->connection);
541 tp_clear_pointer (&self->priv->location, g_hash_table_unref);
542 tp_clear_object (&self->priv->capabilities);
543 tp_clear_object (&self->priv->avatar_file);
522544
523545 ((GObjectClass *) tp_contact_parent_class)->dispose (object);
524546 }
535557 g_free (self->priv->avatar_mime_type);
536558 g_free (self->priv->presence_status);
537559 g_free (self->priv->presence_message);
560 tp_contact_info_list_free (self->priv->contact_info);
538561
539562 ((GObjectClass *) tp_contact_parent_class)->finalize (object);
540563 }
599622
600623 case PROP_CAPABILITIES:
601624 g_value_set_object (value, tp_contact_get_capabilities (self));
625 break;
626
627 case PROP_CONTACT_INFO:
628 g_value_set_boxed (value, self->priv->contact_info);
602629 break;
603630
604631 default:
857884 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
858885 g_object_class_install_property (object_class, PROP_CAPABILITIES,
859886 param_spec);
887
888 /**
889 * TpContact:contact-info:
890 *
891 * A #GList of #TpContactInfoField representing the vCard of this contact.
892 *
893 * This is set to %NULL if %TP_CONTACT_FEATURE_CONTACT_INFO is not set on this
894 * contact.
895 *
896 * Since: 0.11.7
897 */
898 param_spec = g_param_spec_boxed ("contact-info",
899 "Contact Info",
900 "Information of the contact, or NULL",
901 TP_TYPE_CONTACT_INFO_LIST,
902 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
903 g_object_class_install_property (object_class, PROP_CONTACT_INFO,
904 param_spec);
905
906 /**
907 * TpContact::presence-changed:
908 * @contact: A #TpContact
909 * @type: The new value of #TpContact:presence-type
910 * @status: The new value of #TpContact:presence-status
911 * @message: The new value of #TpContact:presence-message
912 *
913 * Emitted when this contact's presence changes.
914 *
915 * Since: 0.11.7
916 */
917 signals[SIGNAL_PRESENCE_CHANGED] = g_signal_new ("presence-changed",
918 G_TYPE_FROM_CLASS (object_class),
919 G_SIGNAL_RUN_LAST,
920 0,
921 NULL, NULL,
922 _tp_marshal_VOID__UINT_STRING_STRING,
923 G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING);
860924 }
861925
862926
9431007 guint next_index;
9441008 };
9451009
1010 /* This code (and lots of telepathy-glib, really) won't work if this
1011 * assertion fails, because we put function pointers in a GQueue. If anyone
1012 * cares about platforms where this fails, fixing this would involve
1013 * slice-allocating sizeof (GCallback) bytes repeatedly, and putting *those*
1014 * in the queue. */
1015 G_STATIC_ASSERT (sizeof (GCallback) == sizeof (gpointer));
9461016
9471017 static ContactsContext *
9481018 contacts_context_new (TpConnection *connection,
9671037 c->destroy = destroy;
9681038 c->weak_object = weak_object;
9691039
970 /* This code (and lots of telepathy-glib, really) won't work if this
971 * assertion fails, because we put function pointers in a GQueue. If anyone
972 * cares about platforms where this fails, fixing this would involve
973 * slice-allocating sizeof (GCallback) bytes repeatedly, and putting *those*
974 * in the queue. */
975 tp_verify_statement (sizeof (GCallback) == sizeof (gpointer));
976
9771040 g_queue_init (&c->todo);
9781041
9791042 return c;
9891052 return;
9901053
9911054 g_assert (c->connection != NULL);
992 g_object_unref (c->connection);
993 c->connection = NULL;
1055 tp_clear_object (&c->connection);
9941056
9951057 g_queue_clear (&c->todo);
9961058
10121074
10131075 c->request_ids = NULL;
10141076
1015 if (c->request_errors != NULL)
1016 g_hash_table_destroy (c->request_errors);
1017
1018 c->request_errors = NULL;
1077 tp_clear_pointer (&c->request_errors, g_hash_table_destroy);
10191078
10201079 if (c->destroy != NULL)
10211080 c->destroy (c->user_data);
16351694 contact_maybe_set_simple_presence (TpContact *contact,
16361695 GValueArray *presence)
16371696 {
1697 guint type;
1698 const gchar *status;
1699 const gchar *message;
1700
16381701 if (contact == NULL || presence == NULL)
16391702 return;
16401703
16411704 contact->priv->has_features |= CONTACT_FEATURE_FLAG_PRESENCE;
1642 contact->priv->presence_type = g_value_get_uint (presence->values + 0);
1705
1706 tp_value_array_unpack (presence, 3, &type, &status, &message);
1707
1708 contact->priv->presence_type = type;
1709
16431710 g_free (contact->priv->presence_status);
1644 contact->priv->presence_status = g_value_dup_string (
1645 presence->values + 1);
1711 contact->priv->presence_status = g_strdup (status);
1712
16461713 g_free (contact->priv->presence_message);
1647 contact->priv->presence_message = g_value_dup_string (
1648 presence->values + 2);
1714 contact->priv->presence_message = g_strdup (message);
16491715
16501716 g_object_notify ((GObject *) contact, "presence-type");
16511717 g_object_notify ((GObject *) contact, "presence-status");
16521718 g_object_notify ((GObject *) contact, "presence-message");
1719
1720 g_signal_emit (contact, signals[SIGNAL_PRESENCE_CHANGED], 0,
1721 contact->priv->presence_type,
1722 contact->priv->presence_status,
1723 contact->priv->presence_message);
16531724 }
16541725
16551726 static void
16711742 contact_set_capabilities (TpContact *self,
16721743 TpCapabilities *capabilities)
16731744 {
1674 if (self->priv->capabilities != NULL)
1675 g_object_unref (self->priv->capabilities);
1745 tp_clear_object (&self->priv->capabilities);
16761746
16771747 self->priv->has_features |= CONTACT_FEATURE_FLAG_CAPABILITIES;
16781748 self->priv->capabilities = g_object_ref (capabilities);
20362106 /* Update the avatar token if a newer one is given */
20372107 contact_set_avatar_token (self, token, FALSE);
20382108
2039 if (self->priv->avatar_file != NULL)
2040 g_object_unref (self->priv->avatar_file);
2109 tp_clear_object (&self->priv->avatar_file);
20412110 self->priv->avatar_file = g_file_new_for_path (filename);
20422111
20432112 g_free (self->priv->avatar_mime_type);
20852154 /* If token is empty (""), it means the contact has no avatar. */
20862155 if (tp_str_empty (self->priv->avatar_token))
20872156 {
2088 if (self->priv->avatar_file != NULL)
2089 g_object_unref (self->priv->avatar_file);
2090 self->priv->avatar_file = NULL;
2157 tp_clear_object (&self->priv->avatar_file);
20912158
20922159 g_free (self->priv->avatar_mime_type);
20932160 self->priv->avatar_mime_type = NULL;
21082175 {
21092176 GError *error = NULL;
21102177
2111 if (self->priv->avatar_file != NULL)
2112 g_object_unref (self->priv->avatar_file);
2178 tp_clear_object (&self->priv->avatar_file);
21132179 self->priv->avatar_file = g_file_new_for_path (filename);
21142180
21152181 g_free (self->priv->avatar_mime_type);
22962362 contacts_context_continue (c);
22972363 }
22982364
2365 static void
2366 contact_maybe_set_info (TpContact *self,
2367 const GPtrArray *contact_info)
2368 {
2369 guint i;
2370
2371 if (self == NULL || contact_info == NULL)
2372 return;
2373
2374 tp_contact_info_list_free (self->priv->contact_info);
2375 self->priv->contact_info = NULL;
2376
2377 self->priv->has_features |= CONTACT_FEATURE_FLAG_CONTACT_INFO;
2378 for (i = 0; i < contact_info->len; i++)
2379 {
2380 GValueArray *va = g_ptr_array_index (contact_info, i);
2381 const gchar *field_name;
2382 GStrv parameters;
2383 GStrv field_value;
2384
2385 tp_value_array_unpack (va, 3, &field_name, &parameters, &field_value);
2386 self->priv->contact_info = g_list_prepend (self->priv->contact_info,
2387 tp_contact_info_field_new (field_name, parameters, field_value));
2388 }
2389 self->priv->contact_info = g_list_reverse (self->priv->contact_info);
2390
2391 g_object_notify ((GObject *) self, "contact-info");
2392 }
2393
2394 static void
2395 contact_info_changed (TpConnection *connection,
2396 guint handle,
2397 const GPtrArray *contact_info,
2398 gpointer user_data G_GNUC_UNUSED,
2399 GObject *weak_object G_GNUC_UNUSED)
2400 {
2401 TpContact *self = _tp_connection_lookup_contact (connection, handle);
2402
2403 contact_maybe_set_info (self, contact_info);
2404 }
2405
2406 static void
2407 contacts_got_contact_info (TpConnection *connection,
2408 GHashTable *info,
2409 const GError *error,
2410 gpointer user_data,
2411 GObject *weak_object)
2412 {
2413 ContactsContext *c = user_data;
2414
2415 if (error != NULL)
2416 {
2417 DEBUG ("GetContactInfo failed with %s %u: %s",
2418 g_quark_to_string (error->domain), error->code, error->message);
2419 }
2420 else
2421 {
2422 GHashTableIter iter;
2423 gpointer key, value;
2424
2425 g_hash_table_iter_init (&iter, info);
2426 while (g_hash_table_iter_next (&iter, &key, &value))
2427 {
2428 contact_info_changed (connection, GPOINTER_TO_UINT (key),
2429 value, NULL, NULL);
2430 }
2431 }
2432
2433 contacts_context_continue (c);
2434 }
2435
2436 static void
2437 contacts_bind_to_contact_info_changed (TpConnection *connection)
2438 {
2439 if (!connection->priv->tracking_contact_info_changed)
2440 {
2441 connection->priv->tracking_contact_info_changed = TRUE;
2442
2443 tp_cli_connection_interface_contact_info_connect_to_contact_info_changed (
2444 connection, contact_info_changed, NULL, NULL, NULL, NULL);
2445 }
2446 }
2447
2448 static void
2449 contacts_get_contact_info (ContactsContext *c)
2450 {
2451 guint i;
2452
2453 g_assert (c->handles->len == c->contacts->len);
2454
2455 contacts_bind_to_contact_info_changed (c->connection);
2456
2457 for (i = 0; i < c->contacts->len; i++)
2458 {
2459 TpContact *contact = g_ptr_array_index (c->contacts, i);
2460
2461 if ((contact->priv->has_features & CONTACT_FEATURE_FLAG_CONTACT_INFO) == 0)
2462 {
2463 c->refcount++;
2464 tp_cli_connection_interface_contact_info_call_get_contact_info (
2465 c->connection, -1, c->handles, contacts_got_contact_info,
2466 c, contacts_context_unref, c->weak_object);
2467 return;
2468 }
2469 }
2470
2471 contacts_context_continue (c);
2472 }
2473
2474 typedef struct
2475 {
2476 TpContact *contact;
2477 GSimpleAsyncResult *result;
2478 TpProxyPendingCall *call;
2479 GCancellable *cancellable;
2480 gulong cancelled_id;
2481 guint cancel_idle_id;
2482 } ContactInfoRequestData;
2483
2484 static void
2485 contact_info_request_data_disconnect_cancellable (ContactInfoRequestData *data)
2486 {
2487 if (data->cancelled_id != 0)
2488 g_cancellable_disconnect (data->cancellable, data->cancelled_id);
2489 data->cancelled_id = 0;
2490
2491 if (data->cancel_idle_id != 0)
2492 g_source_remove (data->cancel_idle_id);
2493 data->cancel_idle_id = 0;
2494 }
2495
2496 static void
2497 contact_info_request_data_free (ContactInfoRequestData *data)
2498 {
2499 if (data != NULL)
2500 {
2501 g_object_unref (data->result);
2502
2503 contact_info_request_data_disconnect_cancellable (data);
2504 if (data->cancellable != NULL)
2505 g_object_unref (data->cancellable);
2506
2507 g_slice_free (ContactInfoRequestData, data);
2508 }
2509 }
2510
2511 static void
2512 contact_info_request_cb (TpConnection *connection,
2513 const GPtrArray *contact_info,
2514 const GError *error,
2515 gpointer user_data,
2516 GObject *weak_object)
2517 {
2518 ContactInfoRequestData *data = user_data;
2519 TpContact *self = data->contact;
2520
2521 /* At this point it's too late to cancel the operation */
2522 contact_info_request_data_disconnect_cancellable (data);
2523
2524 if (error != NULL)
2525 {
2526 DEBUG ("Failed to request ContactInfo: %s", error->message);
2527 g_simple_async_result_set_from_error (data->result, error);
2528 }
2529 else
2530 {
2531 contact_maybe_set_info (self, contact_info);
2532 }
2533
2534 g_simple_async_result_complete (data->result);
2535 data->call = NULL;
2536 }
2537
2538 static gboolean
2539 contact_info_request_cancelled_idle_cb (gpointer user_data)
2540 {
2541 ContactInfoRequestData *data = user_data;
2542 GError *error = NULL;
2543
2544 data->cancel_idle_id = 0;
2545
2546 if (!g_cancellable_set_error_if_cancelled (data->cancellable, &error))
2547 return FALSE;
2548
2549 DEBUG ("Request ContactInfo cancelled");
2550
2551 g_simple_async_result_set_from_error (data->result, error);
2552 g_simple_async_result_complete (data->result);
2553 g_clear_error (&error);
2554
2555 g_assert (data->call != NULL);
2556 tp_proxy_pending_call_cancel (data->call);
2557
2558 return FALSE;
2559 }
2560
2561 static void
2562 contact_info_request_cancelled_cb (GCancellable *cancellable,
2563 ContactInfoRequestData *data)
2564 {
2565 /* Cancellable is locked here, and g_cancellable_disconnect() also try to get
2566 * the lock. That could then make deadlock. To be safe we cancel the DBus call
2567 * in an idle callback. Use G_PRIORITY_HIGH to be sure our callback comes
2568 * before the DBus reply otherwise it could be racy. */
2569 data->cancel_idle_id = g_idle_add_full (G_PRIORITY_HIGH,
2570 contact_info_request_cancelled_idle_cb, data, NULL);
2571 }
2572
2573 /**
2574 * tp_contact_request_contact_info_async:
2575 * @self: a #TpContact
2576 * @cancellable: optional #GCancellable object, %NULL to ignore.
2577 * @callback: a callback to call when the request is satisfied
2578 * @user_data: data to pass to @callback
2579 *
2580 * Requests an asynchronous request of the contact info of @self. When
2581 * the operation is finished, @callback will be called. You can then call
2582 * tp_contact_request_contact_info_finish() to get the result of the operation.
2583 *
2584 * If the operation is successful, the #TpContact:contact-info property will be
2585 * updated (emitting "notify::contact-info" signal) before @callback is called.
2586 * That means you can call tp_contact_get_contact_info() to get the new vCard
2587 * inside @callback.
2588 *
2589 * Note that requesting the vCard from the network can take significant time, so
2590 * a bigger timeout is set on the underlying D-Bus call. @cancellable can be
2591 * cancelled to free resources used in the D-Bus call if the caller is no longer
2592 * interested in the vCard.
2593 *
2594 * If %TP_CONTACT_FEATURE_CONTACT_INFO is not yet set on @self, it will be
2595 * set before its property gets updated and @callback is called.
2596 *
2597 * Since: 0.11.7
2598 */
2599 void
2600 tp_contact_request_contact_info_async (TpContact *self,
2601 GCancellable *cancellable,
2602 GAsyncReadyCallback callback,
2603 gpointer user_data)
2604 {
2605 ContactInfoRequestData *data;
2606
2607 g_return_if_fail (TP_IS_CONTACT (self));
2608
2609 contacts_bind_to_contact_info_changed (self->priv->connection);
2610
2611 data = g_slice_new0 (ContactInfoRequestData);
2612
2613 data->contact = self;
2614 data->result = g_simple_async_result_new (G_OBJECT (self), callback,
2615 user_data, tp_contact_request_contact_info_finish);
2616
2617 data->call = tp_cli_connection_interface_contact_info_call_request_contact_info (
2618 self->priv->connection, 60*60*1000, self->priv->handle,
2619 contact_info_request_cb,
2620 data, (GDestroyNotify) contact_info_request_data_free,
2621 NULL);
2622
2623 if (cancellable != NULL)
2624 {
2625 data->cancellable = g_object_ref (cancellable);
2626 data->cancelled_id = g_cancellable_connect (data->cancellable,
2627 G_CALLBACK (contact_info_request_cancelled_cb), data, NULL);
2628 }
2629
2630 }
2631
2632 /**
2633 * tp_contact_request_contact_info_finish:
2634 * @self: a #TpContact
2635 * @result: a #GAsyncResult
2636 * @error: a #GError to be filled
2637 *
2638 * Finishes an async request of @self info. If the operation was successful,
2639 * the contact's vCard can be accessed using tp_contact_get_contact_info().
2640 *
2641 * Returns: %TRUE if the request call was successful, otherwise %FALSE
2642 *
2643 * Since: 0.11.7
2644 */
2645 gboolean
2646 tp_contact_request_contact_info_finish (TpContact *self,
2647 GAsyncResult *result,
2648 GError **error)
2649 {
2650 GSimpleAsyncResult *simple;
2651
2652 g_return_val_if_fail (TP_IS_CONTACT (self), FALSE);
2653 g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE);
2654
2655 simple = G_SIMPLE_ASYNC_RESULT (result);
2656
2657 if (g_simple_async_result_propagate_error (simple, error))
2658 return FALSE;
2659
2660 g_return_val_if_fail (g_simple_async_result_is_valid (result,
2661 G_OBJECT (self), tp_contact_request_contact_info_finish), FALSE);
2662
2663 return TRUE;
2664 }
2665
2666 /**
2667 * tp_connection_refresh_contact_info:
2668 * @self: a #TpConnection
2669 * @n_contacts: The number of contacts in @contacts (must be at least 1)
2670 * @contacts: (array length=n_contacts): An array of #TpContact objects
2671 * associated with @self
2672 *
2673 * Requests to refresh the #TpContact:contact-info property on each contact from
2674 * @contacts, requesting it from the network if an up-to-date version is not
2675 * cached locally. "notify::contact-info" will be emitted when the contact's
2676 * information are updated.
2677 *
2678 * If %TP_CONTACT_FEATURE_CONTACT_INFO is not yet set on a contact, it will be
2679 * set before its property gets updated.
2680 *
2681 * Since: 0.11.7
2682 */
2683 void
2684 tp_connection_refresh_contact_info (TpConnection *self,
2685 guint n_contacts,
2686 TpContact * const *contacts)
2687 {
2688 GArray *handles;
2689 guint i;
2690
2691 g_return_if_fail (TP_IS_CONNECTION (self));
2692 g_return_if_fail (n_contacts >= 1);
2693 g_return_if_fail (contacts != NULL);
2694
2695 for (i = 0; i < n_contacts; i++)
2696 {
2697 g_return_if_fail (TP_IS_CONTACT (contacts[i]));
2698 g_return_if_fail (contacts[i]->priv->connection == self);
2699 }
2700
2701 contacts_bind_to_contact_info_changed (self);
2702
2703 handles = g_array_sized_new (FALSE, FALSE, sizeof (TpHandle), n_contacts);
2704 for (i = 0; i < n_contacts; i++)
2705 g_array_append_val (handles, contacts[i]->priv->handle);
2706
2707 tp_cli_connection_interface_contact_info_call_refresh_contact_info (self, -1,
2708 handles, NULL, NULL, NULL, NULL);
2709
2710 g_array_free (handles, TRUE);
2711 }
2712
22992713 static gboolean
23002714 contacts_context_supports_iface (ContactsContext *context,
23012715 GQuark iface)
23962810 "connection capabilities");
23972811
23982812 g_queue_push_tail (&context->todo, contacts_get_conn_capabilities);
2813 }
2814
2815 if ((feature_flags & CONTACT_FEATURE_FLAG_CONTACT_INFO) != 0 &&
2816 !contacts_context_supports_iface (context,
2817 TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO) &&
2818 tp_proxy_has_interface_by_id (context->connection,
2819 TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO))
2820 {
2821 g_queue_push_tail (&context->todo, contacts_get_contact_info);
23992822 }
24002823 }
24012824
25472970 boxed = tp_asv_get_boxed (asv,
25482971 TP_TOKEN_CONNECTION_INTERFACE_CONTACT_CAPABILITIES_CAPABILITIES,
25492972 TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST);
2550
25512973 contact_maybe_set_capabilities (contact, boxed);
2974
2975 /* ContactInfo */
2976 boxed = tp_asv_get_boxed (asv,
2977 TP_TOKEN_CONNECTION_INTERFACE_CONTACT_INFO_INFO,
2978 TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST);
2979 contact_maybe_set_info (contact, boxed);
25522980 }
25532981
25542982 contacts_context_continue (c);
26253053 g_ptr_array_add (array,
26263054 TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES);
26273055 contacts_bind_to_capabilities_updated (context->connection);
3056 }
3057 }
3058 else if (q == TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO)
3059 {
3060 if ((context->wanted & CONTACT_FEATURE_FLAG_CONTACT_INFO) != 0)
3061 {
3062 g_ptr_array_add (array,
3063 TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO);
3064 contacts_bind_to_contact_info_changed (context->connection);
26283065 }
26293066 }
26303067 }
6060 TP_CONTACT_FEATURE_LOCATION,
6161 TP_CONTACT_FEATURE_CAPABILITIES,
6262 TP_CONTACT_FEATURE_AVATAR_DATA,
63 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_AVATAR_DATA + 1)
63 TP_CONTACT_FEATURE_CONTACT_INFO,
64 #define NUM_TP_CONTACT_FEATURES (TP_CONTACT_FEATURE_CONTACT_INFO + 1)
6465 } TpContactFeature;
6566
6667 /* Basic functionality, always available */
8990 /* TP_CONTACT_FEATURE_AVATAR_DATA */
9091 GFile *tp_contact_get_avatar_file (TpContact *self);
9192 const gchar *tp_contact_get_avatar_mime_type (TpContact *self);
93
94 /* TP_CONTACT_FEATURE_INFO */
95 GList *tp_contact_get_contact_info (TpContact *self);
96
97 void tp_contact_request_contact_info_async (TpContact *self,
98 GCancellable *cancellable, GAsyncReadyCallback callback,
99 gpointer user_data);
100
101 gboolean tp_contact_request_contact_info_finish (TpContact *self,
102 GAsyncResult *result, GError **error);
103
104 void tp_connection_refresh_contact_info (TpConnection *self,
105 guint n_contacts, TpContact * const *contacts);
92106
93107 typedef void (*TpConnectionContactsByHandleCb) (TpConnection *connection,
94108 guint n_contacts, TpContact * const *contacts,
405405 /* if this assertion fails, TpDBusPropertiesMixinIfaceImpl.mixin_next (which
406406 * used to be a GCallback but is now a gpointer) will be an ABI break on this
407407 * architecture, so do some evil trick with unions or something */
408 tp_verify (sizeof (GCallback) == sizeof (gpointer));
408 G_STATIC_ASSERT (sizeof (GCallback) == sizeof (gpointer));
409409
410410 /**
411411 * tp_dbus_properties_mixin_implement_interface:
165165 * Raised when a local process rejects a request because it does not have
166166 * enough of a resource, such as memory.
167167 * Since 0.7.34
168 * @TP_ERROR_WOULD_BREAK_ANONYMITY: org.freedesktop.Telepathy.Error.WouldBreakAnonymity:
169 * Raised when a request cannot be satisfied without violating an
170 * earlier request for anonymity, and the earlier request specified
171 * that raising an error is preferable to disclosing the user's
172 * identity
173 * Since 0.11.7
168174 *
169175 * Enumerated type representing the Telepathy D-Bus errors.
170176 */
228234 {
229235 GQuark domain = g_quark_from_static_string ("tp_errors");
230236
231 tp_verify_statement (sizeof (GQuark) <= sizeof (gsize));
232
233237 g_type_init ();
234238 dbus_g_error_domain_register (domain, TP_ERROR_PREFIX,
235239 TP_TYPE_ERROR);
238242
239243 return (GQuark) quark;
240244 }
245
246 /* tp_errors_quark assumes this */
247 G_STATIC_ASSERT (sizeof (GQuark) <= sizeof (gsize));
3232 #define TP_ERROR_PREFIX "org.freedesktop.Telepathy.Error"
3333
3434 #define TP_ERRORS (tp_errors_quark ())
35 #define TP_ERROR TP_ERRORS
3536
3637 void tp_g_set_error_invalid_handle_type (guint type, GError **error);
3738 void tp_g_set_error_unsupported_handle_type (guint type, GError **error);
7576 TP_ERROR_REGISTRATION_EXISTS, /*< nick=RegistrationExists >*/
7677 TP_ERROR_SERVICE_BUSY, /*< nick=ServiceBusy >*/
7778 TP_ERROR_RESOURCE_UNAVAILABLE, /*< nick=ResourceUnavailable >*/
79 TP_ERROR_WOULD_BREAK_ANONYMITY, /*< nick=WouldBreakAnonymity >*/
7880 } TpError;
7981
8082 const gchar *tp_error_get_dbus_name (TpError error);
678678 *
679679 * Since: 0.11.3
680680 */
681
682 /**
683 * SECTION:cli-anonymity
684 * @title: Connection and Channel Anonymity interfaces
685 * @short_description: client-side wrappers for the Anonymity interfaces
686 * @see_also: #TpConnection, #TpChannel
687 *
688 * In some protocols, mainly those that interact with the PSTN, it's possible
689 * to make a call without disclosing the originating identity (e.g. phone
690 * number). The Anonymity interfaces on the Connection and Channel can be used
691 * to control this feature in Telepathy.
692 *
693 * This section documents the auto-generated C wrappers for the
694 * Anonymity interfaces, used with #TpConnection and #TpChannel objects.
695 *
696 * Since: 0.11.7
697 */
698
699 /**
700 * SECTION:svc-anonymity
701 * @title: Service-side Connection and Channel Anonymity interfaces
702 * @short_description: GInterfaces to implement the Anonymity interfaces
703 *
704 * In some protocols, mainly those that interact with the PSTN, it's possible
705 * to make a call without disclosing the originating identity (e.g. phone
706 * number). The Anonymity interfaces on the Connection and Channel can be used
707 * to control this feature in Telepathy.
708 *
709 * This section documents the auto-generated GInterfaces used to implement the
710 * Anonymity interfaces.
711 *
712 * Since: 0.11.7
713 */
714
715 /**
716 * SECTION:cli-service-point
717 * @title: Connection and Channel ServicePoint interfaces
718 * @short_description: client-side wrappers for the ServicePoint interfaces
719 * @see_also: #TpConnection, #TpChannel
720 *
721 * In some protocols, mainly those that interact with the PSTN, it's possible
722 * to contact the emergency services or other public service answering points.
723 * The ServicePoint interfaces on the Connection and Channel can be used
724 * to discover how to contact these service points, and detect whether a call
725 * in progress is communicating with a service point.
726 *
727 * This section documents the auto-generated C wrappers for the
728 * ServicePoint interfaces, used with #TpConnection and #TpChannel objects.
729 *
730 * Since: 0.11.7
731 */
732
733 /**
734 * SECTION:svc-service-point
735 * @title: Service-side Connection and Channel ServicePoint interfaces
736 * @short_description: GInterfaces to implement the ServicePoint interfaces
737 *
738 * In some protocols, mainly those that interact with the PSTN, it's possible
739 * to contact the emergency services or other public service answering points.
740 * The ServicePoint interfaces on the Connection and Channel can be used
741 * to discover how to contact these service points, and detect whether a call
742 * in progress is communicating with a service point.
743 *
744 * This section documents the auto-generated GInterfaces used to implement the
745 * ServicePoint interfaces.
746 *
747 * Since: 0.11.7
748 */
139139 int tp_handle_set_size (const TpHandleSet *set);
140140 GArray *tp_handle_set_to_array (const TpHandleSet *set)
141141 G_GNUC_WARN_UNUSED_RESULT;
142 TpHandleSet *tp_handle_set_new_from_array (TpHandleRepoIface *repo,
143 const GArray *array) G_GNUC_WARN_UNUSED_RESULT;
142144
143145 TpIntSet *tp_handle_set_update (TpHandleSet *set, const TpIntSet *add)
144146 G_GNUC_WARN_UNUSED_RESULT;
8585 return set;
8686 }
8787
88 /**
89 * tp_handle_set_new_from_array:
90 * @repo: #TpHandleRepoIface that holds the handles to be reffed by this set
91 * @array: array of handles to be referenced by this set
92 *
93 * Creates a new #TpHandleSet
94 *
95 * Returns: A new #TpHandleSet
96 *
97 * Since: 0.11.7
98 */
99 TpHandleSet *
100 tp_handle_set_new_from_array (TpHandleRepoIface *repo,
101 const GArray *array)
102 {
103 TpHandleSet *set = tp_handle_set_new (repo);
104 TpIntSet *tmp = tp_intset_from_array (array);
105
106 tp_intset_destroy (tp_handle_set_update (set, tmp));
107 tp_intset_destroy (tmp);
108 return set;
109 }
110
88111 static void
89112 freer (TpHandleSet *set, TpHandle handle, gpointer userdata)
90113 {
4949 # define BITFIELD_LOG2_BITS 5
5050 #endif
5151
52 tp_verify (1 << BITFIELD_LOG2_BITS == BITFIELD_BITS);
53 tp_verify (sizeof (gpointer) >= sizeof (gsize));
52 G_STATIC_ASSERT (1 << BITFIELD_LOG2_BITS == BITFIELD_BITS);
53 G_STATIC_ASSERT (sizeof (gpointer) >= sizeof (gsize));
5454 #define LOW_MASK (BITFIELD_BITS - 1)
5555 #define HIGH_PART(x) (x & ~LOW_MASK)
5656 #define LOW_PART(x) (x & LOW_MASK)
449449 }
450450
451451 /* these magic numbers would need adjusting for 64-bit storage */
452 tp_verify (BITFIELD_BITS == 32);
452 G_STATIC_ASSERT (BITFIELD_BITS == 32);
453453
454454 static inline guint
455455 count_bits32 (guint32 n)
844844 gsize bitfield;
845845 } RealFastIter;
846846
847 tp_verify (sizeof (TpIntSetFastIter) >= sizeof (RealFastIter));
847 G_STATIC_ASSERT (sizeof (TpIntSetFastIter) >= sizeof (RealFastIter));
848848
849849 /**
850850 * tp_intset_fast_iter_init:
989989
990990 tp_proxy_invalidate (self, &e);
991991
992 if (self->dbus_daemon != NULL)
993 {
994 g_object_unref (self->dbus_daemon);
995 self->dbus_daemon = NULL;
996 }
992 tp_clear_object (&self->dbus_daemon);
997993
998994 G_OBJECT_CLASS (tp_proxy_parent_class)->dispose (object);
999995 }
66 VOID:UINT,INT,STRING
77 VOID:UINT,OBJECT
88 VOID:UINT,STRING,STRING
9 VOID:UINT,UINT,UINT,STRING,POINTER
9 VOID:UINT,UINT,UINT,STRING,BOXED
1010 VOID:OBJECT,BOOLEAN
1111 VOID:OBJECT,UINT,INT,STRING
1212 VOID:OBJECT,OBJECT
00 /*
11 * util.c - Source for telepathy-glib utility functions
2 * Copyright (C) 2006-2007 Collabora Ltd. <http://www.collabora.co.uk/>
3 * Copyright (C) 2006-2007 Nokia Corporation
4 * @author Robert McQueen <robert.mcqueen@collabora.co.uk>
2 * Copyright © 2006-2010 Collabora Ltd. <http://www.collabora.co.uk/>
3 * Copyright © 2006-2008 Nokia Corporation
54 *
65 * This library is free software; you can redistribute it and/or
76 * modify it under the terms of the GNU Lesser General Public
5150 * (This is gnulib's verify macro, written by Paul Eggert, Bruno Haible and
5251 * Jim Meyering.)
5352 *
53 * This macro will be deprecated in a future telepathy-glib release. Please
54 * use GLib 2.20's G_STATIC_ASSERT() macro in new code.
55 *
5456 * Since: 0.7.34
5557 */
5658
6971 * (This is gnulib's verify_true macro, written by Paul Eggert, Bruno Haible
7072 * and Jim Meyering.)
7173 *
74 * This macro will be deprecated in a future telepathy-glib release. Please
75 * use GLib 2.20's G_STATIC_ASSERT() macro in new code.
76 *
7277 * Returns: 1
7378 *
7479 * Since: 0.7.34
8489 *
8590 * This macro can be used anywhere that a statement would be allowed; it
8691 * is equivalent to ((void) tp_verify_true (R)).
92 *
93 * This macro will be deprecated in a future telepathy-glib release. Please
94 * use GLib 2.20's G_STATIC_ASSERT() macro in new code.
8795 *
8896 * Since: 0.7.34
8997 */
12501258
12511259 g_slice_free (TpWeakRef, self);
12521260 }
1261
1262 /**
1263 * tp_clear_object: (skip)
1264 * @op: (allow-none): a pointer to a variable, struct member etc. holding a
1265 * #GObject
1266 *
1267 * Set a variable holding a #GObject to %NULL. If it was not already %NULL,
1268 * unref the object it previously pointed to.
1269 *
1270 * This is exactly equivalent to calling tp_clear_pointer() on @op,
1271 * with @destroy = g_object_unref(). See tp_clear_pointer() for example usage.
1272 *
1273 * Since: 0.11.7
1274 */
1275
1276 /**
1277 * tp_clear_pointer: (skip)
1278 * @pp: (allow-none): a pointer to a variable, struct member etc. holding a
1279 * pointer
1280 * @destroy: a function to which a gpointer can be passed, to destroy *@pp
1281 * (if calling this macro from C++, explicitly casting the function to
1282 * #GDestroyNotify may be necessary)
1283 *
1284 * Set a variable holding a pointer to %NULL. If it was not already %NULL,
1285 * unref or destroy the object it previously pointed to with @destroy.
1286 *
1287 * More precisely, if both @pp and *@pp are non-%NULL, set *@pp to %NULL, then
1288 * call @destroy on the object that *@pp previously pointed to.
1289 *
1290 * This is analogous to g_clear_error() for non-error objects, but also
1291 * ensures that @pp is already %NULL before the destructor is run.
1292 *
1293 * Typical usage is something like this:
1294 *
1295 * |[
1296 * typedef struct {
1297 * TpConnection *conn;
1298 * GError *error;
1299 * GHashTable *table;
1300 * MyStruct *misc;
1301 * } Foo;
1302 * Foo *foo;
1303 *
1304 * ...
1305 *
1306 * tp_clear_object (&amp;foo->conn);
1307 * g_clear_error (&amp;foo->error);
1308 * tp_clear_boxed (G_TYPE_HASH_TABLE, &amp;foo->table);
1309 * tp_clear_pointer (&amp;foo->misc, my_struct_destroy);
1310 * ]|
1311 *
1312 * Since: 0.11.7
1313 */
1314
1315 /**
1316 * tp_clear_boxed: (skip)
1317 * @gtype: (type GObject.Type): the #GType of *@pp, e.g. %G_TYPE_HASH_TABLE
1318 * @pp: (allow-none): a pointer to a variable, struct member etc. holding a
1319 * boxed object
1320 *
1321 * Set a variable holding a boxed object to %NULL. If it was not already %NULL,
1322 * destroy the boxed object it previously pointed to, as appropriate for
1323 * @gtype.
1324 *
1325 * More precisely, if both @pp and *@pp are non-%NULL, set *@pp to %NULL, then
1326 * call g_boxed_free() on the object that *@pp previously pointed to.
1327 *
1328 * This is similar to tp_clear_pointer(); see that function's documentation
1329 * for typical usage.
1330 *
1331 * Since: 0.11.7
1332 */
00 /*
11 * util.h - Headers for telepathy-glib utility functions
22 *
3 * Copyright (C) 2006-2007 Collabora Ltd. <http://www.collabora.co.uk/>
4 * Copyright (C) 2006-2007 Nokia Corporation
5 * @author Robert McQueen <robert.mcqueen@collabora.co.uk>
3 * Copyright © 2006-2010 Collabora Ltd. <http://www.collabora.co.uk/>
4 * Copyright © 2006-2008 Nokia Corporation
65 *
76 * This library is free software; you can redistribute it and/or
87 * modify it under the terms of the GNU Lesser General Public
106105 gpointer tp_weak_ref_dup_object (TpWeakRef *self) G_GNUC_WARN_UNUSED_RESULT;
107106 void tp_weak_ref_destroy (TpWeakRef *self);
108107
108 #define tp_clear_pointer(pp, destroy) \
109 G_STMT_START \
110 { \
111 if (pp != NULL) \
112 { \
113 gpointer _tp_clear_pointer_tmp = *(pp); \
114 \
115 *(pp) = NULL; \
116 \
117 if (_tp_clear_pointer_tmp != NULL) \
118 (destroy) (_tp_clear_pointer_tmp); \
119 } \
120 } \
121 G_STMT_END
122
123 #define tp_clear_object(op) tp_clear_pointer ((op), g_object_unref)
124
125 #define tp_clear_boxed(gtype, pp) \
126 G_STMT_START \
127 { \
128 if (pp != NULL) \
129 { \
130 gpointer _tp_clear_boxed_tmp = *(pp); \
131 \
132 *(pp) = NULL; \
133 \
134 if (_tp_clear_boxed_tmp != NULL) \
135 g_boxed_free (gtype, _tp_clear_boxed_tmp); \
136 } \
137 } \
138 G_STMT_END
139
109140 G_END_DECLS
110141
111142 #undef __TP_IN_UTIL_H__
0 Version: TELEPATHY_GLIB_0.11.7
1 Extends: TELEPATHY_GLIB_0.11.6
2 Release: 0.11.7
3
4 tp_account_get_detailed_error
5 tp_channel_dispatch_operation_handle_with_time_async
6 tp_channel_dispatch_operation_handle_with_time_finish
7 tp_cli_channel_interface_service_point_connect_to_service_point_changed
8 tp_cli_connection_interface_anonymity_connect_to_anonymity_modes_changed
9 tp_cli_connection_interface_service_point_connect_to_service_points_changed
10 tp_connection_get_contact_info_flags
11 tp_connection_get_contact_info_supported_fields
12 tp_connection_get_feature_quark_contact_info
13 tp_connection_refresh_contact_info
14 tp_connection_set_contact_info_async
15 tp_connection_set_contact_info_finish
16 tp_contact_get_contact_info
17 tp_contact_info_field_copy
18 tp_contact_info_field_free
19 tp_contact_info_field_get_type
20 tp_contact_info_field_new
21 tp_contact_info_field_spec_copy
22 tp_contact_info_field_spec_free
23 tp_contact_info_field_spec_get_type
24 tp_contact_info_list_copy
25 tp_contact_info_list_free
26 tp_contact_info_list_get_type
27 tp_contact_info_spec_list_copy
28 tp_contact_info_spec_list_free
29 tp_contact_info_spec_list_get_type
30 tp_contact_request_contact_info_async
31 tp_contact_request_contact_info_finish
32 tp_handle_set_new_from_array
33 tp_iface_quark_channel_interface_anonymity
34 tp_iface_quark_channel_interface_service_point
35 tp_iface_quark_connection_interface_anonymity
36 tp_iface_quark_connection_interface_service_point
37 tp_svc_channel_interface_anonymity_get_type
38 tp_svc_channel_interface_service_point_emit_service_point_changed
39 tp_svc_channel_interface_service_point_get_type
40 tp_svc_connection_interface_anonymity_emit_anonymity_modes_changed
41 tp_svc_connection_interface_anonymity_get_type
42 tp_svc_connection_interface_service_point_emit_service_points_changed
43 tp_svc_connection_interface_service_point_get_type
44 tp_type_dbus_array__28us_29as
45 tp_type_dbus_struct__28us_29as
2424 abs_top_srcdir=@abs_top_srcdir@ \
2525 G_SLICE=debug-blocks \
2626 G_DEBUG=fatal_warnings,fatal_criticals$(maybe_gc_friendly) \
27 PYTHONPATH=@abs_top_srcdir@/tools
27 PYTHONPATH=@abs_top_srcdir@/tools \
28 $(EXTRA_TESTS_ENVIRONMENT)
29
30 EXTRA_TESTS_ENVIRONMENT =
2831
2932 include $(top_srcdir)/tools/valgrind.mk
3033
108111 $(GLIB_CFLAGS) \
109112 -D_TP_IGNORE_DEPRECATIONS \
110113 $(TP_GLIB_CFLAGS)
114
115 AM_CXXFLAGS = \
116 $(DBUS_CFLAGS) \
117 $(GLIB_CFLAGS) \
118 -D_TP_IGNORE_DEPRECATIONS \
119 $(TP_GLIB_CFLAGS)
120
121 if HAVE_CXX
122 noinst_PROGRAMS += \
123 test-util-cxx
124
125 test_util_cxx_SOURCES = util-cxx.cpp
126 endif
3838 test-gnio-util$(EXEEXT) test-heap$(EXEEXT) \
3939 test-internal-debug$(EXEEXT) test-intset$(EXEEXT) \
4040 test-signal-connect-object$(EXEEXT) test-util$(EXEEXT) \
41 test-debug-domain$(EXEEXT)
41 test-debug-domain$(EXEEXT) $(am__EXEEXT_1)
4242 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
4343 $(top_srcdir)/tools/check-coding-style.mk \
4444 $(top_srcdir)/tools/valgrind.mk
45 @HAVE_CXX_TRUE@am__append_1 = \
46 @HAVE_CXX_TRUE@ test-util-cxx
47
4548 subdir = tests
4649 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
4750 am__aclocal_m4_deps = $(top_srcdir)/m4/compiler.m4 \
5861 CONFIG_HEADER = $(top_builddir)/config.h
5962 CONFIG_CLEAN_FILES =
6063 CONFIG_CLEAN_VPATH_FILES =
64 @HAVE_CXX_TRUE@am__EXEEXT_1 = test-util-cxx$(EXEEXT)
6165 PROGRAMS = $(noinst_PROGRAMS)
6266 am_test_asv_OBJECTS = asv.$(OBJEXT)
6367 test_asv_OBJECTS = $(am_test_asv_OBJECTS)
129133 test_util_DEPENDENCIES = \
130134 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
131135 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
136 am__test_util_cxx_SOURCES_DIST = util-cxx.cpp
137 @HAVE_CXX_TRUE@am_test_util_cxx_OBJECTS = util-cxx.$(OBJEXT)
138 test_util_cxx_OBJECTS = $(am_test_util_cxx_OBJECTS)
139 test_util_cxx_LDADD = $(LDADD)
140 test_util_cxx_DEPENDENCIES = \
141 $(top_builddir)/telepathy-glib/libtelepathy-glib.la \
142 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
132143 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
133144 depcomp = $(SHELL) $(top_srcdir)/depcomp
134145 am__depfiles_maybe = depfiles
152163 AM_V_CCLD = $(am__v_CCLD_$(V))
153164 am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
154165 am__v_CCLD_0 = @echo " CCLD " $@;
166 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
167 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
168 LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
169 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
170 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
171 $(AM_CXXFLAGS) $(CXXFLAGS)
172 AM_V_CXX = $(am__v_CXX_$(V))
173 am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
174 am__v_CXX_0 = @echo " CXX " $@;
175 CXXLD = $(CXX)
176 CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
177 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
178 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
179 AM_V_CXXLD = $(am__v_CXXLD_$(V))
180 am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
181 am__v_CXXLD_0 = @echo " CXXLD " $@;
155182 AM_V_GEN = $(am__v_GEN_$(V))
156183 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
157184 am__v_GEN_0 = @echo " GEN " $@;
160187 $(test_enums_SOURCES) $(test_gnio_util_SOURCES) \
161188 $(test_heap_SOURCES) $(test_internal_debug_SOURCES) \
162189 $(test_intset_SOURCES) $(test_signal_connect_object_SOURCES) \
163 $(test_util_SOURCES)
190 $(test_util_SOURCES) $(test_util_cxx_SOURCES)
164191 DIST_SOURCES = $(test_asv_SOURCES) $(test_availability_cmp_SOURCES) \
165192 $(test_capabilities_SOURCES) $(test_debug_domain_SOURCES) \
166193 $(test_enums_SOURCES) $(test_gnio_util_SOURCES) \
167194 $(test_heap_SOURCES) $(test_internal_debug_SOURCES) \
168195 $(test_intset_SOURCES) $(test_signal_connect_object_SOURCES) \
169 $(test_util_SOURCES)
196 $(test_util_SOURCES) $(am__test_util_cxx_SOURCES_DIST)
170197 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
171198 html-recursive info-recursive install-data-recursive \
172199 install-dvi-recursive install-exec-recursive \
224251 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
225252 CPP = @CPP@
226253 CPPFLAGS = @CPPFLAGS@
254 CXX = @CXX@
255 CXXCPP = @CXXCPP@
256 CXXDEPMODE = @CXXDEPMODE@
257 CXXFLAGS = @CXXFLAGS@
227258 CYGPATH_W = @CYGPATH_W@
228259 DBUS_CFLAGS = @DBUS_CFLAGS@
229260 DBUS_LIBS = @DBUS_LIBS@
311342 abs_top_builddir = @abs_top_builddir@
312343 abs_top_srcdir = @abs_top_srcdir@
313344 ac_ct_CC = @ac_ct_CC@
345 ac_ct_CXX = @ac_ct_CXX@
314346 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
315347 am__include = @am__include@
316348 am__leading_dot = @am__leading_dot@
376408 abs_top_srcdir=@abs_top_srcdir@ \
377409 G_SLICE=debug-blocks \
378410 G_DEBUG=fatal_warnings,fatal_criticals$(maybe_gc_friendly) \
379 PYTHONPATH=@abs_top_srcdir@/tools
380
411 PYTHONPATH=@abs_top_srcdir@/tools \
412 $(EXTRA_TESTS_ENVIRONMENT)
413
414 EXTRA_TESTS_ENVIRONMENT =
381415 VALGRIND = valgrind --tool=memcheck \
382416 --verbose \
383417 --leak-check=full \
463497 -D_TP_IGNORE_DEPRECATIONS \
464498 $(TP_GLIB_CFLAGS)
465499
500 AM_CXXFLAGS = \
501 $(DBUS_CFLAGS) \
502 $(GLIB_CFLAGS) \
503 -D_TP_IGNORE_DEPRECATIONS \
504 $(TP_GLIB_CFLAGS)
505
506 @HAVE_CXX_TRUE@test_util_cxx_SOURCES = util-cxx.cpp
466507 all: all-recursive
467508
468509 .SUFFIXES:
469 .SUFFIXES: .c .lo .o .obj
510 .SUFFIXES: .c .cpp .lo .o .obj
470511 $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/tools/valgrind.mk $(top_srcdir)/tools/check-coding-style.mk $(am__configure_deps)
471512 @for dep in $?; do \
472513 case '$(am__configure_deps)' in \
539580 test-util$(EXEEXT): $(test_util_OBJECTS) $(test_util_DEPENDENCIES)
540581 @rm -f test-util$(EXEEXT)
541582 $(AM_V_CCLD)$(LINK) $(test_util_OBJECTS) $(test_util_LDADD) $(LIBS)
583 test-util-cxx$(EXEEXT): $(test_util_cxx_OBJECTS) $(test_util_cxx_DEPENDENCIES)
584 @rm -f test-util-cxx$(EXEEXT)
585 $(AM_V_CXXLD)$(CXXLINK) $(test_util_cxx_OBJECTS) $(test_util_cxx_LDADD) $(LIBS)
542586
543587 mostlyclean-compile:
544588 -rm -f *.$(OBJEXT)
556600 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/internal-debug.Po@am__quote@
557601 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/intset.Po@am__quote@
558602 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal-connect-object.Po@am__quote@
603 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util-cxx.Po@am__quote@
559604 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@
560605
561606 .c.o:
581626 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
582627 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
583628 @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
629
630 .cpp.o:
631 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
632 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
633 @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
634 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
635 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
636 @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
637
638 .cpp.obj:
639 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
640 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
641 @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
642 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
643 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
644 @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
645
646 .cpp.lo:
647 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
648 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
649 @am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
650 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
651 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
652 @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
584653
585654 mostlyclean-libtool:
586655 -rm -f *.lo
9494 add_text_chat_class (classes, TP_HANDLE_TYPE_CONTACT);
9595 add_ft_class (classes);
9696
97 caps = test_object_new_static_class (TP_TYPE_CAPABILITIES,
97 caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES,
9898 "channel-classes", classes,
9999 "contact-specific", FALSE,
100100 NULL);
163163 classes = g_ptr_array_sized_new (1);
164164 add_text_chat_class (classes, TP_HANDLE_TYPE_CONTACT);
165165
166 caps = test_object_new_static_class (TP_TYPE_CAPABILITIES,
166 caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES,
167167 "channel-classes", classes,
168168 "contact-specific", TRUE,
169169 NULL);
181181 classes = g_ptr_array_sized_new (1);
182182 add_text_chat_class (classes, TP_HANDLE_TYPE_ROOM);
183183
184 caps = test_object_new_static_class (TP_TYPE_CAPABILITIES,
184 caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES,
185185 "channel-classes", classes,
186186 "contact-specific", TRUE,
187187 NULL);
200200 add_text_chat_class (classes, TP_HANDLE_TYPE_CONTACT);
201201 add_text_chat_class (classes, TP_HANDLE_TYPE_ROOM);
202202
203 caps = test_object_new_static_class (TP_TYPE_CAPABILITIES,
203 caps = tp_tests_object_new_static_class (TP_TYPE_CAPABILITIES,
204204 "channel-classes", classes,
205205 "contact-specific", TRUE,
206206 NULL);
198198 G_SLICE=debug-blocks \
199199 G_DEBUG=fatal_warnings,fatal_criticals$(maybe_gc_friendly) \
200200 sh $(top_srcdir)/tools/with-session-bus.sh \
201 --config-file=dbus-1/session.conf --
201 --config-file=dbus-1/session.conf -- \
202 $(EXTRA_TESTS_ENVIRONMENT)
203
204 EXTRA_TESTS_ENVIRONMENT =
202205
203206 check-valgrind:
204207 $(MAKE) check-TESTS \
524524 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
525525 CPP = @CPP@
526526 CPPFLAGS = @CPPFLAGS@
527 CXX = @CXX@
528 CXXCPP = @CXXCPP@
529 CXXDEPMODE = @CXXDEPMODE@
530 CXXFLAGS = @CXXFLAGS@
527531 CYGPATH_W = @CYGPATH_W@
528532 DBUS_CFLAGS = @DBUS_CFLAGS@
529533 DBUS_LIBS = @DBUS_LIBS@
611615 abs_top_builddir = @abs_top_builddir@
612616 abs_top_srcdir = @abs_top_srcdir@
613617 ac_ct_CC = @ac_ct_CC@
618 ac_ct_CXX = @ac_ct_CXX@
614619 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
615620 am__include = @am__include@
616621 am__leading_dot = @am__leading_dot@
779784 G_SLICE=debug-blocks \
780785 G_DEBUG=fatal_warnings,fatal_criticals$(maybe_gc_friendly) \
781786 sh $(top_srcdir)/tools/with-session-bus.sh \
782 --config-file=dbus-1/session.conf --
783
787 --config-file=dbus-1/session.conf -- \
788 $(EXTRA_TESTS_ENVIRONMENT)
789
790 EXTRA_TESTS_ENVIRONMENT =
784791 VALGRIND = valgrind --tool=memcheck \
785792 --verbose \
786793 --leak-check=full \
2323 GMainLoop *mainloop;
2424 TpDBusDaemon *dbus;
2525
26 SimpleAccountManager *service /* initialized in prepare_service */;
26 TpTestsSimpleAccountManager *service /* initialized in prepare_service */;
2727 TpAccountManager *am;
2828 TpAccount *account;
2929 gboolean prepared /* The result of prepare_finish */;
126126
127127 test->mainloop = g_main_loop_new (NULL, FALSE);
128128
129 test->dbus = test_dbus_daemon_dup_or_die ();
129 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
130130
131131 test->am = NULL;
132132 test->timeout_id = 0;
142142 g_assert (tp_dbus_daemon_request_name (test->dbus,
143143 TP_ACCOUNT_MANAGER_BUS_NAME, FALSE, &test->error));
144144
145 test->service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT_MANAGER,
146 NULL);
145 test->service = tp_tests_object_new_static_class (
146 TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, NULL);
147147 tp_dbus_daemon_register_object (test->dbus, TP_ACCOUNT_MANAGER_OBJECT_PATH,
148148 test->service);
149149 }
166166 test->script = NULL;
167167
168168 /* make sure any pending things have happened */
169 test_proxy_run_until_dbus_queue_processed (test->dbus);
169 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
170170
171171 g_object_unref (test->dbus);
172172 test->dbus = NULL;
8787 GHashTable *times_notified;
8888 GError *error /* initialized where needed */;
8989
90 SimpleAccount *account_service /* initialized in prepare_service */;
90 TpTestsSimpleAccount *account_service /* initialized in prepare_service */;
9191 } Test;
9292
9393 static void
9595 gconstpointer data)
9696 {
9797 test->mainloop = g_main_loop_new (NULL, FALSE);
98 test->dbus = test_dbus_daemon_dup_or_die ();
98 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
9999 g_assert (test->dbus != NULL);
100100
101101 test->account = NULL;
122122 CONN2_BUS_NAME, FALSE, &test->error);
123123 g_assert_no_error (test->error);
124124
125 test->account_service = g_object_new (SIMPLE_TYPE_ACCOUNT, NULL);
125 test->account_service = g_object_new (TP_TESTS_TYPE_SIMPLE_ACCOUNT, NULL);
126126 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
127127 test->account_service);
128128 }
168168 {
169169 if (test->account != NULL)
170170 {
171 test_proxy_run_until_dbus_queue_processed (test->account);
171 tp_tests_proxy_run_until_dbus_queue_processed (test->account);
172172
173173 if (test->notify_id != 0)
174174 {
183183 test->times_notified = NULL;
184184
185185 /* make sure any pending calls on the account have happened, so it can die */
186 test_proxy_run_until_dbus_queue_processed (test->dbus);
186 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
187187
188188 g_object_unref (test->dbus);
189189 test->dbus = NULL;
252252 TpConnectionStatusReason reason;
253253 gchar *status = NULL;
254254 gchar *message = NULL;
255 const GHashTable *details = GUINT_TO_POINTER (666);
255256
256257 test->account = tp_account_new (test->dbus, ACCOUNT_PATH, NULL);
257258 g_assert (test->account != NULL);
276277 g_assert_cmpint (tp_account_get_connection_status (test->account, &reason),
277278 ==, TP_CONNECTION_STATUS_CONNECTED);
278279 g_assert_cmpint (reason, ==, TP_CONNECTION_STATUS_REASON_REQUESTED);
280 g_assert_cmpstr (tp_account_get_detailed_error (test->account, NULL), ==,
281 NULL);
282 g_assert_cmpstr (tp_account_get_detailed_error (test->account, &details), ==,
283 NULL);
284 /* this is documented to be untouched */
285 g_assert_cmpuint (GPOINTER_TO_UINT (details), ==, 666);
279286
280287 /* the CM and protocol come from the object path */
281288 g_assert_cmpstr (tp_account_get_connection_manager (test->account),
319326 GQuark account_features[] = { TP_ACCOUNT_FEATURE_CORE, 0 };
320327 GHashTable *change = tp_asv_new (NULL, NULL);
321328 TpConnection *conn;
329 const GHashTable *details;
322330
323331 test->account = tp_account_new (test->dbus, ACCOUNT_PATH, NULL);
324332 g_assert (test->account != NULL);
348356 g_assert_cmpstr (tp_proxy_get_object_path (conn), ==, CONN1_PATH);
349357 g_assert_cmpuint (test_get_times_notified (test, "connection"), ==, 1);
350358
359 g_assert_cmpstr (tp_account_get_detailed_error (test->account, NULL), ==,
360 TP_ERROR_STR_CANCELLED);
361
351362 /* ensure the same connection - no change notification */
352363
353364 test_set_up_account_notify (test);
366377 tp_svc_account_emit_account_property_changed (test->account_service, change);
367378 g_hash_table_remove_all (change);
368379
369 test_proxy_run_until_dbus_queue_processed (test->account);
380 tp_tests_proxy_run_until_dbus_queue_processed (test->account);
370381
371382 g_assert_cmpuint (test_get_times_notified (test, "connection"), ==, 0);
372383 conn = tp_account_get_connection (test->account);
409420 g_assert_cmpuint (test_get_times_notified (test, "connection"), ==, 1);
410421 conn = tp_account_get_connection (test->account);
411422 g_assert (conn == NULL);
423
424 g_assert_cmpstr (tp_account_get_detailed_error (test->account, NULL), ==,
425 TP_ERROR_STR_ENCRYPTION_ERROR);
426
427 /* another connection */
428
429 test_set_up_account_notify (test);
430 tp_asv_set_object_path (change, "Connection", CONN1_PATH);
431 tp_asv_set_uint32 (change, "ConnectionStatus",
432 TP_CONNECTION_STATUS_CONNECTING);
433 tp_asv_set_uint32 (change, "ConnectionStatusReason",
434 TP_CONNECTION_STATUS_REASON_REQUESTED);
435 tp_svc_account_emit_account_property_changed (test->account_service, change);
436 g_hash_table_remove_all (change);
437
438 tp_tests_proxy_run_until_dbus_queue_processed (test->account);
439 g_assert_cmpuint (test_get_times_notified (test, "connection"), ==, 1);
440
441 /* lose the connection again */
442
443 test_set_up_account_notify (test);
444 tp_asv_set_object_path (change, "Connection", "/");
445 tp_asv_set_uint32 (change, "ConnectionStatus",
446 TP_CONNECTION_STATUS_DISCONNECTED);
447 tp_asv_set_uint32 (change, "ConnectionStatusReason",
448 TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR);
449 tp_asv_set_static_string (change, "ConnectionError",
450 "org.debian.packages.OpenSSL.NotRandomEnough");
451 tp_asv_take_boxed (change, "ConnectionErrorDetails",
452 TP_HASH_TYPE_STRING_VARIANT_MAP,
453 tp_asv_new (
454 "bits-of-entropy", G_TYPE_UINT, 15,
455 "debug-message", G_TYPE_STRING, "shiiiiii-",
456 NULL));
457 tp_svc_account_emit_account_property_changed (test->account_service, change);
458 g_hash_table_remove_all (change);
459
460 tp_tests_proxy_run_until_dbus_queue_processed (test->account);
461 g_assert_cmpuint (test_get_times_notified (test, "connection"), ==, 1);
462 g_assert_cmpuint (test_get_times_notified (test, "connection-error"), ==, 1);
463
464 g_assert_cmpstr (tp_account_get_detailed_error (test->account, &details), ==,
465 "org.debian.packages.OpenSSL.NotRandomEnough");
466 g_assert_cmpuint (tp_asv_size (details), >=, 2);
467 g_assert_cmpstr (tp_asv_get_string (details, "debug-message"), ==,
468 "shiiiiii-");
469 g_assert_cmpuint (tp_asv_get_uint32 (details, "bits-of-entropy", NULL), ==,
470 15);
412471
413472 /* staple on a Connection (this is intended for use in e.g. observers,
414473 * if they're told about a Connection that the Account hasn't told them
3131
3232 /* Service side objects */
3333 TpBaseClient *base_client;
34 SimpleClient *simple_client;
34 TpTestsSimpleClient *simple_client;
3535 TpBaseConnection *base_connection;
36 SimpleAccount *account_service;
37 TestTextChannelNull *text_chan_service;
38 TestTextChannelNull *text_chan_service_2;
39 SimpleChannelDispatchOperation *cdo_service;
36 TpTestsSimpleAccount *account_service;
37 TpTestsTextChannelNull *text_chan_service;
38 TpTestsTextChannelNull *text_chan_service_2;
39 TpTestsSimpleChannelDispatchOperation *cdo_service;
4040
4141 /* Client side objects */
4242 TpAccountManager *account_mgr;
6363 TpHandleRepoIface *contact_repo;
6464
6565 test->mainloop = g_main_loop_new (NULL, FALSE);
66 test->dbus = test_dbus_daemon_dup_or_die ();
66 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
6767
6868 test->error = NULL;
6969 test->interfaces = NULL;
7878 g_assert_no_error (test->error);
7979
8080 /* Create service-side Client object */
81 test->simple_client = simple_client_new (test->dbus, "Test", FALSE);
81 test->simple_client = tp_tests_simple_client_new (test->dbus, "Test", FALSE);
8282 g_assert (test->simple_client != NULL);
8383 test->base_client = TP_BASE_CLIENT (test->simple_client);
8484
8585 /* Create service-side Account object */
86 test->account_service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT,
87 NULL);
86 test->account_service = tp_tests_object_new_static_class (
87 TP_TESTS_TYPE_SIMPLE_ACCOUNT, NULL);
8888 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
8989 test->account_service);
9090
9191 /* Create client-side Client object */
92 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
92 test->client = tp_tests_object_new_static_class (TP_TYPE_CLIENT,
9393 "dbus-daemon", test->dbus,
9494 "bus-name", tp_base_client_get_bus_name (test->base_client),
9595 "object-path", tp_base_client_get_object_path (test->base_client),
104104 g_object_ref (test->account);
105105
106106 /* Create (service and client sides) connection objects */
107 test_create_and_connect_conn (SIMPLE_TYPE_CONNECTION, "me@test.com",
108 &test->base_connection, &test->connection);
107 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_SIMPLE_CONNECTION,
108 "me@test.com", &test->base_connection, &test->connection);
109109
110110 /* Create service-side text channel object */
111111 chan_path = g_strdup_printf ("%s/Channel",
118118 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
119119 g_assert_no_error (test->error);
120120
121 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
122 test_object_new_static_class (
123 TEST_TYPE_TEXT_CHANNEL_NULL,
121 test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
122 tp_tests_object_new_static_class (
123 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
124124 "connection", test->base_connection,
125125 "object-path", chan_path,
126126 "handle", handle,
141141 handle = tp_handle_ensure (contact_repo, "alice", NULL, &test->error);
142142 g_assert_no_error (test->error);
143143
144 test->text_chan_service_2 = TEST_TEXT_CHANNEL_NULL (
145 test_object_new_static_class (
146 TEST_TYPE_TEXT_CHANNEL_NULL,
144 test->text_chan_service_2 = TP_TESTS_TEXT_CHANNEL_NULL (
145 tp_tests_object_new_static_class (
146 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
147147 "connection", test->base_connection,
148148 "object-path", chan_path,
149149 "handle", handle,
158158 g_free (chan_path);
159159
160160 /* Create Service side ChannelDispatchOperation object */
161 test->cdo_service = test_object_new_static_class (
162 SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION,
161 test->cdo_service = tp_tests_object_new_static_class (
162 TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION,
163163 NULL);
164164 tp_dbus_daemon_register_object (test->dbus, CDO_PATH, test->cdo_service);
165165
166 simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
166 tp_tests_simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
167167 tp_proxy_get_object_path (test->connection));
168168
169 simple_channel_dispatch_operation_set_account_path (test->cdo_service,
170 tp_proxy_get_object_path (test->account));
171
172 simple_channel_dispatch_operation_add_channel (test->cdo_service,
169 tp_tests_simple_channel_dispatch_operation_set_account_path (
170 test->cdo_service, tp_proxy_get_object_path (test->account));
171
172 tp_tests_simple_channel_dispatch_operation_add_channel (test->cdo_service,
173173 test->text_chan);
174 simple_channel_dispatch_operation_add_channel (test->cdo_service,
174 tp_tests_simple_channel_dispatch_operation_add_channel (test->cdo_service,
175175 test->text_chan_2);
176176
177177 g_assert (tp_dbus_daemon_request_name (test->dbus,
306306
307307 /* unregister the client */
308308 tp_base_client_unregister (test->base_client);
309 test_proxy_run_until_dbus_queue_processed (test->client);
309 tp_tests_proxy_run_until_dbus_queue_processed (test->client);
310310
311311 tp_cli_dbus_properties_call_get_all (test->client, -1,
312312 TP_IFACE_CLIENT, get_client_prop_cb, test, NULL, NULL);
522522 channels, "/", requests_satisified, info,
523523 no_return_cb, test, NULL, NULL);
524524
525 test_text_channel_null_close (test->text_chan_service);
525 tp_tests_text_channel_null_close (test->text_chan_service);
526526
527527 g_main_loop_run (test->mainloop);
528528 g_assert_no_error (test->error);
664664 channels, CDO_PATH, properties,
665665 no_return_cb, test, NULL, NULL);
666666
667 test_text_channel_null_close (test->text_chan_service_2);
667 tp_tests_text_channel_null_close (test->text_chan_service_2);
668668
669669 g_object_unref (test->text_chan_service_2);
670670 test->text_chan_service_2 = NULL;
671671
672 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
672 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
673673 test->text_chan_2);
674674
675675 g_main_loop_run (test->mainloop);
690690 channels, CDO_PATH, properties,
691691 no_return_cb, test, NULL, NULL);
692692
693 test_text_channel_null_close (test->text_chan_service);
693 tp_tests_text_channel_null_close (test->text_chan_service);
694694 g_object_unref (test->text_chan_service);
695695 test->text_chan_service = NULL;
696696
697 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
697 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
698698 test->text_chan);
699699
700700 g_main_loop_run (test->mainloop);
773773 GPtrArray *requests_satisified;
774774 GHashTable *info;
775775 GList *chans;
776 SimpleClient *client_2;
776 TpTestsSimpleClient *client_2;
777777
778778 filter = tp_asv_new (
779779 TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
845845 /* One of the channel is closed */
846846 g_signal_connect (test->text_chan, "invalidated",
847847 G_CALLBACK (channel_invalidated_cb), test);
848 test_text_channel_null_close (test->text_chan_service);
848 tp_tests_text_channel_null_close (test->text_chan_service);
849849 g_main_loop_run (test->mainloop);
850850
851851 chans = tp_base_client_get_handled_channels (test->base_client);
853853 g_list_free (chans);
854854
855855 /* Create another client sharing the same unique name */
856 client_2 = simple_client_new (test->dbus, "Test", TRUE);
856 client_2 = tp_tests_simple_client_new (test->dbus, "Test", TRUE);
857857 tp_base_client_be_a_handler (TP_BASE_CLIENT (client_2));
858858 tp_base_client_register (TP_BASE_CLIENT (client_2), &test->error);
859859 g_assert_no_error (test->error);
183183 /* We use TpDBusDaemon because it's a convenient concrete subclass of
184184 * TpProxy. */
185185 g_message ("Creating proxies");
186 a = test_dbus_daemon_dup_or_die ();
186 a = tp_tests_dbus_daemon_dup_or_die ();
187187 g_message ("a=%p", a);
188188 b = tp_dbus_daemon_new (tp_proxy_get_dbus_connection (a));
189189 g_message ("b=%p", b);
218218
219219 /* b gets its pending call cancelled because the weak object is
220220 * destroyed */
221 b_stub = test_object_new_static_class (stub_object_get_type (), NULL);
221 b_stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
222 NULL);
222223 g_message ("Starting call on b");
223224 tp_cli_dbus_daemon_call_list_names (b, -1, listed_names, PTR (TEST_B),
224225 destroy_user_data, b_stub);
329330 * *and* there is a signal connection
330331 * (used to reproduce fd.o #14750 - see case h in test-disconnection.c
331332 * for the minimal regression test) */
332 i_stub = test_object_new_static_class (stub_object_get_type (), NULL);
333 i_stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
334 NULL);
333335 tp_cli_dbus_daemon_connect_to_name_owner_changed (i, noc, PTR (TEST_I),
334336 NULL, i_stub, NULL);
335337 g_message ("Starting call on i");
353355
354356 /* j gets its pending call cancelled explicitly, and j_stub is
355357 * destroyed in response (related to fd.o #14750) */
356 j_stub = test_object_new_static_class (stub_object_get_type (), NULL);
358 j_stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
359 NULL);
357360 g_object_weak_ref (j_stub, j_stub_destroyed, PTR (TEST_J));
358361 g_message ("Starting call on j");
359362 pc = tp_cli_dbus_daemon_call_list_names (j, -1, listed_names, j_stub,
368371 * is destroyed, meaning there are simultaneously two reasons for it
369372 * to become cancelled (equivalent to fd.o#14750, but for pending calls
370373 * rather than signal connections) */
371 k_stub = test_object_new_static_class (stub_object_get_type (), NULL);
374 k_stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
375 NULL);
372376 g_message ("Starting call on k");
373377 g_object_weak_ref (k_stub, k_stub_destroyed, &pc);
374378 tp_cli_dbus_daemon_call_list_names (k, -1, listed_names, PTR (TEST_K),
2727
2828 #include "tests/lib/util.h"
2929
30 #define CLEAR_OBJECT(o) \
31 G_STMT_START { \
32 if (*(o) != NULL) \
33 { \
34 g_object_unref (*(o)); \
35 *(o) = NULL; \
36 } \
37 } G_STMT_END
38
39 #define CLEAR_BOXED(g, o) \
40 G_STMT_START { \
41 if (*(o) != NULL) \
42 { \
43 g_boxed_free ((g), *(o)); \
44 *(o) = NULL; \
45 } \
46 } G_STMT_END
47
48 #define CLEAR_HASH(h) \
49 G_STMT_START { \
50 if (*(h) != NULL) \
51 { \
52 g_hash_table_unref (*(h)); \
53 *(h) = NULL; \
54 } \
55 } G_STMT_END
56
5730 /* FIXME: if this isn't needed for Senders, remove it */
5831 G_GNUC_UNUSED static void
5932 test_assert_uu_hash_contains (GHashTable *hash,
11588 guint audio = TP_MEDIA_STREAM_TYPE_AUDIO;
11689 guint video = TP_MEDIA_STREAM_TYPE_VIDEO;
11790 guint not_a_media_type = 31337;
91 GQuark conn_features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
11892
11993 g_type_init ();
12094 tp_debug_set_flags ("all");
12195
12296 test->mainloop = g_main_loop_new (NULL, FALSE);
123 test->dbus = test_dbus_daemon_dup_or_die ();
124
125 test->service_cm = EXAMPLE_CALL_CONNECTION_MANAGER (test_object_new_static_class (
97 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
98
99 test->service_cm = EXAMPLE_CALL_CONNECTION_MANAGER (
100 tp_tests_object_new_static_class (
126101 EXAMPLE_TYPE_CALL_CONNECTION_MANAGER,
127102 NULL));
128103 g_assert (test->service_cm != NULL);
135110 test->cm = tp_connection_manager_new (test->dbus, "example_call",
136111 NULL, &test->error);
137112 g_assert (test->cm != NULL);
138 test_connection_manager_run_until_ready (test->cm);
113 tp_tests_proxy_run_until_prepared (test->cm, NULL);
139114
140115 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
141116 (GDestroyNotify) tp_g_value_slice_free);
146121
147122 tp_cli_connection_manager_run_request_connection (test->cm, -1,
148123 "example", parameters, &bus_name, &object_path, &test->error, NULL);
149 test_assert_no_error (test->error);
124 g_assert_no_error (test->error);
150125
151126 test->conn = tp_connection_new (test->dbus, bus_name, object_path,
152127 &test->error);
153 test_assert_no_error (test->error);
128 g_assert_no_error (test->error);
154129 g_assert (test->conn != NULL);
155130 tp_cli_connection_call_connect (test->conn, -1, NULL, NULL, NULL, NULL);
156 test_connection_run_until_ready (test->conn);
131 tp_tests_proxy_run_until_prepared (test->conn, conn_features);
157132
158133 test->self_handle = tp_connection_get_self_handle (test->conn);
159134 g_assert (test->self_handle != 0);
185160 Test *test = user_data;
186161 GError *new_error = NULL;
187162
188 test_assert_no_error (error);
163 g_assert_no_error ((GError *) error);
189164
190165 test->chan = tp_channel_new_from_properties (connection, object_path,
191166 immutable_properties, &new_error);
192 test_assert_no_error (new_error);
167 g_assert_no_error (new_error);
193168
194169 test->peer_handle = tp_channel_get_handle (test->chan, NULL);
195170
203178 {
204179 Test *test = user_data;
205180
206 test_assert_no_error (error);
181 g_assert_no_error ((GError *) error);
207182 g_main_loop_quit (test->mainloop);
208183 }
209184
216191 {
217192 Test *test = user_data;
218193
219 CLEAR_OBJECT (&test->added_content);
194 tp_clear_object (&test->added_content);
220195
221196 if (error != NULL)
222197 {
241216 {
242217 Test *test = user_data;
243218
244 test_assert_no_error (error);
245
246 CLEAR_HASH (&test->get_all_return);
219 g_assert_no_error ((GError *) error);
220
221 tp_clear_pointer (&test->get_all_return, g_hash_table_unref);
247222 test->get_all_return = g_hash_table_new_full (g_str_hash, g_str_equal,
248223 g_free, (GDestroyNotify) tp_g_value_slice_free);
249224 tp_g_hash_table_update (test->get_all_return, properties,
261236 {
262237 Test *test = user_data;
263238
264 test_assert_no_error (error);
265
266 CLEAR_BOXED (TP_ARRAY_TYPE_OBJECT_PATH_LIST, &test->get_contents_return);
239 g_assert_no_error ((GError *) error);
240
241 tp_clear_boxed (TP_ARRAY_TYPE_OBJECT_PATH_LIST, &test->get_contents_return);
267242 g_assert (G_VALUE_HOLDS (value, TP_ARRAY_TYPE_OBJECT_PATH_LIST));
268243 test->get_contents_return = g_value_dup_boxed (value);
269244
279254 {
280255 Test *test = user_data;
281256
282 CLEAR_HASH (&test->get_senders_return);
257 tp_clear_pointer (&test->get_senders_return, g_hash_table_unref);
283258
284259 if (test->error != NULL)
285260 g_clear_error (&test->error);
286261
287 test_assert_no_error (error);
262 g_assert_no_error ((GError *) error);
288263
289264 g_assert (G_VALUE_HOLDS (value, FUTURE_HASH_TYPE_CONTACT_SENDING_STATE_MAP));
290265 test->get_senders_return = g_value_dup_boxed (value);
428403 tp_cli_dbus_properties_call_get_all (test->chan, -1,
429404 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
430405 g_main_loop_run (test->mainloop);
431 test_assert_no_error (test->error);
406 g_assert_no_error (test->error);
432407
433408 if (tp_asv_get_uint32 (test->get_all_return, "CallState",
434409 NULL) == FUTURE_CALL_STATE_ENDED)
444419 tp_cli_dbus_properties_call_get_all (test->chan, -1,
445420 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
446421 g_main_loop_run (test->mainloop);
447 test_assert_no_error (test->error);
422 g_assert_no_error (test->error);
448423
449424 if (tp_asv_get_uint32 (test->get_all_return, "CallState",
450425 NULL) != FUTURE_CALL_STATE_PENDING_RECEIVER)
462437 tp_cli_dbus_properties_call_get_all (test->chan, -1,
463438 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
464439 g_main_loop_run (test->mainloop);
465 test_assert_no_error (test->error);
440 g_assert_no_error (test->error);
466441 assert_call_properties (test->get_all_return,
467442 FUTURE_CALL_STATE_ENDED,
468443 expected_actor,
476451 FUTURE_IFACE_CHANNEL_TYPE_CALL, "Contents",
477452 got_contents_cb, test, NULL, NULL);
478453 g_main_loop_run (test->mainloop);
479 test_assert_no_error (test->error);
454 g_assert_no_error (test->error);
480455 g_assert_cmpuint (test->get_contents_return->len, ==, 0);
481456
482457 /* ... but the channel doesn't close */
483 test_connection_run_until_dbus_queue_processed (test->conn);
458 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
484459 g_assert (tp_proxy_get_invalidated (test->chan) == NULL);
485460
486461 /* When we call Close it finally closes */
487462 tp_cli_channel_call_close (test->chan, -1, void_cb, test, NULL, NULL);
488463 g_main_loop_run (test->mainloop);
489 test_assert_no_error (test->error);
490 test_connection_run_until_dbus_queue_processed (test->conn);
464 g_assert_no_error (test->error);
465 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
491466 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
492467 }
493468
504479 tp_cli_dbus_properties_call_get_all (test->chan, -1,
505480 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
506481 g_main_loop_run (test->mainloop);
507 test_assert_no_error (test->error);
482 g_assert_no_error (test->error);
508483
509484 assert_call_properties (test->get_all_return,
510485 FUTURE_CALL_STATE_PENDING_INITIATOR, 0,
518493 FUTURE_IFACE_CHANNEL_TYPE_CALL, "Contents",
519494 got_contents_cb, test, NULL, NULL);
520495 g_main_loop_run (test->mainloop);
521 test_assert_no_error (test->error);
496 g_assert_no_error (test->error);
522497
523498 g_assert_cmpuint (test->get_contents_return->len, ==, 1);
524499
530505 tp_cli_dbus_properties_call_get_all (test->audio_content, -1,
531506 FUTURE_IFACE_CALL_CONTENT, got_all_cb, test, NULL, NULL);
532507 g_main_loop_run (test->mainloop);
533 test_assert_no_error (test->error);
508 g_assert_no_error (test->error);
534509 assert_content_properties (test->get_all_return,
535510 TP_MEDIA_STREAM_TYPE_AUDIO, test->self_handle,
536511 FUTURE_CALL_CONTENT_DISPOSITION_INITIAL);
549524 FUTURE_IFACE_CALL_STREAM, "Senders", got_senders_cb, test, NULL, NULL);
550525 g_main_loop_run (test->mainloop);
551526
552 test_assert_no_error (test->error);
527 g_assert_no_error (test->error);
553528
554529 g_assert_cmpuint (g_hash_table_size (test->get_senders_return), ==, 2);
555530 g_assert (!g_hash_table_lookup_extended (test->get_senders_return,
567542 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
568543 test, NULL, NULL);
569544 g_main_loop_run (test->mainloop);
570 test_assert_no_error (test->error);
545 g_assert_no_error (test->error);
571546
572547 /* Calling Accept again makes no sense, but mustn't crash */
573548 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
592567 tp_cli_dbus_properties_call_get_all (test->chan, -1,
593568 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
594569 g_main_loop_run (test->mainloop);
595 test_assert_no_error (test->error);
570 g_assert_no_error (test->error);
596571
597572 assert_call_properties (test->get_all_return,
598573 FUTURE_CALL_STATE_ACCEPTED, tp_channel_get_handle (test->chan, NULL),
601576 FALSE, FALSE, FALSE); /* don't care about initial audio/video */
602577
603578 /* There's still one content */
604 CLEAR_BOXED (TP_ARRAY_TYPE_OBJECT_PATH_LIST, &test->get_contents_return);
579 tp_clear_boxed (TP_ARRAY_TYPE_OBJECT_PATH_LIST, &test->get_contents_return);
605580 test->get_contents_return = g_boxed_copy (TP_ARRAY_TYPE_OBJECT_PATH_LIST,
606581 tp_asv_get_boxed (test->get_all_return,
607582 "Contents", TP_ARRAY_TYPE_OBJECT_PATH_LIST));
610585 ==, tp_proxy_get_object_path (test->audio_content));
611586
612587 /* Other contact is sending now */
613 CLEAR_HASH (&test->get_senders_return);
588 tp_clear_pointer (&test->get_senders_return, g_hash_table_unref);
614589 tp_cli_dbus_properties_call_get (test->audio_stream, -1,
615590 FUTURE_IFACE_CALL_STREAM, "Senders", got_senders_cb, test, NULL, NULL);
616591 g_main_loop_run (test->mainloop);
617 test_assert_no_error (test->error);
592 g_assert_no_error (test->error);
618593
619594 g_assert_cmpuint (g_hash_table_size (test->get_senders_return), ==, 2);
620595 g_assert (!g_hash_table_lookup_extended (test->get_senders_return,
641616 "", TP_MEDIA_STREAM_TYPE_VIDEO, added_content_cb,
642617 test, NULL, NULL);
643618 g_main_loop_run (test->mainloop);
644 test_assert_no_error (test->error);
619 g_assert_no_error (test->error);
645620
646621 g_assert (test->added_content != NULL);
647 CLEAR_OBJECT (&test->video_content);
622 tp_clear_object (&test->video_content);
648623 test->video_content = g_object_ref (test->added_content);
649624
650625 /* There are two Contents, because now we have the video content too */
653628 FUTURE_IFACE_CHANNEL_TYPE_CALL, "Contents",
654629 got_contents_cb, test, NULL, NULL);
655630 g_main_loop_run (test->mainloop);
656 test_assert_no_error (test->error);
631 g_assert_no_error (test->error);
657632
658633 g_assert_cmpuint (test->get_contents_return->len, ==, 2);
659634
675650 tp_cli_dbus_properties_call_get_all (test->video_content, -1,
676651 FUTURE_IFACE_CALL_CONTENT, got_all_cb, test, NULL, NULL);
677652 g_main_loop_run (test->mainloop);
678 test_assert_no_error (test->error);
653 g_assert_no_error (test->error);
679654 assert_content_properties (test->get_all_return,
680655 TP_MEDIA_STREAM_TYPE_VIDEO, test->self_handle,
681656 FUTURE_CALL_CONTENT_DISPOSITION_NONE);
693668 tp_cli_dbus_properties_call_get (test->video_stream, -1,
694669 FUTURE_IFACE_CALL_STREAM, "Senders", got_senders_cb, test, NULL, NULL);
695670 g_main_loop_run (test->mainloop);
696 test_assert_no_error (test->error);
671 g_assert_no_error (test->error);
697672
698673 g_assert_cmpuint (g_hash_table_size (test->get_senders_return), ==, 2);
699674 g_assert (!g_hash_table_lookup_extended (test->get_senders_return,
735710 test->stream_ids,
736711 void_cb, test, NULL, NULL);
737712 g_main_loop_run (test->mainloop);
738 test_assert_no_error (test->error);
713 g_assert_no_error (test->error);
739714
740715 /* Get contents again: now there's only the audio */
741716
743718 FUTURE_IFACE_CHANNEL_TYPE_CALL, "Contents",
744719 got_contents_cb, test, NULL, NULL);
745720 g_main_loop_run (test->mainloop);
746 test_assert_no_error (test->error);
721 g_assert_no_error (test->error);
747722
748723 g_assert_cmpuint (test->get_contents_return->len, ==, 1);
749724 g_assert_cmpstr (g_ptr_array_index (test->get_contents_return, 0), ==,
756731 -1, FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "",
757732 void_cb, test, NULL, NULL);
758733 g_main_loop_run (test->mainloop);
759 test_assert_no_error (test->error);
734 g_assert_no_error (test->error);
760735 assert_ended_and_run_close (test, test->self_handle,
761736 FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
762737 "");
780755 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
781756 test, NULL, NULL);
782757 g_main_loop_run (test->mainloop);
783 test_assert_no_error (test->error);
758 g_assert_no_error (test->error);
784759
785760 /* After the initial flurry of D-Bus messages, smcv still hasn't answered */
786 test_connection_run_until_dbus_queue_processed (test->conn);
761 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
787762
788763 tp_cli_dbus_properties_call_get_all (test->chan, -1,
789764 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
790765 g_main_loop_run (test->mainloop);
791 test_assert_no_error (test->error);
766 g_assert_no_error (test->error);
792767
793768 assert_call_properties (test->get_all_return,
794769 FUTURE_CALL_STATE_PENDING_RECEIVER, test->self_handle,
801776 -1, FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "",
802777 void_cb, test, NULL, NULL);
803778 g_main_loop_run (test->mainloop);
804 test_assert_no_error (test->error);
779 g_assert_no_error (test->error);
805780
806781 assert_ended_and_run_close (test, test->self_handle,
807782 FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
819794 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
820795 test, NULL, NULL);
821796 g_main_loop_run (test->mainloop);
822 test_assert_no_error (test->error);
797 g_assert_no_error (test->error);
823798
824799 /* Wait for the remote contact to end the call as busy */
825800 loop_until_ended (test);
839814 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
840815 test, NULL, NULL);
841816 g_main_loop_run (test->mainloop);
842 test_assert_no_error (test->error);
817 g_assert_no_error (test->error);
843818
844819 /* Wait for the remote contact to answer, if they haven't already */
845820
861836 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
862837 test, NULL, NULL);
863838 g_main_loop_run (test->mainloop);
864 test_assert_no_error (test->error);
839 g_assert_no_error (test->error);
865840
866841 /* Wait for the remote contact to answer, if they haven't already */
867842
870845 tp_cli_dbus_properties_call_get_all (test->chan, -1,
871846 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
872847 g_main_loop_run (test->mainloop);
873 test_assert_no_error (test->error);
848 g_assert_no_error (test->error);
874849
875850 assert_call_properties (test->get_all_return,
876851 FUTURE_CALL_STATE_ACCEPTED, test->peer_handle,
884859
885860 tp_cli_channel_call_close (test->chan, -1, void_cb, test, NULL, NULL);
886861 g_main_loop_run (test->mainloop);
887 test_assert_no_error (test->error);
862 g_assert_no_error (test->error);
888863
889864 /* In response to termination, the channel does genuinely close */
890 test_connection_run_until_dbus_queue_processed (test->conn);
865 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
891866 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
892867
893868 /* FIXME: when we hook up signals, check for expected call state
939914 /* save the channel */
940915 test->chan = tp_channel_new_from_properties (conn, object_path,
941916 properties, &test->error);
942 test_assert_no_error (test->error);
917 g_assert_no_error (test->error);
943918 }
944919 }
945920
954929
955930 tp_cli_connection_interface_simple_presence_run_set_presence (test->conn, -1,
956931 "away", "preparing for a test", &test->error, NULL);
957 test_assert_no_error (test->error);
932 g_assert_no_error (test->error);
958933
959934 new_channels_sig =
960935 tp_cli_connection_interface_requests_connect_to_new_channels (test->conn,
961936 expect_incoming_call_cb, test, NULL, NULL, &test->error);
962 test_assert_no_error (test->error);
937 g_assert_no_error (test->error);
963938
964939 tp_cli_connection_interface_simple_presence_run_set_presence (test->conn, -1,
965940 "available", message, &test->error, NULL);
966 test_assert_no_error (test->error);
941 g_assert_no_error (test->error);
967942
968943 /* wait for the call to happen if it hasn't already */
969944 while (test->chan == NULL)
992967 tp_cli_dbus_properties_call_get_all (test->chan, -1,
993968 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
994969 g_main_loop_run (test->mainloop);
995 test_assert_no_error (test->error);
970 g_assert_no_error (test->error);
996971 assert_call_properties (test->get_all_return,
997972 FUTURE_CALL_STATE_PENDING_RECEIVER, test->peer_handle,
998973 FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "",
1005980 FUTURE_IFACE_CHANNEL_TYPE_CALL, "Contents",
1006981 got_contents_cb, test, NULL, NULL);
1007982 g_main_loop_run (test->mainloop);
1008 test_assert_no_error (test->error);
983 g_assert_no_error (test->error);
1009984
1010985 g_assert_cmpuint (test->get_contents_return->len, ==, 1);
1011986
1015990 future_cli_channel_type_call_call_accept (test->chan, -1, void_cb,
1016991 test, NULL, NULL);
1017992 g_main_loop_run (test->mainloop);
1018 test_assert_no_error (test->error);
993 g_assert_no_error (test->error);
1019994
1020995 tp_cli_dbus_properties_call_get_all (test->chan, -1,
1021996 FUTURE_IFACE_CHANNEL_TYPE_CALL, got_all_cb, test, NULL, NULL);
1022997 g_main_loop_run (test->mainloop);
1023 test_assert_no_error (test->error);
998 g_assert_no_error (test->error);
1024999 assert_call_properties (test->get_all_return,
10251000 FUTURE_CALL_STATE_ACCEPTED, test->self_handle,
10261001 FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "",
10341009 -1, FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", "",
10351010 void_cb, test, NULL, NULL);
10361011 g_main_loop_run (test->mainloop);
1037 test_assert_no_error (test->error);
1012 g_assert_no_error (test->error);
10381013
10391014 assert_ended_and_run_close (test, test->self_handle,
10401015 FUTURE_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "");
10451020 gconstpointer data G_GNUC_UNUSED)
10461021 {
10471022 tp_cli_connection_run_disconnect (test->conn, -1, &test->error, NULL);
1048 test_assert_no_error (test->error);
1023 g_assert_no_error (test->error);
10491024
10501025 if (test->members_changed_detailed_id != 0)
10511026 {
10571032 g_array_free (test->video_request, TRUE);
10581033 g_array_free (test->invalid_request, TRUE);
10591034 g_array_free (test->stream_ids, TRUE);
1060 CLEAR_HASH (&test->get_all_return);
1061
1062 CLEAR_BOXED (TP_ARRAY_TYPE_OBJECT_PATH_LIST,
1063 &test->get_contents_return);
1064 CLEAR_HASH (&test->get_senders_return);
1065
1066 CLEAR_OBJECT (&test->audio_stream);
1067 CLEAR_OBJECT (&test->video_stream);
1068 CLEAR_OBJECT (&test->added_content);
1069 CLEAR_OBJECT (&test->audio_content);
1070 CLEAR_OBJECT (&test->video_content);
1071 CLEAR_OBJECT (&test->chan);
1072 CLEAR_OBJECT (&test->conn);
1073 CLEAR_OBJECT (&test->cm);
1074
1075 CLEAR_OBJECT (&test->service_cm);
1035 tp_clear_pointer (&test->get_all_return, g_hash_table_unref);
1036
1037 tp_clear_boxed (TP_ARRAY_TYPE_OBJECT_PATH_LIST, &test->get_contents_return);
1038 tp_clear_pointer (&test->get_senders_return, g_hash_table_unref);
1039
1040 tp_clear_object (&test->audio_stream);
1041 tp_clear_object (&test->video_stream);
1042 tp_clear_object (&test->added_content);
1043 tp_clear_object (&test->audio_content);
1044 tp_clear_object (&test->video_content);
1045 tp_clear_object (&test->chan);
1046 tp_clear_object (&test->conn);
1047 tp_clear_object (&test->cm);
1048
1049 tp_clear_object (&test->service_cm);
10761050
10771051 /* make sure any pending things have happened */
1078 test_proxy_run_until_dbus_queue_processed (test->dbus);
1079
1080 CLEAR_OBJECT (&test->dbus);
1052 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
1053
1054 tp_clear_object (&test->dbus);
10811055 g_main_loop_unref (test->mainloop);
10821056 test->mainloop = NULL;
10831057 }
3131
3232 #include "tests/lib/util.h"
3333
34 #define CLEAR_OBJECT(o) \
35 G_STMT_START { \
36 if (*(o) != NULL) \
37 { \
38 g_object_unref (*(o)); \
39 *(o) = NULL; \
40 } \
41 } G_STMT_END
42
43 #define CLEAR_BOXED(g, o) \
44 G_STMT_START { \
45 if (*(o) != NULL) \
46 { \
47 g_boxed_free ((g), *(o)); \
48 *(o) = NULL; \
49 } \
50 } G_STMT_END
51
5234 static void
5335 test_assert_uu_hash_contains (GHashTable *hash,
5436 guint key,
225207 guint audio = TP_MEDIA_STREAM_TYPE_AUDIO;
226208 guint video = TP_MEDIA_STREAM_TYPE_VIDEO;
227209 guint not_a_media_type = 31337;
210 GQuark conn_features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
228211
229212 g_type_init ();
230213 tp_debug_set_flags ("all");
237220 test->stream_states = g_hash_table_new (NULL, NULL);
238221
239222 test->mainloop = g_main_loop_new (NULL, FALSE);
240 test->dbus = test_dbus_daemon_dup_or_die ();
241
242 test->service_cm = EXAMPLE_CALLABLE_CONNECTION_MANAGER (test_object_new_static_class (
223 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
224
225 test->service_cm = EXAMPLE_CALLABLE_CONNECTION_MANAGER (
226 tp_tests_object_new_static_class (
243227 EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER,
244228 NULL));
245229 g_assert (test->service_cm != NULL);
252236 test->cm = tp_connection_manager_new (test->dbus, "example_callable",
253237 NULL, &test->error);
254238 g_assert (test->cm != NULL);
255 test_connection_manager_run_until_ready (test->cm);
239 tp_tests_proxy_run_until_prepared (test->cm, NULL);
256240
257241 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
258242 (GDestroyNotify) tp_g_value_slice_free);
263247
264248 tp_cli_connection_manager_run_request_connection (test->cm, -1,
265249 "example", parameters, &bus_name, &object_path, &test->error, NULL);
266 test_assert_no_error (test->error);
250 g_assert_no_error (test->error);
267251
268252 test->conn = tp_connection_new (test->dbus, bus_name, object_path,
269253 &test->error);
270 test_assert_no_error (test->error);
254 g_assert_no_error (test->error);
271255 g_assert (test->conn != NULL);
272256 tp_cli_connection_call_connect (test->conn, -1, NULL, NULL, NULL, NULL);
273 test_connection_run_until_ready (test->conn);
257 tp_tests_proxy_run_until_prepared (test->conn, conn_features);
274258
275259 test->self_handle = tp_connection_get_self_handle (test->conn);
276260 g_assert (test->self_handle != 0);
303287 Test *test = user_data;
304288 GError *new_error = NULL;
305289
306 test_assert_no_error (error);
290 g_assert_no_error ((GError *) error);
307291
308292 test->chan = tp_channel_new_from_properties (connection, object_path,
309293 immutable_properties, &new_error);
310 test_assert_no_error (new_error);
294 g_assert_no_error (new_error);
311295
312296 g_main_loop_quit (test->mainloop);
313297 }
319303 {
320304 Test *test = user_data;
321305
322 test_assert_no_error (error);
306 g_assert_no_error ((GError *) error);
323307 g_main_loop_quit (test->mainloop);
324308 }
325309
332316 {
333317 Test *test = user_data;
334318
335 CLEAR_BOXED (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
319 tp_clear_boxed (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
336320 &test->request_streams_return);
337321
338322 if (error != NULL)
358342 Test *test = user_data;
359343
360344 /* ListStreams shouldn't fail in any of these tests */
361 test_assert_no_error (error);
362
363 CLEAR_BOXED (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
345 g_assert_no_error ((GError *) error);
346
347 tp_clear_boxed (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
364348 &test->list_streams_return);
365349
366350 test->list_streams_return = g_boxed_copy (
611595 tp_cli_channel_type_streamed_media_call_list_streams (test->chan, -1,
612596 listed_streams_cb, test, NULL, NULL);
613597 g_main_loop_run (test->mainloop);
614 test_assert_no_error (test->error);
598 g_assert_no_error (test->error);
615599
616600 g_assert_cmpuint (test->list_streams_return->len, ==, 0);
617601
642626 test->audio_request, requested_streams_cb,
643627 test, NULL, NULL);
644628 g_main_loop_run (test->mainloop);
645 test_assert_no_error (test->error);
629 g_assert_no_error (test->error);
646630
647631 g_assert_cmpuint (test->request_streams_return->len, ==, 1);
648632 audio_info = g_ptr_array_index (test->request_streams_return, 0);
674658 tp_cli_channel_type_streamed_media_call_list_streams (test->chan, -1,
675659 listed_streams_cb, test, NULL, NULL);
676660 g_main_loop_run (test->mainloop);
677 test_assert_no_error (test->error);
661 g_assert_no_error (test->error);
678662
679663 g_assert_cmpuint (test->list_streams_return->len, ==, 1);
680664 audio_info = g_ptr_array_index (test->list_streams_return, 0);
770754
771755 /* Immediately the call is accepted, the remote peer accepts our proposed
772756 * stream direction */
773 test_connection_run_until_dbus_queue_processed (test->conn);
757 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
774758
775759 se = g_slist_nth_data (test->stream_events, 0);
776760 g_assert_cmpuint (se->type, ==, STREAM_EVENT_DIRECTION_CHANGED);
803787 test->video_request, requested_streams_cb,
804788 test, NULL, NULL);
805789 g_main_loop_run (test->mainloop);
806 test_assert_no_error (test->error);
790 g_assert_no_error (test->error);
807791
808792 g_assert_cmpuint (test->request_streams_return->len, ==, 1);
809793
834818 tp_cli_channel_type_streamed_media_call_list_streams (test->chan, -1,
835819 listed_streams_cb, test, NULL, NULL);
836820 g_main_loop_run (test->mainloop);
837 test_assert_no_error (test->error);
821 g_assert_no_error (test->error);
838822
839823 g_assert_cmpuint (test->list_streams_return->len, ==, 2);
840824
911895 test->stream_ids,
912896 void_cb, test, NULL, NULL);
913897 g_main_loop_run (test->mainloop);
914 test_assert_no_error (test->error);
898 g_assert_no_error (test->error);
915899
916900 /* List streams again: now there's only the audio */
917901
918902 tp_cli_channel_type_streamed_media_call_list_streams (test->chan, -1,
919903 listed_streams_cb, test, NULL, NULL);
920904 g_main_loop_run (test->mainloop);
921 test_assert_no_error (test->error);
905 g_assert_no_error (test->error);
922906
923907 g_assert_cmpuint (test->list_streams_return->len, ==, 1);
924908 audio_info = g_ptr_array_index (test->list_streams_return, 0);
950934 -1, test->contacts, "", TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
951935 void_cb, test, NULL, NULL);
952936 g_main_loop_run (test->mainloop);
953 test_assert_no_error (test->error);
937 g_assert_no_error (test->error);
954938
955939 /* In response to hanging up, the channel closes */
956 test_connection_run_until_dbus_queue_processed (test->conn);
940 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
957941 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
958942
959943 /* The last event should be that the peer and the self-handle were both
1005989 test->audio_request, requested_streams_cb,
1006990 test, NULL, NULL);
1007991 g_main_loop_run (test->mainloop);
1008 test_assert_no_error (test->error);
1009
1010 test_connection_run_until_dbus_queue_processed (test->conn);
992 g_assert_no_error (test->error);
993
994 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
1011995
1012996 maybe_pop_stream_direction (test);
1013997 g_assert_cmpuint (g_slist_length (test->stream_events), ==, 1);
10391023 -1, test->contacts, "", TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
10401024 void_cb, test, NULL, NULL);
10411025 g_main_loop_run (test->mainloop);
1042 test_assert_no_error (test->error);
1026 g_assert_no_error (test->error);
10431027
10441028 /* In response to hanging up, the channel closes */
1045 test_connection_run_until_dbus_queue_processed (test->conn);
1029 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
10461030 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
10471031
10481032 /* The last event should be that the peer and the self-handle were both
10801064 test->audio_request, requested_streams_cb,
10811065 test, NULL, NULL);
10821066 g_main_loop_run (test->mainloop);
1083 test_assert_no_error (test->error);
1067 g_assert_no_error (test->error);
10841068
10851069 /* Wait for the remote contact to reject the call */
10861070 while (tp_proxy_get_invalidated (test->chan) != NULL)
10901074
10911075 /* The last stream event should be the removal of the stream */
10921076
1093 test_connection_run_until_dbus_queue_processed (test->conn);
1077 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
10941078
10951079 se = g_slist_nth_data (test->stream_events, 0);
10961080 g_assert_cmpuint (se->type, ==, STREAM_EVENT_REMOVED);
11301114 test->audio_request, requested_streams_cb,
11311115 test, NULL, NULL);
11321116 g_main_loop_run (test->mainloop);
1133 test_assert_no_error (test->error);
1117 g_assert_no_error (test->error);
11341118
11351119 /* Wait for the remote contact to answer, if they haven't already */
11361120
11461130
11471131 /* The last stream event should be the removal of the stream */
11481132
1149 test_connection_run_until_dbus_queue_processed (test->conn);
1133 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
11501134
11511135 se = g_slist_nth_data (test->stream_events, 0);
11521136 g_assert_cmpuint (se->type, ==, STREAM_EVENT_REMOVED);
11841168 test->audio_request, requested_streams_cb,
11851169 test, NULL, NULL);
11861170 g_main_loop_run (test->mainloop);
1187 test_assert_no_error (test->error);
1188
1189 test_connection_run_until_dbus_queue_processed (test->conn);
1171 g_assert_no_error (test->error);
1172
1173 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
11901174
11911175 maybe_pop_stream_direction (test);
11921176 g_assert_cmpuint (g_slist_length (test->stream_events), ==, 1);
12041188
12051189 tp_cli_channel_call_close (test->chan, -1, void_cb, test, NULL, NULL);
12061190 g_main_loop_run (test->mainloop);
1207 test_assert_no_error (test->error);
1191 g_assert_no_error (test->error);
12081192
12091193 /* In response to hanging up, the channel closes */
1210 test_connection_run_until_dbus_queue_processed (test->conn);
1194 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
12111195 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
12121196
12131197 /* The last event should be that the peer and the self-handle were both
12501234 test->audio_request, requested_streams_cb,
12511235 test, NULL, NULL);
12521236 g_main_loop_run (test->mainloop);
1253 test_assert_no_error (test->error);
1254
1255 test_connection_run_until_dbus_queue_processed (test->conn);
1237 g_assert_no_error (test->error);
1238
1239 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
12561240
12571241 maybe_pop_stream_direction (test);
12581242 g_assert_cmpuint (g_slist_length (test->stream_events), ==, 1);
12741258 test->stream_ids,
12751259 void_cb, test, NULL, NULL);
12761260 g_main_loop_run (test->mainloop);
1277 test_assert_no_error (test->error);
1261 g_assert_no_error (test->error);
12781262
12791263 /* In response to hanging up, the channel closes */
1280 test_connection_run_until_dbus_queue_processed (test->conn);
1264 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
12811265 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
12821266
12831267 /* The last event should be that the peer and the self-handle were both
13431327 /* save the channel */
13441328 test->chan = tp_channel_new_from_properties (conn, object_path,
13451329 properties, &test->error);
1346 test_assert_no_error (test->error);
1330 g_assert_no_error (test->error);
13471331 }
13481332 }
13491333
13581342
13591343 tp_cli_connection_interface_simple_presence_run_set_presence (test->conn, -1,
13601344 "away", "preparing for a test", &test->error, NULL);
1361 test_assert_no_error (test->error);
1345 g_assert_no_error (test->error);
13621346
13631347 new_channels_sig =
13641348 tp_cli_connection_interface_requests_connect_to_new_channels (test->conn,
13651349 expect_incoming_call_cb, test, NULL, NULL, &test->error);
1366 test_assert_no_error (test->error);
1350 g_assert_no_error (test->error);
13671351
13681352 tp_cli_connection_interface_simple_presence_run_set_presence (test->conn, -1,
13691353 "available", message, &test->error, NULL);
1370 test_assert_no_error (test->error);
1354 g_assert_no_error (test->error);
13711355
13721356 /* wait for the call to happen if it hasn't already */
13731357 while (test->chan == NULL)
14121396 tp_cli_channel_type_streamed_media_call_list_streams (test->chan, -1,
14131397 listed_streams_cb, test, NULL, NULL);
14141398 g_main_loop_run (test->mainloop);
1415 test_assert_no_error (test->error);
1399 g_assert_no_error (test->error);
14161400
14171401 g_assert_cmpuint (test->list_streams_return->len, ==, 1);
14181402 audio_info = g_ptr_array_index (test->list_streams_return, 0);
14571441 tp_cli_channel_interface_group_call_add_members (test->chan,
14581442 -1, test->contacts, "", void_cb, test, NULL, NULL);
14591443 g_main_loop_run (test->mainloop);
1460 test_assert_no_error (test->error);
1444 g_assert_no_error (test->error);
14611445
14621446 /* The self-handle and the peer are now the channel's members */
14631447 g_assert_cmpuint (tp_channel_group_get_handle_owner (test->chan,
14781462
14791463 /* Immediately the call is accepted, we accept the remote peer's proposed
14801464 * stream direction */
1481 test_connection_run_until_dbus_queue_processed (test->conn);
1465 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
14821466
14831467 test_assert_uu_hash_contains (test->stream_directions, test->audio_stream_id,
14841468 TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL);
15041488 -1, test->contacts, "", TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
15051489 void_cb, test, NULL, NULL);
15061490 g_main_loop_run (test->mainloop);
1507 test_assert_no_error (test->error);
1491 g_assert_no_error (test->error);
15081492
15091493 /* In response to hanging up, the channel closes */
1510 test_connection_run_until_dbus_queue_processed (test->conn);
1494 tp_tests_proxy_run_until_dbus_queue_processed (test->conn);
15111495 g_assert (tp_proxy_get_invalidated (test->chan) != NULL);
15121496 }
15131497
15161500 gconstpointer data G_GNUC_UNUSED)
15171501 {
15181502 tp_cli_connection_run_disconnect (test->conn, -1, &test->error, NULL);
1519 test_assert_no_error (test->error);
1503 g_assert_no_error (test->error);
15201504
15211505 if (test->members_changed_detailed_id != 0)
15221506 {
15361520 g_slist_foreach (test->stream_events, (GFunc) stream_event_destroy, NULL);
15371521 g_slist_free (test->stream_events);
15381522
1539 CLEAR_BOXED (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
1523 tp_clear_boxed (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
15401524 &test->list_streams_return);
1541 CLEAR_BOXED (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
1525 tp_clear_boxed (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST,
15421526 &test->request_streams_return);
15431527
15441528 g_hash_table_destroy (test->stream_directions);
15451529 g_hash_table_destroy (test->stream_pending_sends);
15461530 g_hash_table_destroy (test->stream_states);
15471531
1548 CLEAR_OBJECT (&test->chan);
1549 CLEAR_OBJECT (&test->conn);
1550 CLEAR_OBJECT (&test->cm);
1551
1552 CLEAR_OBJECT (&test->service_cm);
1532 tp_clear_object (&test->chan);
1533 tp_clear_object (&test->conn);
1534 tp_clear_object (&test->cm);
1535
1536 tp_clear_object (&test->service_cm);
15531537
15541538 /* make sure any pending things have happened */
1555 test_proxy_run_until_dbus_queue_processed (test->dbus);
1556
1557 CLEAR_OBJECT (&test->dbus);
1539 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
1540
1541 tp_clear_object (&test->dbus);
15581542 g_main_loop_unref (test->mainloop);
15591543 test->mainloop = NULL;
15601544 }
3131
3232 DBusGConnection *private_conn;
3333 TpDBusDaemon *private_dbus;
34 SimpleChannelDispatchOperation *cdo_service;
35 TestTextChannelNull *text_chan_service;
36 TestTextChannelNull *text_chan_service_2;
34 TpTestsSimpleChannelDispatchOperation *cdo_service;
35 TpTestsTextChannelNull *text_chan_service;
36 TpTestsTextChannelNull *text_chan_service_2;
3737
3838 TpChannelDispatchOperation *cdo;
3939 GError *error /* initialized where needed */;
5656 tp_debug_set_flags ("all");
5757
5858 test->mainloop = g_main_loop_new (NULL, FALSE);
59 test->dbus = test_dbus_daemon_dup_or_die ();
59 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
6060
6161 libdbus = dbus_bus_get_private (DBUS_BUS_STARTER, NULL);
6262 g_assert (libdbus != NULL);
7272
7373 test->cdo = NULL;
7474
75 test->cdo_service = test_object_new_static_class (
76 SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION,
75 test->cdo_service = tp_tests_object_new_static_class (
76 TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION,
7777 NULL);
7878 tp_dbus_daemon_register_object (test->private_dbus, "/whatever",
7979 test->cdo_service);
9090 setup (test, data);
9191
9292 /* Create (service and client sides) connection objects */
93 test_create_and_connect_conn (SIMPLE_TYPE_CONNECTION, "me@test.com",
94 &test->base_connection, &test->connection);
93 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_SIMPLE_CONNECTION,
94 "me@test.com", &test->base_connection, &test->connection);
9595
9696 /* Create service-side text channel object */
9797 chan_path = g_strdup_printf ("%s/Channel",
104104 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
105105 g_assert_no_error (test->error);
106106
107 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
108 test_object_new_static_class (
109 TEST_TYPE_TEXT_CHANNEL_NULL,
107 test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
108 tp_tests_object_new_static_class (
109 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
110110 "connection", test->base_connection,
111111 "object-path", chan_path,
112112 "handle", handle,
127127 handle = tp_handle_ensure (contact_repo, "alice", NULL, &test->error);
128128 g_assert_no_error (test->error);
129129
130 test->text_chan_service_2 = TEST_TEXT_CHANNEL_NULL (
131 test_object_new_static_class (
132 TEST_TYPE_TEXT_CHANNEL_NULL,
130 test->text_chan_service_2 = TP_TESTS_TEXT_CHANNEL_NULL (
131 tp_tests_object_new_static_class (
132 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
133133 "connection", test->base_connection,
134134 "object-path", chan_path,
135135 "handle", handle,
145145
146146
147147 /* Configure fake ChannelDispatchOperation service */
148 simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
148 tp_tests_simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
149149 tp_proxy_get_object_path (test->connection));
150150
151 simple_channel_dispatch_operation_add_channel (test->cdo_service,
151 tp_tests_simple_channel_dispatch_operation_add_channel (test->cdo_service,
152152 test->text_chan);
153153
154 simple_channel_dispatch_operation_add_channel (test->cdo_service,
154 tp_tests_simple_channel_dispatch_operation_add_channel (test->cdo_service,
155155 test->text_chan_2);
156156
157 simple_channel_dispatch_operation_set_account_path (test->cdo_service,
157 tp_tests_simple_channel_dispatch_operation_set_account_path (test->cdo_service,
158158 ACCOUNT_PATH);
159159
160160 g_assert (tp_dbus_daemon_request_name (test->private_dbus,
195195 test->private_conn = NULL;
196196 }
197197
198 /* make sure any pending things have happened */
199 test_proxy_run_until_dbus_queue_processed (test->dbus);
198 /* make sure any pending things have happened */
199 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
200200
201201 g_object_unref (test->dbus);
202202 test->dbus = NULL;
267267 tp_dbus_daemon_release_name (test->private_dbus,
268268 TP_CHANNEL_DISPATCHER_BUS_NAME, NULL);
269269
270 test_proxy_run_until_dbus_queue_processed (test->cdo);
270 tp_tests_proxy_run_until_dbus_queue_processed (test->cdo);
271271
272272 g_assert (tp_proxy_get_invalidated (test->cdo) == NULL);
273273
276276 dbus_g_connection_unref (test->private_conn);
277277 test->private_conn = NULL;
278278
279 test_proxy_run_until_dbus_queue_processed (test->cdo);
279 tp_tests_proxy_run_until_dbus_queue_processed (test->cdo);
280280
281281 g_assert (tp_proxy_get_invalidated (test->cdo) != NULL);
282282 g_assert (tp_proxy_get_invalidated (test->cdo)->domain == TP_DBUS_ERRORS);
301301
302302 tp_svc_channel_dispatch_operation_emit_finished (test->cdo_service);
303303
304 test_proxy_run_until_dbus_queue_processed (test->cdo);
304 tp_tests_proxy_run_until_dbus_queue_processed (test->cdo);
305305
306306 g_assert (tp_proxy_get_invalidated (test->cdo) != NULL);
307307 g_assert (tp_proxy_get_invalidated (test->cdo)->domain == TP_DBUS_ERRORS);
559559 test);
560560
561561 /* First channel disappears and so is lost */
562 test_text_channel_null_close (test->text_chan_service);
562 tp_tests_text_channel_null_close (test->text_chan_service);
563563
564564 g_object_unref (test->text_chan_service);
565565 test->text_chan_service = NULL;
566566
567 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
567 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
568568 test->text_chan);
569569 g_main_loop_run (test->mainloop);
570570
582582 g_signal_connect (test->cdo, "invalidated", G_CALLBACK (invalidated_cb),
583583 test);
584584
585 test_text_channel_null_close (test->text_chan_service_2);
585 tp_tests_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;
589589
590 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
590 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
591591 test->text_chan_2);
592592 g_main_loop_run (test->mainloop);
593593
671671 tp_proxy_prepare_async (test->cdo, features, features_prepared_cb, test);
672672
673673 /* First channel disappears while preparing */
674 test_text_channel_null_close (test->text_chan_service);
674 tp_tests_text_channel_null_close (test->text_chan_service);
675675
676676 g_object_unref (test->text_chan_service);
677677 test->text_chan_service = NULL;
678678
679 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
679 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
680680 test->text_chan);
681681
682682 g_main_loop_run (test->mainloop);
722722 tp_proxy_prepare_async (test->cdo, features, features_not_prepared_cb, test);
723723
724724 /* The 2 channels are lost while preparing */
725 test_text_channel_null_close (test->text_chan_service);
725 tp_tests_text_channel_null_close (test->text_chan_service);
726726
727727 g_object_unref (test->text_chan_service);
728728 test->text_chan_service = NULL;
729729
730 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
730 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
731731 test->text_chan);
732732
733 test_text_channel_null_close (test->text_chan_service_2);
733 tp_tests_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;
737737
738 simple_channel_dispatch_operation_lost_channel (test->cdo_service,
738 tp_tests_simple_channel_dispatch_operation_lost_channel (test->cdo_service,
739739 test->text_chan_2);
740740
741741 g_main_loop_run (test->mainloop);
745745
746746 channels = tp_channel_dispatch_operation_borrow_channels (test->cdo);
747747 g_assert (channels == NULL);
748 }
749
750 static void
751 handle_with_time_cb (GObject *source,
752 GAsyncResult *result,
753 gpointer user_data)
754 {
755 Test *test = user_data;
756
757 tp_channel_dispatch_operation_handle_with_time_finish (
758 TP_CHANNEL_DISPATCH_OPERATION (source), result, &test->error);
759
760 g_main_loop_quit (test->mainloop);
761 }
762
763 static void
764 test_handle_with_time (Test *test,
765 gconstpointer data G_GNUC_UNUSED)
766 {
767 test->cdo = tp_channel_dispatch_operation_new (test->dbus,
768 "/whatever", NULL, &test->error);
769 g_assert_no_error (test->error);
770
771 tp_channel_dispatch_operation_handle_with_time_async (test->cdo,
772 NULL, 666, handle_with_time_cb, test);
773 g_main_loop_run (test->mainloop);
774
775 g_assert_no_error (test->error);
748776 }
749777
750778 int
771799 test_channel_lost_preparing, teardown_services);
772800 g_test_add ("/cdo/finished--preparing", Test, NULL, setup_services,
773801 test_finished_preparing, teardown_services);
802 g_test_add ("/cdo/handle-with-time", Test, NULL, setup_services,
803 test_handle_with_time, teardown_services);
774804
775805 return g_test_run ();
776806 }
2828 tp_debug_set_flags ("all");
2929
3030 test->mainloop = g_main_loop_new (NULL, FALSE);
31 test->dbus = test_dbus_daemon_dup_or_die ();
31 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
3232
3333 test->cd = NULL;
3434 }
4444 }
4545
4646 /* make sure any pending things have happened */
47 test_proxy_run_until_dbus_queue_processed (test->dbus);
47 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
4848
4949 g_object_unref (test->dbus);
5050 test->dbus = NULL;
7979 MYASSERT (tp_channel_get_channel_type_id (chan) ==
8080 TP_IFACE_QUARK_CHANNEL_TYPE_TEXT, "");
8181 MYASSERT (TP_IS_CONNECTION (tp_channel_borrow_connection (chan)), "");
82 MYASSERT_SAME_STRING (tp_channel_get_identifier (chan), IDENTIFIER);
82 g_assert_cmpstr (tp_channel_get_identifier (chan), ==, IDENTIFIER);
8383
8484 asv = tp_channel_borrow_immutable_properties (chan);
8585 MYASSERT (asv != NULL, "");
86 MYASSERT_SAME_STRING (
87 tp_asv_get_string (asv, TP_PROP_CHANNEL_CHANNEL_TYPE),
86 g_assert_cmpstr (
87 tp_asv_get_string (asv, TP_PROP_CHANNEL_CHANNEL_TYPE), ==,
8888 TP_IFACE_CHANNEL_TYPE_TEXT);
89 MYASSERT_SAME_UINT (
90 tp_asv_get_uint32 (asv, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL),
89 g_assert_cmpuint (
90 tp_asv_get_uint32 (asv, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL), ==,
9191 TP_HANDLE_TYPE_CONTACT);
92 MYASSERT_SAME_UINT (
93 tp_asv_get_uint32 (asv, TP_PROP_CHANNEL_TARGET_HANDLE, NULL),
92 g_assert_cmpuint (
93 tp_asv_get_uint32 (asv, TP_PROP_CHANNEL_TARGET_HANDLE, NULL), ==,
9494 handle);
95 MYASSERT_SAME_STRING (
96 tp_asv_get_string (asv, TP_PROP_CHANNEL_TARGET_ID),
95 g_assert_cmpstr (
96 tp_asv_get_string (asv, TP_PROP_CHANNEL_TARGET_ID), ==,
9797 IDENTIFIER);
9898 }
9999
101101 main (int argc,
102102 char **argv)
103103 {
104 SimpleConnection *service_conn;
104 TpTestsSimpleConnection *service_conn;
105105 TpBaseConnection *service_conn_as_base;
106106 TpHandleRepoIface *contact_repo;
107 TestTextChannelNull *service_chan;
108 TestPropsTextChannel *service_props_chan;
109 TestPropsGroupTextChannel *service_props_group_chan;
107 TpTestsTextChannelNull *service_chan;
108 TpTestsPropsTextChannel *service_props_chan;
109 TpTestsPropsGroupTextChannel *service_props_group_chan;
110110 TpDBusDaemon *dbus;
111111 TpConnection *conn;
112112 TpChannel *chan;
128128
129129 g_type_init ();
130130 tp_debug_set_flags ("all");
131 dbus = test_dbus_daemon_dup_or_die ();
132
133 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
134 SIMPLE_TYPE_CONNECTION,
131 dbus = tp_tests_dbus_daemon_dup_or_die ();
132
133 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
134 TP_TESTS_TYPE_SIMPLE_CONNECTION,
135135 "account", "me@example.com",
136136 "protocol", "simple",
137137 NULL));
141141
142142 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
143143 &name, &conn_path, &error), "");
144 test_assert_no_error (error);
144 g_assert_no_error (error);
145145
146146 conn = tp_connection_new (dbus, name, conn_path, &error);
147147 MYASSERT (conn != NULL, "");
148 test_assert_no_error (error);
148 g_assert_no_error (error);
149149
150150 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
151151 "");
152 test_assert_no_error (error);
152 g_assert_no_error (error);
153153
154154 contact_repo = tp_base_connection_get_handles (service_conn_as_base,
155155 TP_HANDLE_TYPE_CONTACT);
156156 MYASSERT (contact_repo != NULL, "");
157157
158158 handle = tp_handle_ensure (contact_repo, IDENTIFIER, NULL, &error);
159 test_assert_no_error (error);
159 g_assert_no_error (error);
160160
161161 chan_path = g_strdup_printf ("%s/Channel", conn_path);
162162
163 service_chan = TEST_TEXT_CHANNEL_NULL (test_object_new_static_class (
164 TEST_TYPE_TEXT_CHANNEL_NULL,
163 service_chan = TP_TESTS_TEXT_CHANNEL_NULL (tp_tests_object_new_static_class (
164 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
165165 "connection", service_conn,
166166 "object-path", chan_path,
167167 "handle", handle,
169169
170170 props_chan_path = g_strdup_printf ("%s/PropertiesChannel", conn_path);
171171
172 service_props_chan = TEST_PROPS_TEXT_CHANNEL (test_object_new_static_class (
173 TEST_TYPE_PROPS_TEXT_CHANNEL,
172 service_props_chan = TP_TESTS_PROPS_TEXT_CHANNEL (
173 tp_tests_object_new_static_class (
174 TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
174175 "connection", service_conn,
175176 "object-path", props_chan_path,
176177 "handle", handle,
178179
179180 props_group_chan_path = g_strdup_printf ("%s/PropsGroupChannel", conn_path);
180181
181 service_props_group_chan = TEST_PROPS_GROUP_TEXT_CHANNEL (
182 test_object_new_static_class (
183 TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL,
182 service_props_group_chan = TP_TESTS_PROPS_GROUP_TEXT_CHANNEL (
183 tp_tests_object_new_static_class (
184 TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL,
184185 "connection", service_conn,
185186 "object-path", props_group_chan_path,
186187 "handle", handle,
192193
193194 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
194195 TP_HANDLE_TYPE_CONTACT, handle, &error);
195 test_assert_no_error (error);
196 g_assert_no_error (error);
196197
197198 g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CORE), ==,
198199 FALSE);
206207
207208 MYASSERT (!tp_channel_run_until_ready (chan, &error, NULL), "");
208209 MYASSERT (error != NULL, "");
209 MYASSERT_SAME_ERROR (&invalidated_for_test, error);
210 g_assert_error (error, invalidated_for_test.domain,
211 invalidated_for_test.code);
212 g_assert_cmpstr (error->message, ==, invalidated_for_test.message);
210213 g_error_free (error);
211214 error = NULL;
212215
214217 g_main_loop_run (mainloop);
215218
216219 MYASSERT (!tp_proxy_prepare_finish (chan, prepare_result, &error), "");
217 MYASSERT_SAME_ERROR (&invalidated_for_test, error);
220 g_assert_error (error, invalidated_for_test.domain,
221 invalidated_for_test.code);
222 g_assert_cmpstr (error->message, ==, invalidated_for_test.message);
218223 g_clear_error (&error);
219224 /* it was never ready */
220225 g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CORE), ==,
232237
233238 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
234239 TP_HANDLE_TYPE_CONTACT, handle, &error);
235 test_assert_no_error (error);
240 g_assert_no_error (error);
236241
237242 was_ready = FALSE;
238243 tp_proxy_prepare_async (chan, NULL, channel_prepared_cb, &prepare_result);
244249 tp_proxy_invalidate ((TpProxy *) chan, &invalidated_for_test);
245250 MYASSERT (was_ready == TRUE, "");
246251 MYASSERT (invalidated != NULL, "");
247 MYASSERT_SAME_ERROR (&invalidated_for_test, invalidated);
252 g_assert_error (invalidated, invalidated_for_test.domain,
253 invalidated_for_test.code);
254 g_assert_cmpstr (invalidated->message, ==, invalidated_for_test.message);
248255 g_error_free (invalidated);
249256 invalidated = NULL;
250257
252259 MYASSERT (prepare_result == NULL, "");
253260 g_main_loop_run (mainloop);
254261 MYASSERT (!tp_proxy_prepare_finish (chan, prepare_result, &error), "");
255 MYASSERT_SAME_ERROR (&invalidated_for_test, error);
262 g_assert_error (error, invalidated_for_test.domain,
263 invalidated_for_test.code);
264 g_assert_cmpstr (error->message, ==, invalidated_for_test.message);
256265 g_clear_error (&error);
257266 g_object_unref (prepare_result);
258267 prepare_result = NULL;
267276
268277 g_message ("Channel becomes ready while we wait");
269278
270 test_connection_run_until_dbus_queue_processed (conn);
279 tp_tests_proxy_run_until_dbus_queue_processed (conn);
271280
272281 service_chan->get_handle_called = 0;
273282 service_chan->get_interfaces_called = 0;
275284
276285 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
277286 TP_HANDLE_TYPE_CONTACT, handle, &error);
278 test_assert_no_error (error);
287 g_assert_no_error (error);
279288
280289 prepare_result = NULL;
281290 tp_proxy_prepare_async (chan, NULL, channel_prepared_cb, &prepare_result);
282291
283292 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
284 test_assert_no_error (error);
285 MYASSERT_SAME_UINT (service_chan->get_handle_called, 0);
286 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 1);
287 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 0);
293 g_assert_no_error (error);
294 g_assert_cmpuint (service_chan->get_handle_called, ==, 0);
295 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 1);
296 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 0);
288297
289298 g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CORE), ==,
290299 TRUE);
295304 g_main_loop_run (mainloop);
296305
297306 MYASSERT (tp_proxy_prepare_finish (chan, prepare_result, &error), "");
298 test_assert_no_error (error);
307 g_assert_no_error (error);
299308
300309 g_object_unref (prepare_result);
301310 prepare_result = NULL;
308317 g_message ("Channel becomes ready while we wait (the version with "
309318 "Properties)");
310319
311 test_connection_run_until_dbus_queue_processed (conn);
312
313 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
314 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
315 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
320 tp_tests_proxy_run_until_dbus_queue_processed (conn);
321
322 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
323 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
324 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
316325
317326 chan = tp_channel_new (conn, props_chan_path, NULL,
318327 TP_UNKNOWN_HANDLE_TYPE, 0, &error);
319 test_assert_no_error (error);
328 g_assert_no_error (error);
320329
321330 prepare_result = NULL;
322331 tp_proxy_prepare_async (chan, some_features, channel_prepared_cb,
328337 ==, FALSE);
329338
330339 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
331 test_assert_no_error (error);
332 MYASSERT_SAME_UINT (
333 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, 0);
334 MYASSERT_SAME_UINT (
335 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called, 0);
336 MYASSERT_SAME_UINT (
337 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called, 0);
340 g_assert_no_error (error);
341 g_assert_cmpuint (
342 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, ==,
343 0);
344 g_assert_cmpuint (
345 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called,
346 ==, 0);
347 g_assert_cmpuint (
348 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called,
349 ==, 0);
338350
339351 g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CORE), ==,
340352 TRUE);
345357 g_main_loop_run (mainloop);
346358
347359 MYASSERT (tp_proxy_prepare_finish (chan, prepare_result, &error), "");
348 test_assert_no_error (error);
360 g_assert_no_error (error);
349361
350362 g_object_unref (prepare_result);
351363 prepare_result = NULL;
363375 g_main_loop_run (mainloop);
364376
365377 MYASSERT (tp_proxy_prepare_finish (chan, prepare_result, &error), "");
366 test_assert_no_error (error);
378 g_assert_no_error (error);
367379
368380 g_object_unref (prepare_result);
369381 prepare_result = NULL;
374386 g_message ("Channel becomes ready while we wait (preloading immutable "
375387 "properties)");
376388
377 test_connection_run_until_dbus_queue_processed (conn);
378
379 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
380 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
381 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
382
383 g_hash_table_remove_all (TEST_PROPS_TEXT_CHANNEL (service_props_chan)
389 tp_tests_proxy_run_until_dbus_queue_processed (conn);
390
391 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called = 0;
392 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called = 0;
393 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called = 0;
394
395 g_hash_table_remove_all (TP_TESTS_PROPS_TEXT_CHANNEL (service_props_chan)
384396 ->dbus_property_interfaces_retrieved);
385397
386398 asv = tp_asv_new (
396408 NULL);
397409
398410 chan = tp_channel_new_from_properties (conn, props_chan_path, asv, &error);
399 test_assert_no_error (error);
411 g_assert_no_error (error);
400412
401413 g_hash_table_destroy (asv);
402414 asv = NULL;
403415
404416 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
405 test_assert_no_error (error);
406 MYASSERT_SAME_UINT (g_hash_table_size (
407 service_props_chan->dbus_property_interfaces_retrieved), 0);
408 MYASSERT_SAME_UINT (
409 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, 0);
410 MYASSERT_SAME_UINT (
411 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called, 0);
417 g_assert_no_error (error);
418 g_assert_cmpuint (g_hash_table_size (
419 service_props_chan->dbus_property_interfaces_retrieved), ==, 0);
420 g_assert_cmpuint (
421 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_handle_called, ==, 0);
422 g_assert_cmpuint (
423 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_channel_type_called,
424 ==, 0);
412425 /* FIXME: with an improved fast-path we could avoid this one too maybe? */
413426 /*
414 MYASSERT_SAME_UINT (
415 TEST_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called, 0);
427 g_assert_cmpuint (
428 TP_TESTS_TEXT_CHANNEL_NULL (service_props_chan)->get_interfaces_called,
429 ==, 0);
416430 */
417431
418432 assert_chan_sane (chan, handle);
423437 g_message ("Group channel becomes ready while we wait (preloading immutable "
424438 "properties)");
425439
426 test_connection_run_until_dbus_queue_processed (conn);
427
428 TEST_TEXT_CHANNEL_NULL (service_props_group_chan)->get_handle_called = 0;
429 TEST_TEXT_CHANNEL_NULL (service_props_group_chan)->get_interfaces_called = 0;
430 TEST_TEXT_CHANNEL_NULL (service_props_group_chan)->get_channel_type_called
440 tp_tests_proxy_run_until_dbus_queue_processed (conn);
441
442 TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_handle_called = 0;
443 TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_interfaces_called = 0;
444 TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)->get_channel_type_called
431445 = 0;
432446
433 g_hash_table_remove_all (TEST_PROPS_TEXT_CHANNEL (service_props_group_chan)
447 g_hash_table_remove_all (TP_TESTS_PROPS_TEXT_CHANNEL (
448 service_props_group_chan)
434449 ->dbus_property_interfaces_retrieved);
435450
436451 {
454469 }
455470
456471 chan = tp_channel_new_from_properties (conn, props_group_chan_path, asv, &error);
457 test_assert_no_error (error);
472 g_assert_no_error (error);
458473
459474 g_hash_table_destroy (asv);
460475 asv = NULL;
461476
462477 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
463 test_assert_no_error (error);
464 MYASSERT_SAME_UINT (TEST_TEXT_CHANNEL_NULL (service_props_group_chan)
465 ->get_handle_called, 0);
466 MYASSERT_SAME_UINT (TEST_TEXT_CHANNEL_NULL (service_props_group_chan)
467 ->get_channel_type_called, 0);
468 MYASSERT_SAME_UINT (TEST_TEXT_CHANNEL_NULL (service_props_group_chan)
469 ->get_interfaces_called, 0);
470 MYASSERT_SAME_UINT (g_hash_table_size (
471 TEST_PROPS_TEXT_CHANNEL (service_props_group_chan)
472 ->dbus_property_interfaces_retrieved), 1);
478 g_assert_no_error (error);
479 g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
480 ->get_handle_called, ==, 0);
481 g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
482 ->get_channel_type_called, ==, 0);
483 g_assert_cmpuint (TP_TESTS_TEXT_CHANNEL_NULL (service_props_group_chan)
484 ->get_interfaces_called, ==, 0);
485 g_assert_cmpuint (g_hash_table_size (
486 TP_TESTS_PROPS_TEXT_CHANNEL (service_props_group_chan)
487 ->dbus_property_interfaces_retrieved), ==, 1);
473488 MYASSERT (g_hash_table_lookup (
474 TEST_PROPS_TEXT_CHANNEL (service_props_group_chan)
489 TP_TESTS_PROPS_TEXT_CHANNEL (service_props_group_chan)
475490 ->dbus_property_interfaces_retrieved,
476491 GUINT_TO_POINTER (TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) != NULL,
477492 "Only Chan.I.Group's properties should have been retrieved");
484499 g_message ("Channel becomes ready while we wait (in the case where we "
485500 "have to discover the channel type)");
486501
487 test_connection_run_until_dbus_queue_processed (conn);
502 tp_tests_proxy_run_until_dbus_queue_processed (conn);
488503
489504 service_chan->get_handle_called = 0;
490505 service_chan->get_interfaces_called = 0;
492507
493508 chan = tp_channel_new (conn, chan_path, NULL,
494509 TP_HANDLE_TYPE_CONTACT, handle, &error);
495 test_assert_no_error (error);
510 g_assert_no_error (error);
496511
497512 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
498 test_assert_no_error (error);
499 MYASSERT_SAME_UINT (service_chan->get_handle_called, 0);
500 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 1);
501 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 1);
513 g_assert_no_error (error);
514 g_assert_cmpuint (service_chan->get_handle_called, ==, 0);
515 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 1);
516 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 1);
502517
503518 assert_chan_sane (chan, handle);
504519
508523 g_message ("Channel becomes ready while we wait (in the case where we "
509524 "have to discover the handle type)");
510525
511 test_connection_run_until_dbus_queue_processed (conn);
526 tp_tests_proxy_run_until_dbus_queue_processed (conn);
512527
513528 service_chan->get_handle_called = 0;
514529 service_chan->get_interfaces_called = 0;
516531
517532 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
518533 TP_UNKNOWN_HANDLE_TYPE, 0, &error);
519 test_assert_no_error (error);
534 g_assert_no_error (error);
520535
521536 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
522 test_assert_no_error (error);
523 MYASSERT_SAME_UINT (service_chan->get_handle_called, 1);
524 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 1);
525 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 0);
537 g_assert_no_error (error);
538 g_assert_cmpuint (service_chan->get_handle_called, ==, 1);
539 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 1);
540 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 0);
526541
527542 assert_chan_sane (chan, handle);
528543
532547 g_message ("Channel becomes ready while we wait (in the case where we "
533548 "have to discover the handle)");
534549
535 test_connection_run_until_dbus_queue_processed (conn);
550 tp_tests_proxy_run_until_dbus_queue_processed (conn);
536551
537552 service_chan->get_handle_called = 0;
538553 service_chan->get_interfaces_called = 0;
540555
541556 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
542557 TP_HANDLE_TYPE_CONTACT, 0, &error);
543 test_assert_no_error (error);
558 g_assert_no_error (error);
544559
545560 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
546 test_assert_no_error (error);
547 MYASSERT_SAME_UINT (service_chan->get_handle_called, 1);
548 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 1);
549 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 0);
561 g_assert_no_error (error);
562 g_assert_cmpuint (service_chan->get_handle_called, ==, 1);
563 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 1);
564 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 0);
550565
551566 assert_chan_sane (chan, handle);
552567
558573 bad_chan_path = g_strdup_printf ("%s/Does/Not/Actually/Exist", conn_path);
559574 chan = tp_channel_new (conn, bad_chan_path, NULL,
560575 TP_UNKNOWN_HANDLE_TYPE, 0, &error);
561 test_assert_no_error (error);
576 g_assert_no_error (error);
562577
563578 was_ready = FALSE;
564579 tp_channel_call_when_ready (chan, channel_ready, &was_ready);
582597 bad_chan_path = g_strdup_printf ("%s/Does/Not/Actually/Exist", conn_path);
583598 chan = tp_channel_new (conn, bad_chan_path, NULL,
584599 TP_UNKNOWN_HANDLE_TYPE, 0, &error);
585 test_assert_no_error (error);
600 g_assert_no_error (error);
586601
587602 MYASSERT (!tp_channel_run_until_ready (chan, &error, NULL), "");
588603 MYASSERT (error != NULL, "");
601616 g_message ("Channel doesn't actually implement Group (preloading immutable "
602617 "properties)");
603618
604 test_connection_run_until_dbus_queue_processed (conn);
619 tp_tests_proxy_run_until_dbus_queue_processed (conn);
605620
606621 service_chan->get_handle_called = 0;
607622 service_chan->get_interfaces_called = 0;
631646 * should make introspection fail.
632647 */
633648 chan = tp_channel_new_from_properties (conn, chan_path, asv, &error);
634 test_assert_no_error (error);
649 g_assert_no_error (error);
635650
636651 g_hash_table_destroy (asv);
637652 asv = NULL;
645660 g_error_free (error);
646661 error = NULL;
647662
648 MYASSERT_SAME_UINT (service_chan->get_handle_called, 0);
649 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 0);
650 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 0);
663 g_assert_cmpuint (service_chan->get_handle_called, ==, 0);
664 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 0);
665 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 0);
651666
652667 g_object_unref (chan);
653668 chan = NULL;
654669
655670 g_message ("Channel becomes ready and we are called back");
656671
657 test_connection_run_until_dbus_queue_processed (conn);
672 tp_tests_proxy_run_until_dbus_queue_processed (conn);
658673
659674 service_chan->get_handle_called = 0;
660675 service_chan->get_interfaces_called = 0;
662677
663678 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
664679 TP_HANDLE_TYPE_CONTACT, handle, &error);
665 test_assert_no_error (error);
680 g_assert_no_error (error);
666681
667682 was_ready = FALSE;
668683 tp_channel_call_when_ready (chan, channel_ready, &was_ready);
670685 g_main_loop_run (mainloop);
671686 g_message ("Leaving main loop");
672687 MYASSERT (was_ready == TRUE, "");
673 test_assert_no_error (invalidated);
674 MYASSERT_SAME_UINT (service_chan->get_handle_called, 0);
675 MYASSERT_SAME_UINT (service_chan->get_interfaces_called, 1);
676 MYASSERT_SAME_UINT (service_chan->get_channel_type_called, 0);
688 g_assert_no_error (invalidated);
689 g_assert_cmpuint (service_chan->get_handle_called, ==, 0);
690 g_assert_cmpuint (service_chan->get_interfaces_called, ==, 1);
691 g_assert_cmpuint (service_chan->get_channel_type_called, ==, 0);
677692
678693 assert_chan_sane (chan, handle);
679694
684699 was_ready = FALSE;
685700 tp_channel_call_when_ready (chan, channel_ready, &was_ready);
686701 MYASSERT (was_ready == TRUE, "");
687 test_assert_no_error (invalidated);
702 g_assert_no_error (invalidated);
688703
689704 assert_chan_sane (chan, handle);
690705
698713 ==, FALSE);
699714
700715 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
701 test_assert_no_error (error);
716 g_assert_no_error (error);
702717
703718 was_ready = FALSE;
704719
719734 FALSE);
720735 g_assert_cmpint (tp_proxy_is_prepared (chan, TP_CHANNEL_FEATURE_CHAT_STATES),
721736 ==, FALSE);
722 MYASSERT_SAME_ERROR (tp_proxy_get_invalidated (chan), invalidated);
737 g_assert_error (invalidated, tp_proxy_get_invalidated (chan)->domain,
738 tp_proxy_get_invalidated (chan)->code);
739 g_assert_cmpstr (invalidated->message, ==,
740 tp_proxy_get_invalidated (chan)->message);
723741
724742 /* ... but prepare_async still hasn't finished until we run the main loop */
725743 g_assert (prepare_result == NULL);
726744 g_main_loop_run (mainloop);
727745 g_assert (prepare_result != NULL);
728746 MYASSERT (!tp_proxy_prepare_finish (chan, prepare_result, &error), "");
729 MYASSERT_SAME_ERROR (tp_proxy_get_invalidated (chan), invalidated);
747 g_assert_error (error, invalidated->domain, invalidated->code);
748 g_assert_cmpstr (error->message, ==, invalidated->message);
730749
731750 g_clear_error (&error);
732751 g_clear_error (&invalidated);
6868 tp_debug_set_flags ("all");
6969
7070 test->mainloop = g_main_loop_new (NULL, FALSE);
71 test->dbus = test_dbus_daemon_dup_or_die ();
71 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
7272 g_assert (test->dbus != NULL);
7373
7474 libdbus = dbus_bus_get_private (DBUS_BUS_STARTER, NULL);
8585
8686 test->cr = NULL;
8787
88 test->cr_service = test_object_new_static_class (test_simple_cr_get_type (),
88 test->cr_service = tp_tests_object_new_static_class (test_simple_cr_get_type (),
8989 NULL);
9090 tp_dbus_daemon_register_object (test->private_dbus, "/whatever",
9191 test->cr_service);
123123 }
124124
125125 /* make sure any pending things have happened */
126 test_proxy_run_until_dbus_queue_processed (test->dbus);
126 tp_tests_proxy_run_until_dbus_queue_processed (test->dbus);
127127
128128 g_object_unref (test->dbus);
129129 test->dbus = NULL;
172172 tp_dbus_daemon_release_name (test->private_dbus,
173173 TP_CHANNEL_DISPATCHER_BUS_NAME, NULL);
174174
175 test_proxy_run_until_dbus_queue_processed (test->cr);
175 tp_tests_proxy_run_until_dbus_queue_processed (test->cr);
176176
177177 g_assert (tp_proxy_get_invalidated (test->cr) == NULL);
178178
181181 dbus_g_connection_unref (test->private_conn);
182182 test->private_conn = NULL;
183183
184 test_proxy_run_until_dbus_queue_processed (test->cr);
184 tp_tests_proxy_run_until_dbus_queue_processed (test->cr);
185185
186186 g_assert (tp_proxy_get_invalidated (test->cr) != NULL);
187187 g_assert (tp_proxy_get_invalidated (test->cr)->domain == TP_DBUS_ERRORS);
214214
215215 tp_svc_channel_request_emit_succeeded (test->cr_service);
216216
217 test_proxy_run_until_dbus_queue_processed (test->cr);
217 tp_tests_proxy_run_until_dbus_queue_processed (test->cr);
218218
219219 g_assert (tp_proxy_get_invalidated (test->cr) != NULL);
220220 g_assert (tp_proxy_get_invalidated (test->cr)->domain == TP_DBUS_ERRORS);
246246 tp_svc_channel_request_emit_failed (test->cr_service,
247247 TP_ERROR_STR_NOT_YOURS, "lalala");
248248
249 test_proxy_run_until_dbus_queue_processed (test->cr);
249 tp_tests_proxy_run_until_dbus_queue_processed (test->cr);
250250
251251 g_assert (tp_proxy_get_invalidated (test->cr) != NULL);
252252 g_assert (tp_proxy_get_invalidated (test->cr)->domain == TP_ERRORS);
2424 #include "tests/lib/util.h"
2525
2626 static GMainLoop *mainloop;
27 SimpleConnection *service_conn;
27 TpTestsSimpleConnection *service_conn;
2828 gchar *conn_path;
2929 TpConnection *conn;
3030 TpHandleRepoIface *contact_repo;
5050 local_pending->len, remote_pending->len, actor, reason);
5151
5252 MYASSERT (expecting_group_members_changed, "");
53 MYASSERT_SAME_UINT (reason, expected_reason);
53 g_assert_cmpuint (reason, ==, expected_reason);
5454
5555 expecting_group_members_changed = FALSE;
5656 }
7070 local_pending->len, remote_pending->len, g_hash_table_size (details));
7171
7272 MYASSERT (expecting_group_members_changed_detailed, "");
73 MYASSERT_SAME_UINT (reason, expected_reason);
73 g_assert_cmpuint (reason, ==, expected_reason);
7474
7575 expecting_group_members_changed_detailed = FALSE;
7676 }
7777
7878
7979 static void
80 test_channel_proxy (TestTextChannelGroup *service_chan,
80 test_channel_proxy (TpTestsTextChannelGroup *service_chan,
8181 TpChannel *chan,
8282 gboolean detailed,
8383 gboolean properties)
8989 gboolean has_detailed_flag, has_properties_flag;
9090
9191 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
92 test_assert_no_error (error);
92 g_assert_no_error (error);
9393
9494 /* We want to ensure that each of these signals fires exactly once per
9595 * change. The channel emits both MembersChanged and MembersChangedDetailed,
126126 /* Clear the queue to ensure that there aren't any more
127127 * MembersChanged[Detailed] signals waiting for us.
128128 */
129 test_connection_run_until_dbus_queue_processed (conn);
129 tp_tests_proxy_run_until_dbus_queue_processed (conn);
130130
131131 expected_members = add;
132132 MYASSERT (tp_intset_is_equal (expected_members,
146146 tp_intset_destroy (add);
147147 tp_intset_destroy (rem);
148148
149 test_connection_run_until_dbus_queue_processed (conn);
149 tp_tests_proxy_run_until_dbus_queue_processed (conn);
150150
151151 tp_intset_add (expected_members, h3);
152152 tp_intset_remove (expected_members, h1);
184184 g_array_free (yarr, TRUE);
185185 g_array_free (arr, TRUE);
186186
187 test_connection_run_until_dbus_queue_processed (conn);
187 tp_tests_proxy_run_until_dbus_queue_processed (conn);
188188
189189 /* And, the cache of group members should be unaltered, since the signal the
190190 * TpChannel cares about was not fired.
204204 {
205205 DEBUG ("called");
206206 MYASSERT (expecting_invalidated, ": I've been EXPECTING YOU");
207 MYASSERT_SAME_UINT (domain, TP_DBUS_ERRORS);
207 g_assert_cmpuint (domain, ==, TP_DBUS_ERRORS);
208208 MYASSERT (code == TP_DBUS_ERROR_INCONSISTENT, ": was %i", code);
209209
210210 expecting_invalidated = FALSE;
211211 }
212212
213213 static void
214 test_invalidated_on_illegal_change (TestTextChannelGroup *serv_chan,
214 test_invalidated_on_illegal_change (TpTestsTextChannelGroup *serv_chan,
215215 TpChannel *chan,
216216 gboolean detailed,
217217 gboolean properties)
232232 *(properties ? &add : &del) |= TP_CHANNEL_GROUP_FLAG_PROPERTIES;
233233 DEBUG ("Changing flags: add %u, del %u", add, del);
234234 tp_svc_channel_interface_group_emit_group_flags_changed (serv_chan, add, del);
235 test_connection_run_until_dbus_queue_processed (conn);
235 tp_tests_proxy_run_until_dbus_queue_processed (conn);
236236
237237 /* Now, let's flip the Detailed and Properties flags, and check that the
238238 * proxy gets invalidated due to inconsistency on the part of the service.
240240 expecting_invalidated = TRUE;
241241 DEBUG ("Changing flags: add %u, del %u", del, add);
242242 tp_group_mixin_change_flags ((GObject *) serv_chan, del, add);
243 test_connection_run_until_dbus_queue_processed (conn);
243 tp_tests_proxy_run_until_dbus_queue_processed (conn);
244244
245245 MYASSERT (!expecting_invalidated, ": invalidated should have fired");
246246 }
251251 gboolean properties)
252252 {
253253 gchar *chan_path;
254 TestTextChannelGroup *service_chan;
254 TpTestsTextChannelGroup *service_chan;
255255 TpChannel *chan;
256256 GError *error = NULL;
257257
258258 chan_path = g_strdup_printf ("%s/Channel%u", conn_path, channel_number);
259 service_chan = TEST_TEXT_CHANNEL_GROUP (test_object_new_static_class (
260 TEST_TYPE_TEXT_CHANNEL_GROUP,
259 service_chan = TP_TESTS_TEXT_CHANNEL_GROUP (
260 tp_tests_object_new_static_class (
261 TP_TESTS_TYPE_TEXT_CHANNEL_GROUP,
261262 "connection", service_conn,
262263 "object-path", chan_path,
263264 "detailed", detailed,
266267 chan = tp_channel_new (conn, chan_path, NULL, TP_UNKNOWN_HANDLE_TYPE, 0,
267268 &error);
268269
269 test_assert_no_error (error);
270 g_assert_no_error (error);
270271
271272 expecting_invalidated = FALSE;
272273 g_signal_connect (chan, "invalidated", (GCallback) channel_invalidated_cb,
329330 check_removed_unknown_error_in_invalidated (void)
330331 {
331332 gchar *chan_path;
332 TestTextChannelGroup *service_chan;
333 TpTestsTextChannelGroup *service_chan;
333334 TpChannel *chan;
334335 TpIntSet *self_handle_singleton = tp_intset_new ();
335336 GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
338339 GError *error = NULL;
339340
340341 chan_path = g_strdup_printf ("%s/Channel_1_6180339887", conn_path);
341 service_chan = TEST_TEXT_CHANNEL_GROUP (test_object_new_static_class (
342 TEST_TYPE_TEXT_CHANNEL_GROUP,
342 service_chan = TP_TESTS_TEXT_CHANNEL_GROUP (
343 tp_tests_object_new_static_class (
344 TP_TESTS_TYPE_TEXT_CHANNEL_GROUP,
343345 "connection", service_conn,
344346 "object-path", chan_path,
345347 "detailed", TRUE,
348350 chan = tp_channel_new (conn, chan_path, NULL, TP_UNKNOWN_HANDLE_TYPE, 0,
349351 &error);
350352
351 test_assert_no_error (error);
353 g_assert_no_error (error);
352354
353355 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
354 test_assert_no_error (error);
356 g_assert_no_error (error);
355357 DEBUG ("ready!");
356358
357359 g_signal_connect (chan, "invalidated",
362364 self_handle_singleton, NULL, NULL, NULL, 0,
363365 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
364366
365 test_connection_run_until_dbus_queue_processed (conn);
367 tp_tests_proxy_run_until_dbus_queue_processed (conn);
366368
367369 g_hash_table_insert (details, "change-reason",
368370 tp_g_value_slice_new_uint (REMOVED_REASON));
376378 tp_group_mixin_change_members_detailed ((GObject *) service_chan, NULL,
377379 self_handle_singleton, NULL, NULL, details);
378380
379 test_connection_run_until_dbus_queue_processed (conn);
381 tp_tests_proxy_run_until_dbus_queue_processed (conn);
380382
381383 tp_cli_channel_call_close (chan, -1, NULL, NULL, NULL, NULL);
382384
383385 g_hash_table_unref (details);
384386
385 test_connection_run_until_dbus_queue_processed (conn);
387 tp_tests_proxy_run_until_dbus_queue_processed (conn);
386388
387389 MYASSERT (invalidated, "");
388390
418420 check_removed_known_error_in_invalidated (void)
419421 {
420422 gchar *chan_path;
421 TestTextChannelGroup *service_chan;
423 TpTestsTextChannelGroup *service_chan;
422424 TpChannel *chan;
423425 TpIntSet *self_handle_singleton = tp_intset_new ();
424426 GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
427429 GError *error = NULL;
428430
429431 chan_path = g_strdup_printf ("%s/Channel_1_6180339887", conn_path);
430 service_chan = TEST_TEXT_CHANNEL_GROUP (g_object_new (
431 TEST_TYPE_TEXT_CHANNEL_GROUP,
432 service_chan = TP_TESTS_TEXT_CHANNEL_GROUP (g_object_new (
433 TP_TESTS_TYPE_TEXT_CHANNEL_GROUP,
432434 "connection", service_conn,
433435 "object-path", chan_path,
434436 "detailed", TRUE,
437439 chan = tp_channel_new (conn, chan_path, NULL, TP_UNKNOWN_HANDLE_TYPE, 0,
438440 &error);
439441
440 test_assert_no_error (error);
442 g_assert_no_error (error);
441443
442444 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
443 test_assert_no_error (error);
445 g_assert_no_error (error);
444446 DEBUG ("ready!");
445447
446448 g_signal_connect (chan, "invalidated",
451453 self_handle_singleton, NULL, NULL, NULL, 0,
452454 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
453455
454 test_connection_run_until_dbus_queue_processed (conn);
456 tp_tests_proxy_run_until_dbus_queue_processed (conn);
455457
456458 g_hash_table_insert (details, "change-reason",
457459 tp_g_value_slice_new_uint (REMOVED_REASON));
465467 tp_group_mixin_change_members_detailed ((GObject *) service_chan, NULL,
466468 self_handle_singleton, NULL, NULL, details);
467469
468 test_connection_run_until_dbus_queue_processed (conn);
470 tp_tests_proxy_run_until_dbus_queue_processed (conn);
469471
470472 tp_cli_channel_call_close (chan, -1, NULL, NULL, NULL, NULL);
471473
472474 g_hash_table_unref (details);
473475
474 test_connection_run_until_dbus_queue_processed (conn);
476 tp_tests_proxy_run_until_dbus_queue_processed (conn);
475477
476478 MYASSERT (invalidated, "");
477479
492494
493495 g_type_init ();
494496 tp_debug_set_flags ("all");
495 dbus = test_dbus_daemon_dup_or_die ();
496
497 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (SIMPLE_TYPE_CONNECTION,
497 dbus = tp_tests_dbus_daemon_dup_or_die ();
498
499 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
500 TP_TESTS_TYPE_SIMPLE_CONNECTION,
498501 "account", "me@example.com",
499502 "protocol", "simple",
500503 NULL));
504507
505508 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
506509 &name, &conn_path, &error), "");
507 test_assert_no_error (error);
510 g_assert_no_error (error);
508511
509512 conn = tp_connection_new (dbus, name, conn_path, &error);
510513 MYASSERT (conn != NULL, "");
511 test_assert_no_error (error);
514 g_assert_no_error (error);
512515
513516 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
514517 "");
515 test_assert_no_error (error);
518 g_assert_no_error (error);
516519
517520 contact_repo = tp_base_connection_get_handles (service_conn_as_base,
518521 TP_HANDLE_TYPE_CONTACT);
525528 mainloop = g_main_loop_new (NULL, FALSE);
526529
527530 MYASSERT (tp_cli_connection_run_connect (conn, -1, &error, NULL), "");
528 test_assert_no_error (error);
531 g_assert_no_error (error);
529532
530533 run_membership_tests ();
531534 check_removed_unknown_error_in_invalidated ();
532535 check_removed_known_error_in_invalidated ();
533536
534537 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
535 test_assert_no_error (error);
538 g_assert_no_error (error);
536539
537540 /* clean up */
538541
2828 tp_debug_set_flags ("all");
2929
3030 test->mainloop = g_main_loop_new (NULL, FALSE);
31 test->dbus = test_dbus_daemon_dup_or_die ();
31 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
3232
3333 test->client = NULL;
3434 }
5353 test_new (Test *test,
5454 gconstpointer data G_GNUC_UNUSED)
5555 {
56 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
56 test->client = tp_tests_object_new_static_class (TP_TYPE_CLIENT,
5757 "dbus-daemon", test->dbus,
5858 "object-path", "/org/freedesktop/Telepathy/Client/whatever",
5959 "bus-name", "org.freedesktop.Telepathy.Client.whatever",
3434 tp_debug_set_flags ("all");
3535
3636 test->mainloop = g_main_loop_new (NULL, FALSE);
37 test->dbus = test_dbus_daemon_dup_or_die ();
38
39 test->service_cm = EXAMPLE_ECHO_CONNECTION_MANAGER (test_object_new_static_class (
37 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
38
39 test->service_cm = EXAMPLE_ECHO_CONNECTION_MANAGER (
40 tp_tests_object_new_static_class (
4041 EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER,
4142 NULL));
4243 g_assert (test->service_cm != NULL);
3434 char **argv)
3535 {
3636 TpDBusDaemon *dbus;
37 SimpleConnection *service_conn;
37 TpTestsSimpleConnection *service_conn;
3838 TpBaseConnection *service_conn_as_base;
3939 gchar *name;
4040 gchar *conn_path;
4747
4848 tp_debug_set_flags ("all");
4949 mainloop = g_main_loop_new (NULL, FALSE);
50 dbus = test_dbus_daemon_dup_or_die ();
50 dbus = tp_tests_dbus_daemon_dup_or_die ();
5151
52 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
53 SIMPLE_TYPE_CONNECTION,
52 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
53 TP_TESTS_TYPE_SIMPLE_CONNECTION,
5454 "account", "me@example.com",
5555 "protocol", "simple",
5656 NULL));
6060
6161 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
6262 &name, &conn_path, &error), "");
63 test_assert_no_error (error);
63 g_assert_no_error (error);
6464
6565 conn = tp_connection_new (dbus, name, conn_path, &error);
6666 MYASSERT (conn != NULL, "");
67 test_assert_no_error (error);
67 g_assert_no_error (error);
6868 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
6969 "");
70 test_assert_no_error (error);
70 g_assert_no_error (error);
7171
7272 {
7373 const gchar *ids[] = {
7878
7979 MYASSERT (tp_cli_connection_run_request_handles (conn, -1,
8080 TP_HANDLE_TYPE_CONTACT, ids, &handles, &error, NULL), "");
81 test_assert_no_error (error);
81 g_assert_no_error (error);
8282
8383 g_array_free (handles, TRUE);
8484 }
8888 */
8989 proxy = tp_proxy_borrow_interface_by_id ((TpProxy *) conn,
9090 TP_IFACE_QUARK_CONNECTION, &error);
91 test_assert_no_error (error);
91 g_assert_no_error (error);
9292 g_signal_emit_by_name (proxy, "destroy");
9393
9494 g_idle_add_full (G_PRIORITY_LOW, no_more_idling_around, mainloop, NULL);
102102 */
103103 conn = tp_connection_new (dbus, name, conn_path, &error);
104104 MYASSERT (conn != NULL, "");
105 test_assert_no_error (error);
105 g_assert_no_error (error);
106106 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL), "");
107 test_assert_no_error (error);
107 g_assert_no_error (error);
108108
109109 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
110 test_assert_no_error (error);
110 g_assert_no_error (error);
111111
112112 g_object_unref (conn);
113113
2828 GObject *weak_object)
2929 {
3030 connection_errors++;
31 MYASSERT_SAME_STRING (error, "com.example.DomainSpecificError");
32 MYASSERT_SAME_UINT (g_hash_table_size (details), 0);
31 g_assert_cmpstr (error, ==, "com.example.DomainSpecificError");
32 g_assert_cmpuint (g_hash_table_size (details), ==, 0);
3333 }
3434
3535 static void
3939 gpointer user_data,
4040 GObject *weak_object)
4141 {
42 MYASSERT_SAME_UINT (status, TP_CONNECTION_STATUS_DISCONNECTED);
43 MYASSERT_SAME_UINT (reason, TP_CONNECTION_STATUS_REASON_NETWORK_ERROR);
42 g_assert_cmpuint (status, ==, TP_CONNECTION_STATUS_DISCONNECTED);
43 g_assert_cmpuint (reason, ==, TP_CONNECTION_STATUS_REASON_NETWORK_ERROR);
4444 g_main_loop_quit (user_data);
4545 }
4646
4848 {
4949 DOMAIN_SPECIFIC_ERROR = 0,
5050 } ExampleError;
51
52 /* example_com_error_get_type relies on this */
53 G_STATIC_ASSERT (sizeof (GType) <= sizeof (gsize));
5154
5255 static GType
5356 example_com_error_get_type (void)
6366 };
6467 GType gtype;
6568
66 tp_verify_statement (sizeof (GType) <= sizeof (gsize));
67
6869 gtype = g_enum_register_static ("ExampleError", values);
6970 g_once_init_leave (&type, gtype);
7071 }
9596 typedef struct {
9697 TpDBusDaemon *dbus;
9798 GMainLoop *mainloop;
98 SimpleConnection *service_conn;
99 TpTestsSimpleConnection *service_conn;
99100 TpBaseConnection *service_conn_as_base;
100101 gchar *conn_name;
101102 gchar *conn_path;
128129 global_setup ();
129130
130131 test->mainloop = g_main_loop_new (NULL, FALSE);
131 test->dbus = test_dbus_daemon_dup_or_die ();
132
133 test->service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
134 SIMPLE_TYPE_CONNECTION,
132 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
133
134 test->service_conn = TP_TESTS_SIMPLE_CONNECTION (
135 tp_tests_object_new_static_class (
136 TP_TESTS_TYPE_SIMPLE_CONNECTION,
135137 "account", "me@example.com",
136138 "protocol", "simple",
137139 NULL));
141143
142144 MYASSERT (tp_base_connection_register (test->service_conn_as_base, "simple",
143145 &test->conn_name, &test->conn_path, &error), "");
144 test_assert_no_error (error);
146 g_assert_no_error (error);
145147
146148 test->conn = tp_connection_new (test->dbus, test->conn_name, test->conn_path,
147149 &error);
148150 MYASSERT (test->conn != NULL, "");
149 test_assert_no_error (error);
151 g_assert_no_error (error);
150152 MYASSERT (tp_connection_run_until_ready (test->conn, TRUE, &error, NULL),
151153 "");
152 test_assert_no_error (error);
154 g_assert_no_error (error);
153155 }
154156
155157 static void
192194
193195 g_main_loop_run (test->mainloop);
194196
195 MYASSERT_SAME_UINT (connection_errors, 1);
197 g_assert_cmpuint (connection_errors, ==, 1);
196198
197199 MYASSERT (!tp_connection_run_until_ready (test->conn, FALSE, &error, NULL),
198200 "");
205207 "com.example.DomainSpecificError");
206208 g_assert (asv != NULL);
207209
208 MYASSERT_SAME_STRING (g_quark_to_string (error->domain),
210 g_assert_cmpstr (g_quark_to_string (error->domain), ==,
209211 g_quark_to_string (example_com_error_quark ()));
210 MYASSERT_SAME_UINT (error->code, DOMAIN_SPECIFIC_ERROR);
212 g_assert_cmpuint (error->code, ==, DOMAIN_SPECIFIC_ERROR);
211213 g_error_free (error);
212214 error = NULL;
213215 }
220222 GObject *weak_object)
221223 {
222224 connection_errors++;
223 MYASSERT_SAME_STRING (error, "net.example.WTF");
224 MYASSERT_SAME_UINT (g_hash_table_size (details), 0);
225 g_assert_cmpstr (error, ==, "net.example.WTF");
226 g_assert_cmpuint (g_hash_table_size (details), ==, 0);
225227 }
226228
227229 static void
243245
244246 g_main_loop_run (test->mainloop);
245247
246 MYASSERT_SAME_UINT (connection_errors, 1);
248 g_assert_cmpuint (connection_errors, ==, 1);
247249
248250 MYASSERT (!tp_connection_run_until_ready (test->conn, FALSE, &error, NULL),
249251 "");
1818
1919 static GType bug15306_connection_get_type (void);
2020
21 typedef SimpleConnection Bug15306Connection;
22 typedef SimpleConnectionClass Bug15306ConnectionClass;
21 typedef TpTestsSimpleConnection Bug15306Connection;
22 typedef TpTestsSimpleConnectionClass Bug15306ConnectionClass;
2323
2424 static void bug15306_conn_iface_init (gpointer, gpointer);
2525
2626 G_DEFINE_TYPE_WITH_CODE (Bug15306Connection,
2727 bug15306_connection,
28 SIMPLE_TYPE_CONNECTION,
28 TP_TESTS_TYPE_SIMPLE_CONNECTION,
2929 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION, bug15306_conn_iface_init))
3030
3131 static void
8282 main (int argc,
8383 char **argv)
8484 {
85 SimpleConnection *service_conn;
85 TpTestsSimpleConnection *service_conn;
8686 TpBaseConnection *service_conn_as_base;
8787 TpDBusDaemon *dbus;
8888 TpConnection *conn;
9393 g_type_init ();
9494 tp_debug_set_flags ("all");
9595 mainloop = g_main_loop_new (NULL, FALSE);
96 dbus = test_dbus_daemon_dup_or_die ();
96 dbus = tp_tests_dbus_daemon_dup_or_die ();
9797
98 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
98 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
9999 bug15306_connection_get_type (),
100100 "account", "me@example.com",
101101 "protocol", "simple",
109109
110110 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
111111 &name, &conn_path, &error), "");
112 test_assert_no_error (error);
112 g_assert_no_error (error);
113113
114114 conn = tp_connection_new (dbus, name, conn_path, &error);
115115 MYASSERT (conn != NULL, "");
116 test_assert_no_error (error);
116 g_assert_no_error (error);
117117
118118 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
119119 "");
120 test_assert_no_error (error);
120 g_assert_no_error (error);
121121
122122 /* disconnect the service_conn */
123123 MYASSERT (tp_cli_connection_connect_to_status_changed (conn,
124124 on_status_changed, NULL, NULL, NULL, NULL), "");
125 simple_connection_inject_disconnect (service_conn);
125 tp_tests_simple_connection_inject_disconnect (service_conn);
126126 g_main_loop_run (mainloop);
127127
128128 g_object_unref (conn);
101101 * Assert that RequestHandles + unref releases the handles.
102102 */
103103 static void
104 test_request_and_release (SimpleConnection *service_conn,
104 test_request_and_release (TpTestsSimpleConnection *service_conn,
105105 TpConnection *client_conn)
106106 {
107107 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
119119
120120 g_main_loop_run (result.loop);
121121
122 test_assert_no_error (result.error);
122 g_assert_no_error (result.error);
123123 MYASSERT (result.ids != NULL, "");
124124 MYASSERT (result.handles != NULL, "");
125125
151151
152152 tp_connection_unref_handles (client_conn, TP_HANDLE_TYPE_CONTACT,
153153 result.handles->len, (const TpHandle *) result.handles->data);
154 test_connection_run_until_dbus_queue_processed (client_conn);
154 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
155155
156156 /* check that the handles have been released */
157157
175175 * handles, but a second unref does.
176176 */
177177 static void
178 test_request_hold_release (SimpleConnection *service_conn,
178 test_request_hold_release (TpTestsSimpleConnection *service_conn,
179179 TpConnection *client_conn)
180180 {
181181 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
194194
195195 g_main_loop_run (result.loop);
196196
197 test_assert_no_error (result.error);
197 g_assert_no_error (result.error);
198198 MYASSERT (result.ids != NULL, "");
199199 MYASSERT (result.handles != NULL, "");
200200
237237
238238 g_main_loop_run (result.loop);
239239
240 test_assert_no_error (result.error);
240 g_assert_no_error (result.error);
241241 MYASSERT (result.ids == NULL, "");
242242 MYASSERT (result.handles != NULL, "");
243243
255255
256256 tp_connection_unref_handles (client_conn, TP_HANDLE_TYPE_CONTACT,
257257 result.handles->len, (const TpHandle *) result.handles->data);
258 test_connection_run_until_dbus_queue_processed (client_conn);
258 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
259259
260260 /* check that the handles have not been released */
261261
274274
275275 tp_connection_unref_handles (client_conn, TP_HANDLE_TYPE_CONTACT,
276276 result.handles->len, (const TpHandle *) result.handles->data);
277 test_connection_run_until_dbus_queue_processed (client_conn);
277 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
278278
279279 /* check that the handles have been released */
280280
298298 char **argv)
299299 {
300300 TpDBusDaemon *dbus;
301 SimpleConnection *service_conn;
301 TpTestsSimpleConnection *service_conn;
302302 TpBaseConnection *service_conn_as_base;
303303 gchar *name;
304304 gchar *conn_path;
309309
310310 g_type_init ();
311311 tp_debug_set_flags ("all");
312 dbus = test_dbus_daemon_dup_or_die ();
313
314 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
315 SIMPLE_TYPE_CONNECTION,
312 dbus = tp_tests_dbus_daemon_dup_or_die ();
313
314 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
315 TP_TESTS_TYPE_SIMPLE_CONNECTION,
316316 "account", "me@example.com",
317317 "protocol", "simple",
318318 NULL));
322322
323323 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
324324 &name, &conn_path, &error), "");
325 test_assert_no_error (error);
325 g_assert_no_error (error);
326326
327327 client_conn = tp_connection_new (dbus, name, conn_path, &error);
328328 MYASSERT (client_conn != NULL, "");
329 test_assert_no_error (error);
329 g_assert_no_error (error);
330330 MYASSERT (tp_connection_run_until_ready (client_conn, TRUE, &error, NULL),
331331 "");
332 test_assert_no_error (error);
332 g_assert_no_error (error);
333333
334334 /* Tests */
335335
340340
341341 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
342342 "");
343 test_assert_no_error (error);
343 g_assert_no_error (error);
344344
345345 service_conn_as_base = NULL;
346346 g_object_unref (service_conn);
2929 char **argv)
3030 {
3131 TpDBusDaemon *dbus;
32 Bug16307Connection *service_conn;
32 TpTestsBug16307Connection *service_conn;
3333 TpBaseConnection *service_conn_as_base;
3434 gchar *name;
3535 gchar *conn_path;
3939 g_type_init ();
4040 tp_debug_set_flags ("all");
4141 mainloop = g_main_loop_new (NULL, FALSE);
42 dbus = test_dbus_daemon_dup_or_die ();
42 dbus = tp_tests_dbus_daemon_dup_or_die ();
4343
4444 /* service side */
45 service_conn = BUG16307_CONNECTION (test_object_new_static_class (
46 BUG16307_TYPE_CONNECTION,
45 service_conn = TP_TESTS_BUG16307_CONNECTION (
46 tp_tests_object_new_static_class (
47 TP_TESTS_TYPE_BUG16307_CONNECTION,
4748 "account", "me@example.com",
4849 "protocol", "simple",
4950 NULL));
5354
5455 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
5556 &name, &conn_path, &error), "");
56 test_assert_no_error (error);
57 g_assert_no_error (error);
5758
5859 /* client side */
5960 conn = tp_connection_new (dbus, name, conn_path, &error);
6061 MYASSERT (conn != NULL, "");
61 test_assert_no_error (error);
62 g_assert_no_error (error);
6263
63 bug16307_connection_inject_get_status_return (service_conn);
64 tp_tests_bug16307_connection_inject_get_status_return (service_conn);
6465
6566 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
6667 "");
67 test_assert_no_error (error);
68 g_assert_no_error (error);
6869
6970 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
70 test_assert_no_error (error);
71 g_assert_no_error (error);
7172
7273 service_conn_as_base = NULL;
7374 g_object_unref (service_conn);
1919
2020 typedef struct {
2121 TpDBusDaemon *dbus;
22 SimpleConnection *service_conn;
22 TpTestsSimpleConnection *service_conn;
2323 TpBaseConnection *service_conn_as_base;
2424 gchar *conn_name;
2525 gchar *conn_path;
5656
5757 g_type_init ();
5858 tp_debug_set_flags ("all");
59 test->dbus = test_dbus_daemon_dup_or_die ();
60
61 test->service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
62 SIMPLE_TYPE_CONNECTION,
59 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
60
61 test->service_conn = TP_TESTS_SIMPLE_CONNECTION (
62 tp_tests_object_new_static_class (
63 TP_TESTS_TYPE_SIMPLE_CONNECTION,
6364 "account", "me@example.com",
6465 "protocol", "simple-protocol",
6566 NULL));
127128 MYASSERT (!tp_connection_run_until_ready (test->conn, TRUE, &error, NULL),
128129 "");
129130 g_assert (error != NULL);
130 MYASSERT_SAME_ERROR (&invalidated_for_test, error);
131 g_assert_error (error, invalidated_for_test.domain,
132 invalidated_for_test.code);
133 g_assert_cmpstr (error->message, ==, invalidated_for_test.message);
131134 g_error_free (error);
132135 }
133136
358361 tp_connection_call_when_ready (test->conn, conn_ready, test);
359362 tp_proxy_invalidate ((TpProxy *) test->conn, &invalidated_for_test);
360363 g_assert_cmpint (test->cwr_ready, ==, TRUE);
361 MYASSERT_SAME_ERROR (&invalidated_for_test, test->cwr_error);
364 g_assert_error (test->cwr_error, invalidated_for_test.domain,
365 invalidated_for_test.code);
366 g_assert_cmpstr (test->cwr_error->message, ==, invalidated_for_test.message);
362367 g_clear_error (&test->cwr_error);
363368
364369 /* Connection already invalid, so we are called back synchronously */
367372 test->cwr_error = NULL;
368373 tp_connection_call_when_ready (test->conn, conn_ready, test);
369374 g_assert (test->cwr_ready);
370 MYASSERT_SAME_ERROR (&invalidated_for_test, test->cwr_error);
375 g_assert_error (test->cwr_error, invalidated_for_test.domain,
376 invalidated_for_test.code);
377 g_assert_cmpstr (test->cwr_error->message, ==, invalidated_for_test.message);
371378 g_error_free (test->cwr_error);
372379 test->cwr_error = NULL;
373380 }
4646
4747 g_type_init ();
4848 tp_debug_set_flags ("all");
49 test->dbus = test_dbus_daemon_dup_or_die ();
50
51 test->service_conn = test_object_new_static_class (
49 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
50
51 test->service_conn = tp_tests_object_new_static_class (
5252 EXAMPLE_TYPE_CONTACT_LIST_CONNECTION,
5353 "account", "me@example.com",
5454 "simulation-delay", 0,
7070 g_assert (test->conn != NULL);
7171 g_assert_no_error (error);
7272 tp_cli_connection_call_connect (test->conn, -1, NULL, NULL, NULL, NULL);
73 test_proxy_run_until_prepared (test->conn, features);
73 tp_tests_proxy_run_until_prepared (test->conn, features);
7474
7575 g_assert (tp_proxy_is_prepared (test->conn, TP_CONNECTION_FEATURE_CORE));
7676 g_assert (tp_proxy_is_prepared (test->conn,
107107 tp_handle_unref (test->contact_repo, test->wim);
108108 tp_handle_unref (test->contact_repo, test->ninja);
109109
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);
110 tp_clear_object (&test->conn);
111 tp_clear_object (&test->publish);
112 tp_clear_object (&test->subscribe);
113 tp_clear_object (&test->stored);
114 tp_clear_object (&test->group);
115115
116116 /* make a new TpConnection just to disconnect the underlying Connection,
117117 * so we don't leak it */
164164 g_hash_table_unref (props);
165165 g_hash_table_unref (asv);
166166
167 test_proxy_run_until_prepared (ret, NULL);
167 tp_tests_proxy_run_until_prepared (ret, NULL);
168168 return ret;
169169 }
170170
115115 g_main_loop_run (result.loop);
116116
117117 MYASSERT (result.error != NULL, ": should fail as the CM is broken");
118 MYASSERT_SAME_UINT (result.error->domain, TP_DBUS_ERRORS);
118 g_assert_cmpuint (result.error->domain, ==, TP_DBUS_ERRORS);
119119 MYASSERT (result.error->code == TP_DBUS_ERROR_INCONSISTENT,
120120 ": %i != %i", result.error->code, TP_DBUS_ERROR_INCONSISTENT);
121121
133133 char **argv)
134134 {
135135 TpDBusDaemon *dbus;
136 ContactsConnection *service_conn;
136 TpTestsContactsConnection *service_conn;
137137 TpBaseConnection *service_conn_as_base;
138138 gchar *name;
139139 gchar *conn_path;
144144
145145 g_type_init ();
146146 tp_debug_set_flags ("all");
147 dbus = test_dbus_daemon_dup_or_die ();
147 dbus = tp_tests_dbus_daemon_dup_or_die ();
148148
149149 DEBUG ("a");
150 service_conn = CONTACTS_CONNECTION (test_object_new_static_class (
151 BUG_19101_TYPE_CONNECTION,
150 service_conn = TP_TESTS_CONTACTS_CONNECTION (
151 tp_tests_object_new_static_class (
152 TP_TESTS_TYPE_BUG19101_CONNECTION,
152153 "account", "me@example.com",
153154 "protocol", "simple",
154155 NULL));
159160
160161 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
161162 &name, &conn_path, &error), "");
162 test_assert_no_error (error);
163 g_assert_no_error (error);
163164
164165 client_conn = tp_connection_new (dbus, name, conn_path, &error);
165166 MYASSERT (client_conn != NULL, "");
166 test_assert_no_error (error);
167 g_assert_no_error (error);
167168 MYASSERT (tp_connection_run_until_ready (client_conn, TRUE, &error, NULL),
168169 "");
169 test_assert_no_error (error);
170 g_assert_no_error (error);
170171
171172 /* Tests */
172173
176177
177178 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
178179 "");
179 test_assert_no_error (error);
180 g_assert_no_error (error);
180181 g_object_unref (client_conn);
181182
182183 service_conn_as_base = NULL;
1818 #include "tests/lib/util.h"
1919
2020 static void
21 test_no_features (ContactsConnection *service_conn,
21 test_no_features (TpTestsContactsConnection *service_conn,
2222 TpConnection *client_conn,
2323 GArray *handles)
2424 {
3030
3131 MYASSERT (tp_cli_connection_interface_contacts_run_get_contact_attributes (
3232 client_conn, -1, handles, NULL, FALSE, &contacts, &error, NULL), "");
33 test_assert_no_error (error);
34 MYASSERT_SAME_UINT (g_hash_table_size (contacts), 3);
33 g_assert_no_error (error);
34 g_assert_cmpuint (g_hash_table_size (contacts), ==, 3);
3535
3636 attrs = g_hash_table_lookup (contacts,
3737 GUINT_TO_POINTER (g_array_index (handles, guint, 0)));
3838 MYASSERT (attrs != NULL, "");
39 MYASSERT_SAME_STRING (
40 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
39 g_assert_cmpstr (
40 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
4141 "alice");
4242
4343 attrs = g_hash_table_lookup (contacts,
4444 GUINT_TO_POINTER (g_array_index (handles, guint, 1)));
4545 MYASSERT (attrs != NULL, "");
46 MYASSERT_SAME_STRING (
47 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
46 g_assert_cmpstr (
47 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
4848 "bob");
4949
5050 attrs = g_hash_table_lookup (contacts,
5151 GUINT_TO_POINTER (g_array_index (handles, guint, 2)));
5252 MYASSERT (attrs != NULL, "");
53 MYASSERT_SAME_STRING (
54 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
53 g_assert_cmpstr (
54 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
5555 "chris");
5656
5757 g_hash_table_destroy (contacts);
5858 }
5959
6060 static void
61 test_features (ContactsConnection *service_conn,
61 test_features (TpTestsContactsConnection *service_conn,
6262 TpConnection *client_conn,
6363 GArray *handles)
6464 {
7676 MYASSERT (tp_cli_connection_interface_contacts_run_get_contact_attributes (
7777 client_conn, -1, handles, interfaces, FALSE, &contacts, &error, NULL),
7878 "");
79 test_assert_no_error (error);
80 MYASSERT_SAME_UINT (g_hash_table_size (contacts), 3);
79 g_assert_no_error (error);
80 g_assert_cmpuint (g_hash_table_size (contacts), ==, 3);
8181
8282 attrs = g_hash_table_lookup (contacts,
8383 GUINT_TO_POINTER (g_array_index (handles, guint, 0)));
8484 MYASSERT (attrs != NULL, "");
85 MYASSERT_SAME_STRING (
86 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
85 g_assert_cmpstr (
86 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
8787 "alice");
88 MYASSERT_SAME_STRING (
89 tp_asv_get_string (attrs,
90 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"),
88 g_assert_cmpstr (
89 tp_asv_get_string (attrs,
90 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"), ==,
9191 "Alice in Wonderland");
92 MYASSERT_SAME_STRING (
93 tp_asv_get_string (attrs,
94 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"),
92 g_assert_cmpstr (
93 tp_asv_get_string (attrs,
94 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"), ==,
9595 "aaaaa");
9696
9797 attrs = g_hash_table_lookup (contacts,
9898 GUINT_TO_POINTER (g_array_index (handles, guint, 1)));
9999 MYASSERT (attrs != NULL, "");
100 MYASSERT_SAME_STRING (
101 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
100 g_assert_cmpstr (
101 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
102102 "bob");
103 MYASSERT_SAME_STRING (
104 tp_asv_get_string (attrs,
105 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"),
103 g_assert_cmpstr (
104 tp_asv_get_string (attrs,
105 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"), ==,
106106 "Bob the Builder");
107 MYASSERT_SAME_STRING (
108 tp_asv_get_string (attrs,
109 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"),
107 g_assert_cmpstr (
108 tp_asv_get_string (attrs,
109 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"), ==,
110110 "bbbbb");
111111
112112 attrs = g_hash_table_lookup (contacts,
113113 GUINT_TO_POINTER (g_array_index (handles, guint, 2)));
114114 MYASSERT (attrs != NULL, "");
115 MYASSERT_SAME_STRING (
116 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"),
115 g_assert_cmpstr (
116 tp_asv_get_string (attrs, TP_IFACE_CONNECTION "/contact-id"), ==,
117117 "chris");
118 MYASSERT_SAME_STRING (
119 tp_asv_get_string (attrs,
120 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"),
118 g_assert_cmpstr (
119 tp_asv_get_string (attrs,
120 TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias"), ==,
121121 "Christopher Robin");
122 MYASSERT_SAME_STRING (
123 tp_asv_get_string (attrs,
124 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"),
122 g_assert_cmpstr (
123 tp_asv_get_string (attrs,
124 TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token"), ==,
125125 "ccccc");
126126
127127 g_hash_table_destroy (contacts);
132132 char **argv)
133133 {
134134 TpDBusDaemon *dbus;
135 ContactsConnection *service_conn;
135 TpTestsContactsConnection *service_conn;
136136 TpBaseConnection *service_conn_as_base;
137137 gchar *name;
138138 gchar *conn_path;
143143 static const gchar * const aliases[] = { "Alice in Wonderland",
144144 "Bob the Builder", "Christopher Robin" };
145145 static const gchar * const tokens[] = { "aaaaa", "bbbbb", "ccccc" };
146 static ContactsConnectionPresenceStatusIndex statuses[] = {
147 CONTACTS_CONNECTION_STATUS_AVAILABLE, CONTACTS_CONNECTION_STATUS_BUSY,
148 CONTACTS_CONNECTION_STATUS_AWAY };
146 static TpTestsContactsConnectionPresenceStatusIndex statuses[] = {
147 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
148 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
149 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY };
149150 static const gchar * const messages[] = { "", "Fixing it",
150151 "GON OUT BACKSON" };
151152 TpHandleRepoIface *service_repo;
155156
156157 g_type_init ();
157158 tp_debug_set_flags ("all");
158 dbus = test_dbus_daemon_dup_or_die ();
159
160 service_conn = CONTACTS_CONNECTION (test_object_new_static_class (
161 CONTACTS_TYPE_CONNECTION,
159 dbus = tp_tests_dbus_daemon_dup_or_die ();
160
161 service_conn = TP_TESTS_CONTACTS_CONNECTION (
162 tp_tests_object_new_static_class (
163 TP_TESTS_TYPE_CONTACTS_CONNECTION,
162164 "account", "me@example.com",
163165 "protocol", "simple",
164166 NULL));
170172
171173 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
172174 &name, &conn_path, &error), "");
173 test_assert_no_error (error);
175 g_assert_no_error (error);
174176
175177 client_conn = tp_connection_new (dbus, name, conn_path, &error);
176178 MYASSERT (client_conn != NULL, "");
177 test_assert_no_error (error);
179 g_assert_no_error (error);
178180 MYASSERT (tp_connection_run_until_ready (client_conn, TRUE, &error, NULL),
179181 "");
180 test_assert_no_error (error);
182 g_assert_no_error (error);
181183
182184 /* Set up some contacts */
183185
188190 g_array_append_val (handles, handle);
189191 }
190192
191 contacts_connection_change_aliases (service_conn, 3,
193 tp_tests_contacts_connection_change_aliases (service_conn, 3,
192194 (const TpHandle *) handles->data, aliases);
193 contacts_connection_change_presences (service_conn, 3,
195 tp_tests_contacts_connection_change_presences (service_conn, 3,
194196 (const TpHandle *) handles->data, statuses, messages);
195 contacts_connection_change_avatar_tokens (service_conn, 3,
197 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 3,
196198 (const TpHandle *) handles->data, tokens);
197199
198200 /* Tests */
204206
205207 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
206208 "");
207 test_assert_no_error (error);
209 g_assert_no_error (error);
208210
209211 service_conn_as_base = NULL;
210212 g_object_unref (service_conn);
9292 }
9393
9494 static void
95 test_by_handle (ContactsConnection *service_conn,
95 test_by_handle (TpTestsContactsConnection *service_conn,
9696 TpConnection *client_conn)
9797 {
9898 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
137137
138138 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
139139 MYASSERT (result.invalid->len == 2, ": %u", result.invalid->len);
140 test_assert_no_error (result.error);
140 g_assert_no_error (result.error);
141141
142142 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
143143 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
144144 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
145145 contacts[0] = g_ptr_array_index (result.contacts, 0);
146 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[0]), handles[0]);
147 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
146 g_assert_cmpuint (tp_contact_get_handle (contacts[0]), ==, handles[0]);
147 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
148148 contacts[1] = g_ptr_array_index (result.contacts, 1);
149 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[1]), handles[1]);
150 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
149 g_assert_cmpuint (tp_contact_get_handle (contacts[1]), ==, handles[1]);
150 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
151151 contacts[3] = g_ptr_array_index (result.contacts, 2);
152 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[3]), handles[3]);
153 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[3]), "chris");
152 g_assert_cmpuint (tp_contact_get_handle (contacts[3]), ==, handles[3]);
153 g_assert_cmpstr (tp_contact_get_identifier (contacts[3]), ==, "chris");
154154
155155 /* clean up before doing the second request */
156156 g_array_free (result.invalid, TRUE);
181181
182182 MYASSERT (result.contacts->len == 4, ": %u", result.contacts->len);
183183 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
184 test_assert_no_error (result.error);
184 g_assert_no_error (result.error);
185185
186186 /* 0, 1 and 3 we already have a reference to */
187187 MYASSERT (g_ptr_array_index (result.contacts, 0) == contacts[0], "");
193193
194194 /* 2 we don't */
195195 contacts[2] = g_ptr_array_index (result.contacts, 2);
196 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[2]), handles[2]);
197 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[2]), "dora");
196 g_assert_cmpuint (tp_contact_get_handle (contacts[2]), ==, handles[2]);
197 g_assert_cmpstr (tp_contact_get_identifier (contacts[2]), ==, "dora");
198198
199199 /* clean up refs to contacts and assert that they aren't leaked */
200200
211211 }
212212
213213 /* wait for ReleaseHandles to run */
214 test_connection_run_until_dbus_queue_processed (client_conn);
214 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
215215
216216 /* unref all the handles we created service-side */
217217 tp_handle_unref (service_repo, handles[0]);
231231 }
232232
233233 static void
234 test_no_features (ContactsConnection *service_conn,
234 test_no_features (TpTestsContactsConnection *service_conn,
235235 TpConnection *client_conn)
236236 {
237237 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
257257
258258 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
259259 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
260 test_assert_no_error (result.error);
260 g_assert_no_error (result.error);
261261
262262 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
263263 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
269269 for (i = 0; i < 3; i++)
270270 {
271271 MYASSERT (tp_contact_get_connection (contacts[i]) == client_conn, "");
272 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
273 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
274 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
272 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
273 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==, ids[i]);
274 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
275275 tp_contact_get_identifier (contacts[i]));
276276 MYASSERT (tp_contact_get_avatar_token (contacts[i]) == NULL,
277277 ": %s", tp_contact_get_avatar_token (contacts[i]));
278 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[i]),
278 g_assert_cmpuint (tp_contact_get_presence_type (contacts[i]), ==,
279279 TP_CONNECTION_PRESENCE_TYPE_UNSET);
280 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[i]), "");
281 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]), "");
280 g_assert_cmpstr (tp_contact_get_presence_status (contacts[i]), ==, "");
281 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==, "");
282282 MYASSERT (!tp_contact_has_feature (contacts[i],
283283 TP_CONTACT_FEATURE_ALIAS), "");
284284 MYASSERT (!tp_contact_has_feature (contacts[i],
292292 for (i = 0; i < 3; i++)
293293 {
294294 g_object_unref (contacts[i]);
295 test_connection_run_until_dbus_queue_processed (client_conn);
295 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
296296 tp_handle_unref (service_repo, handles[i]);
297297 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
298298 }
357357 * FIXME: Ideally we should have a MYASSERT_SAME_ASV */
358358 #define ASSERT_SAME_LOCATION(left, right)\
359359 G_STMT_START {\
360 MYASSERT_SAME_UINT (g_hash_table_size (left), g_hash_table_size (right));\
361 MYASSERT_SAME_STRING(g_hash_table_lookup (left, "country"),\
360 g_assert_cmpuint (g_hash_table_size (left), ==, \
361 g_hash_table_size (right));\
362 g_assert_cmpstr (g_hash_table_lookup (left, "country"), ==,\
362363 g_hash_table_lookup (right, "country"));\
363364 } G_STMT_END
364365
365366 static void
366 test_upgrade (ContactsConnection *service_conn,
367 test_upgrade (TpTestsContactsConnection *service_conn,
367368 TpConnection *client_conn)
368369 {
369370 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
372373 static const gchar * const aliases[] = { "Alice in Wonderland",
373374 "Bob the Builder", "Christopher Robin" };
374375 static const gchar * const tokens[] = { "aaaaa", "bbbbb", "ccccc" };
375 static ContactsConnectionPresenceStatusIndex statuses[] = {
376 CONTACTS_CONNECTION_STATUS_AVAILABLE, CONTACTS_CONNECTION_STATUS_BUSY,
377 CONTACTS_CONNECTION_STATUS_AWAY };
376 static TpTestsContactsConnectionPresenceStatusIndex statuses[] = {
377 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
378 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
379 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY };
378380 static const gchar * const messages[] = { "", "Fixing it",
379381 "GON OUT BACKSON" };
380382 GHashTable *location_1 = tp_asv_new (
397399 for (i = 0; i < 3; i++)
398400 handles[i] = tp_handle_ensure (service_repo, ids[i], NULL, NULL);
399401
400 contacts_connection_change_aliases (service_conn, 3, handles, aliases);
401 contacts_connection_change_presences (service_conn, 3, handles,
402 tp_tests_contacts_connection_change_aliases (service_conn, 3, handles,
403 aliases);
404 tp_tests_contacts_connection_change_presences (service_conn, 3, handles,
402405 statuses, messages);
403 contacts_connection_change_avatar_tokens (service_conn, 3, handles, tokens);
404 contacts_connection_change_locations (service_conn, 3, handles, locations);
406 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 3, handles,
407 tokens);
408 tp_tests_contacts_connection_change_locations (service_conn, 3, handles,
409 locations);
405410
406411 tp_connection_get_contacts_by_handle (client_conn,
407412 3, handles,
413418
414419 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
415420 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
416 test_assert_no_error (result.error);
421 g_assert_no_error (result.error);
417422
418423 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
419424 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
425430 for (i = 0; i < 3; i++)
426431 {
427432 MYASSERT (tp_contact_get_connection (contacts[i]) == client_conn, "");
428 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
429 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
430 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
433 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
434 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==, ids[i]);
435 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
431436 tp_contact_get_identifier (contacts[i]));
432437 MYASSERT (tp_contact_get_avatar_token (contacts[i]) == NULL,
433438 ": %s", tp_contact_get_avatar_token (contacts[i]));
434 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[i]),
439 g_assert_cmpuint (tp_contact_get_presence_type (contacts[i]), ==,
435440 TP_CONNECTION_PRESENCE_TYPE_UNSET);
436 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[i]), "");
437 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]), "");
441 g_assert_cmpstr (tp_contact_get_presence_status (contacts[i]), ==, "");
442 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==, "");
438443 MYASSERT (!tp_contact_has_feature (contacts[i],
439444 TP_CONTACT_FEATURE_ALIAS), "");
440445 MYASSERT (!tp_contact_has_feature (contacts[i],
462467
463468 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
464469 MYASSERT (result.invalid == NULL, "");
465 test_assert_no_error (result.error);
470 g_assert_no_error (result.error);
466471
467472 for (i = 0; i < 3; i++)
468473 {
472477
473478 for (i = 0; i < 3; i++)
474479 {
475 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
476 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
480 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
481 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==, ids[i]);
477482
478483 MYASSERT (tp_contact_has_feature (contacts[i],
479484 TP_CONTACT_FEATURE_ALIAS), "");
480 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]), aliases[i]);
485 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==, aliases[i]);
481486
482487 MYASSERT (tp_contact_has_feature (contacts[i],
483488 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
484 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
489 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
485490 tokens[i]);
486491
487492 MYASSERT (tp_contact_has_feature (contacts[i],
488493 TP_CONTACT_FEATURE_PRESENCE), "");
489 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
494 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
490495 messages[i]);
491496
492497 MYASSERT (tp_contact_has_feature (contacts[i],
495500 locations[i]);
496501 }
497502
498 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
503 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
499504 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
500 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
505 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
501506 "available");
502 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
507 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
503508 TP_CONNECTION_PRESENCE_TYPE_BUSY);
504 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
505 "busy");
506 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[2]),
509 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==, "busy");
510 g_assert_cmpuint (tp_contact_get_presence_type (contacts[2]), ==,
507511 TP_CONNECTION_PRESENCE_TYPE_AWAY);
508 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[2]),
509 "away");
512 g_assert_cmpstr (tp_contact_get_presence_status (contacts[2]), ==, "away");
510513
511514 for (i = 0; i < 3; i++)
512515 {
513516 g_object_unref (contacts[i]);
514 test_connection_run_until_dbus_queue_processed (client_conn);
517 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
515518 tp_handle_unref (service_repo, handles[i]);
516519 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
517520 }
580583 }
581584
582585 static void
583 test_features (ContactsConnection *service_conn,
586 test_features (TpTestsContactsConnection *service_conn,
584587 TpConnection *client_conn)
585588 {
586589 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
589592 static const gchar * const aliases[] = { "Alice in Wonderland",
590593 "Bob the Builder", "Christopher Robin" };
591594 static const gchar * const tokens[] = { "aaaaa", "bbbbb", "ccccc" };
592 static ContactsConnectionPresenceStatusIndex statuses[] = {
593 CONTACTS_CONNECTION_STATUS_AVAILABLE, CONTACTS_CONNECTION_STATUS_BUSY,
594 CONTACTS_CONNECTION_STATUS_AWAY };
595 static TpTestsContactsConnectionPresenceStatusIndex statuses[] = {
596 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
597 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
598 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY };
595599 static const gchar * const messages[] = { "", "Fixing it",
596600 "GON OUT BACKSON" };
597601 static const gchar * const new_aliases[] = { "Alice [at a tea party]",
598602 "Bob the Plumber" };
599603 static const gchar * const new_tokens[] = { "AAAA", "BBBB" };
600 static ContactsConnectionPresenceStatusIndex new_statuses[] = {
601 CONTACTS_CONNECTION_STATUS_AWAY, CONTACTS_CONNECTION_STATUS_AVAILABLE };
604 static TpTestsContactsConnectionPresenceStatusIndex new_statuses[] = {
605 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY,
606 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE };
602607 static const gchar * const new_messages[] = { "At the Mad Hatter's",
603608 "It'll cost you" };
604609 GHashTable *location_1 = tp_asv_new (
638643 for (i = 0; i < 3; i++)
639644 handles[i] = tp_handle_ensure (service_repo, ids[i], NULL, NULL);
640645
641 contacts_connection_change_aliases (service_conn, 3, handles, aliases);
642 contacts_connection_change_presences (service_conn, 3, handles,
646 tp_tests_contacts_connection_change_aliases (service_conn, 3, handles,
647 aliases);
648 tp_tests_contacts_connection_change_presences (service_conn, 3, handles,
643649 statuses, messages);
644 contacts_connection_change_avatar_tokens (service_conn, 3, handles, tokens);
645 contacts_connection_change_locations (service_conn, 3, handles, locations);
650 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 3, handles,
651 tokens);
652 tp_tests_contacts_connection_change_locations (service_conn, 3, handles,
653 locations);
646654
647655 tp_connection_get_contacts_by_handle (client_conn,
648656 3, handles,
654662
655663 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
656664 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
657 test_assert_no_error (result.error);
665 g_assert_no_error (result.error);
658666
659667 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
660668 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
665673
666674 for (i = 0; i < 3; i++)
667675 {
668 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
669 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
676 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
677 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==, ids[i]);
670678
671679 MYASSERT (tp_contact_has_feature (contacts[i],
672680 TP_CONTACT_FEATURE_ALIAS), "");
673 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]), aliases[i]);
681 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==, aliases[i]);
674682
675683 MYASSERT (tp_contact_has_feature (contacts[i],
676684 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
677 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
685 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
678686 tokens[i]);
679687
680688 MYASSERT (tp_contact_has_feature (contacts[i],
681689 TP_CONTACT_FEATURE_PRESENCE), "");
682 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
690 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
683691 messages[i]);
684692
685693 MYASSERT (tp_contact_has_feature (contacts[i],
688696 locations[i]);
689697 }
690698
691 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
699 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
692700 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
693 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
701 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
694702 "available");
695 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
696
703 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
697704 TP_CONNECTION_PRESENCE_TYPE_BUSY);
698 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
705 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==,
699706 "busy");
700 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[2]),
707 g_assert_cmpuint (tp_contact_get_presence_type (contacts[2]), ==,
701708 TP_CONNECTION_PRESENCE_TYPE_AWAY);
702 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[2]),
709 g_assert_cmpstr (tp_contact_get_presence_status (contacts[2]), ==,
703710 "away");
704711
705712 /* exercise GObject properties in a basic way */
715722 "location", &from_gobject.location,
716723 NULL);
717724 MYASSERT (from_gobject.connection == client_conn, "");
718 MYASSERT_SAME_UINT (from_gobject.handle, handles[0]);
719 MYASSERT_SAME_STRING (from_gobject.identifier, "alice");
720 MYASSERT_SAME_STRING (from_gobject.alias, "Alice in Wonderland");
721 MYASSERT_SAME_STRING (from_gobject.avatar_token, "aaaaa");
722 MYASSERT_SAME_UINT (from_gobject.presence_type,
725 g_assert_cmpuint (from_gobject.handle, ==, handles[0]);
726 g_assert_cmpstr (from_gobject.identifier, ==, "alice");
727 g_assert_cmpstr (from_gobject.alias, ==, "Alice in Wonderland");
728 g_assert_cmpstr (from_gobject.avatar_token, ==, "aaaaa");
729 g_assert_cmpuint (from_gobject.presence_type, ==,
723730 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
724 MYASSERT_SAME_STRING (from_gobject.presence_status, "available");
725 MYASSERT_SAME_STRING (from_gobject.presence_message, "");
731 g_assert_cmpstr (from_gobject.presence_status, ==, "available");
732 g_assert_cmpstr (from_gobject.presence_message, ==, "");
726733 ASSERT_SAME_LOCATION (from_gobject.location, locations[0]);
727734 g_object_unref (from_gobject.connection);
728735 g_free (from_gobject.identifier);
741748 G_CALLBACK (contact_notify_cb), &notify_ctx_chris);
742749
743750 /* Change Alice and Bob's contact info, leave Chris as-is */
744 contacts_connection_change_aliases (service_conn, 2, handles, new_aliases);
745 contacts_connection_change_presences (service_conn, 2, handles,
751 tp_tests_contacts_connection_change_aliases (service_conn, 2, handles,
752 new_aliases);
753 tp_tests_contacts_connection_change_presences (service_conn, 2, handles,
746754 new_statuses, new_messages);
747 contacts_connection_change_avatar_tokens (service_conn, 2, handles,
755 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 2, handles,
748756 new_tokens);
749 contacts_connection_change_locations (service_conn, 2, handles,
757 tp_tests_contacts_connection_change_locations (service_conn, 2, handles,
750758 new_locations);
751 test_connection_run_until_dbus_queue_processed (client_conn);
759 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
752760
753761 g_assert (notify_ctx_is_fully_changed (&notify_ctx_alice));
754762 g_assert (!notify_ctx_is_changed (&notify_ctx_chris));
755763
756764 for (i = 0; i < 2; i++)
757765 {
758 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
759 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
766 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
767 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
768 ids[i]);
760769
761770 MYASSERT (tp_contact_has_feature (contacts[i],
762771 TP_CONTACT_FEATURE_ALIAS), "");
763 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
772 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
764773 new_aliases[i]);
765774
766775 MYASSERT (tp_contact_has_feature (contacts[i],
767776 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
768 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
777 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
769778 new_tokens[i]);
770779
771780 MYASSERT (tp_contact_has_feature (contacts[i],
772781 TP_CONTACT_FEATURE_PRESENCE), "");
773 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
782 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
774783 new_messages[i]);
775784
776785 MYASSERT (tp_contact_has_feature (contacts[i],
779788 new_locations[i]);
780789 }
781790
782 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
791 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
783792 TP_CONNECTION_PRESENCE_TYPE_AWAY);
784 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
793 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
785794 "away");
786 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
795 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
787796 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
788 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
797 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==,
789798 "available");
790799
791800 for (i = 0; i < 3; i++)
792801 {
793802 g_object_unref (contacts[i]);
794 test_connection_run_until_dbus_queue_processed (client_conn);
803 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
795804 tp_handle_unref (service_repo, handles[i]);
796805 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
797806 }
906915 MYASSERT (result.contacts->len == 0, ": %u", result.contacts->len);
907916 MYASSERT (g_hash_table_size (result.bad_ids) == 1, ": %u",
908917 g_hash_table_size (result.bad_ids));
909 test_assert_no_error (result.error);
918 g_assert_no_error (result.error);
910919
911920 e = g_hash_table_lookup (result.bad_ids, "Not valid");
912921 MYASSERT (e != NULL, "");
931940 MYASSERT (result.contacts->len == 2, ": %u", result.contacts->len);
932941 MYASSERT (g_hash_table_size (result.bad_ids) == 0, ": %u",
933942 g_hash_table_size (result.bad_ids));
934 test_assert_no_error (result.error);
943 g_assert_no_error (result.error);
935944
936945 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
937946 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
938947 contacts[0] = g_ptr_array_index (result.contacts, 0);
939 MYASSERT_SAME_STRING (result.good_ids[0], "Alice");
940 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
948 g_assert_cmpstr (result.good_ids[0], ==, "Alice");
949 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
941950 contacts[1] = g_ptr_array_index (result.contacts, 1);
942 MYASSERT_SAME_STRING (result.good_ids[1], "Bob");
943 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
951 g_assert_cmpstr (result.good_ids[1], ==, "Bob");
952 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
944953
945954 for (i = 0; i < 2; i++)
946955 {
967976 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
968977 MYASSERT (g_hash_table_size (result.bad_ids) == 2, ": %u",
969978 g_hash_table_size (result.bad_ids));
970 test_assert_no_error (result.error);
979 g_assert_no_error (result.error);
971980
972981 e = g_hash_table_lookup (result.bad_ids, "Not valid");
973982 MYASSERT (e != NULL, "");
979988 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
980989 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
981990 contacts[0] = g_ptr_array_index (result.contacts, 0);
982 MYASSERT_SAME_STRING (result.good_ids[0], "Alice");
983 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
991 g_assert_cmpstr (result.good_ids[0], ==, "Alice");
992 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
984993 contacts[1] = g_ptr_array_index (result.contacts, 1);
985 MYASSERT_SAME_STRING (result.good_ids[1], "Bob");
986 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
994 g_assert_cmpstr (result.good_ids[1], ==, "Bob");
995 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
987996 contacts[2] = g_ptr_array_index (result.contacts, 2);
988 MYASSERT_SAME_STRING (result.good_ids[2], "Chris");
989 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[2]), "chris");
997 g_assert_cmpstr (result.good_ids[2], ==, "Chris");
998 g_assert_cmpstr (tp_contact_get_identifier (contacts[2]), ==, "chris");
990999
9911000 /* clean up refs to contacts */
9921001
9961005 }
9971006
9981007 /* wait for ReleaseHandles to run */
999 test_connection_run_until_dbus_queue_processed (client_conn);
1008 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
10001009
10011010 /* remaining cleanup */
10021011 g_main_loop_unref (result.loop);
10141023 char **argv)
10151024 {
10161025 TpBaseConnection *base_connection;
1017 ContactsConnection *legacy_service_conn;
1026 TpTestsContactsConnection *legacy_service_conn;
10181027 GError *error = NULL;
10191028 TpConnection *legacy_client_conn;
10201029
10231032 g_type_init ();
10241033 tp_debug_set_flags ("all");
10251034
1026 test_create_and_connect_conn (LEGACY_CONTACTS_TYPE_CONNECTION, "me@test.com",
1027 &base_connection, &legacy_client_conn);
1028
1029 legacy_service_conn = CONTACTS_CONNECTION (base_connection);
1035 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION,
1036 "me@test.com", &base_connection, &legacy_client_conn);
1037
1038 legacy_service_conn = TP_TESTS_CONTACTS_CONNECTION (base_connection);
10301039
10311040 /* Tests */
10321041 test_by_handle (legacy_service_conn, legacy_client_conn);
10391048
10401049 MYASSERT (tp_cli_connection_run_disconnect (legacy_client_conn, -1, &error,
10411050 NULL), "");
1042 test_assert_no_error (error);
1051 g_assert_no_error (error);
10431052
10441053 g_object_unref (legacy_client_conn);
10451054 g_object_unref (legacy_service_conn);
113113 }
114114
115115 static void
116 reset_result (Result *result)
117 {
118 g_clear_error (&(result->error));
119
120 if (result->contacts != NULL)
121 {
122 g_ptr_array_foreach (result->contacts, (GFunc) g_object_unref, NULL);
123 g_ptr_array_unref (result->contacts);
124 result->contacts = NULL;
125 }
126
127 if (result->invalid)
128 {
129 g_array_unref (result->invalid);
130 result->invalid = NULL;
131 }
132
133 if (result->good_ids)
134 {
135 g_strfreev (result->good_ids);
136 result->good_ids = NULL;
137 }
138
139 if (result->bad_ids)
140 {
141 g_hash_table_unref (result->bad_ids);
142 result->bad_ids = NULL;
143 }
144 }
145
146 static void
147 contact_info_verify (TpContact *contact)
148 {
149 GList *info;
150 TpContactInfoField *field;
151
152 g_assert (tp_contact_has_feature (contact, TP_CONTACT_FEATURE_CONTACT_INFO));
153
154 info = tp_contact_get_contact_info (contact);
155 g_assert (info != NULL);
156 g_assert (info->data != NULL);
157 g_assert (info->next == NULL);
158
159 field = info->data;
160 g_assert_cmpstr (field->field_name, ==, "n");
161 g_assert (field->parameters != NULL);
162 g_assert (field->parameters[0] == NULL);
163 g_assert (field->field_value != NULL);
164 g_assert_cmpstr (field->field_value[0], ==, "Foo");
165 g_assert (field->field_value[1] == NULL);
166
167 g_list_free (info);
168 }
169
170 static void
171 contact_info_notify_cb (TpContact *contact,
172 GParamSpec *pspec,
173 Result *result)
174 {
175 contact_info_verify (contact);
176 finish (result);
177 }
178
179 static void
180 contact_info_prepare_cb (GObject *object,
181 GAsyncResult *res,
182 gpointer user_data)
183 {
184 TpConnection *connection = TP_CONNECTION (object);
185 Result *result = user_data;
186
187 if (tp_proxy_prepare_finish (connection, res, &result->error))
188 {
189 TpContactInfoFlags flags;
190 GList *specs;
191 TpContactInfoFieldSpec *spec;
192
193 flags = tp_connection_get_contact_info_flags (connection);
194 g_assert_cmpint (flags, ==, TP_CONTACT_INFO_FLAG_PUSH |
195 TP_CONTACT_INFO_FLAG_CAN_SET);
196
197 specs = tp_connection_get_contact_info_supported_fields (connection);
198 g_assert (specs != NULL);
199 g_assert (specs->data != NULL);
200 g_assert (specs->next == NULL);
201
202 spec = specs->data;
203 g_assert_cmpstr (spec->name, ==, "n");
204 g_assert (spec->parameters != NULL);
205 g_assert (spec->parameters[0] == NULL);
206 g_assert_cmpint (spec->flags, ==, 0);
207 g_assert_cmpint (spec->max, ==, 0);
208
209 g_list_free (specs);
210 }
211
212 finish (result);
213 }
214
215 static void
216 contact_info_set_cb (GObject *object,
217 GAsyncResult *res,
218 gpointer user_data)
219 {
220 TpConnection *connection = TP_CONNECTION (object);
221 Result *result = user_data;
222
223 tp_connection_set_contact_info_finish (connection, res, &result->error);
224 finish (result);
225 }
226
227 static void
228 contact_info_request_cb (GObject *object,
229 GAsyncResult *res,
230 gpointer user_data)
231 {
232 TpContact *contact = TP_CONTACT (object);
233 Result *result = user_data;
234
235 contact_info_verify (contact);
236
237 tp_contact_request_contact_info_finish (contact, res, &result->error);
238 finish (result);
239 }
240
241 static void
242 contact_info_request_cancelled_cb (GObject *object,
243 GAsyncResult *res,
244 gpointer user_data)
245 {
246 TpContact *contact = TP_CONTACT (object);
247 Result *result = user_data;
248 GError *error = NULL;
249
250 tp_contact_request_contact_info_finish (contact, res, &error);
251 g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
252 g_clear_error (&error);
253
254 finish (result);
255 }
256
257 static gboolean
258 contact_info_request_cancel (gpointer cancellable)
259 {
260 g_cancellable_cancel (cancellable);
261 return FALSE;
262 }
263
264 static void
265 test_contact_info (TpTestsContactsConnection *service_conn,
266 TpConnection *client_conn)
267 {
268 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
269 TpHandleRepoIface *service_repo = tp_base_connection_get_handles (
270 (TpBaseConnection *) service_conn, TP_HANDLE_TYPE_CONTACT);
271 TpContactFeature features[] = { TP_CONTACT_FEATURE_CONTACT_INFO };
272 TpContact *contact;
273 TpHandle handle;
274 const gchar *field_value[] = { "Foo", NULL };
275 GPtrArray *info;
276 GList *info_list = NULL;
277 GQuark conn_features[] = { TP_CONNECTION_FEATURE_CONTACT_INFO, 0 };
278 GCancellable *cancellable;
279
280 /* Create fake info fields */
281 info = g_ptr_array_new_with_free_func ((GDestroyNotify) g_value_array_free);
282 g_ptr_array_add (info, tp_value_array_build (3,
283 G_TYPE_STRING, "n",
284 G_TYPE_STRV, NULL,
285 G_TYPE_STRV, field_value,
286 G_TYPE_INVALID));
287
288 info_list = g_list_prepend (info_list,
289 tp_contact_info_field_new ("n", NULL, (GStrv) field_value));
290
291 tp_tests_contacts_connection_set_default_contact_info (service_conn, info);
292
293 /* TEST1: Verify ContactInfo properties are correctly introspected on
294 * TpConnection */
295 tp_proxy_prepare_async (client_conn, conn_features, contact_info_prepare_cb,
296 &result);
297 g_main_loop_run (result.loop);
298 g_assert_no_error (result.error);
299
300 /* TEST2: Set contact info on the connection, then get the self TpContact.
301 * This tests the set operation works correctly and also test TpContact
302 * correctly introspects the ContactInfo when the feature is requested. */
303 tp_connection_set_contact_info_async (client_conn, info_list,
304 contact_info_set_cb, &result);
305 g_main_loop_run (result.loop);
306 g_assert_no_error (result.error);
307
308 handle = tp_connection_get_self_handle (client_conn);
309 tp_connection_get_contacts_by_handle (client_conn,
310 1, &handle,
311 G_N_ELEMENTS (features), features,
312 by_handle_cb,
313 &result, finish, NULL);
314 g_main_loop_run (result.loop);
315 g_assert_no_error (result.error);
316
317 contact = g_ptr_array_index (result.contacts, 0);
318 contact_info_verify (contact);
319
320 reset_result (&result);
321
322 /* TEST3: Create a TpContact with the INFO feature. Then change its info in
323 * the CM. That should emit "notify::info" signal on the TpContact. */
324 handle = tp_handle_ensure (service_repo, "info-test-3", NULL, NULL);
325 tp_connection_get_contacts_by_handle (client_conn,
326 1, &handle,
327 G_N_ELEMENTS (features), features,
328 by_handle_cb,
329 &result, finish, NULL);
330 g_main_loop_run (result.loop);
331 g_assert_no_error (result.error);
332
333 contact = g_ptr_array_index (result.contacts, 0);
334 g_signal_connect (contact, "notify::contact-info",
335 G_CALLBACK (contact_info_notify_cb), &result);
336
337 tp_tests_contacts_connection_change_contact_info (service_conn, handle,
338 info);
339 g_main_loop_run (result.loop);
340 g_assert_no_error (result.error);
341
342 reset_result (&result);
343 tp_handle_unref (service_repo, handle);
344
345 /* TEST 4: First set the info in the CM for an handle, then create a TpContact
346 * without INFO feature, and finally refresh the contact's info. */
347 handle = tp_handle_ensure (service_repo, "info-test-4", NULL, NULL);
348 tp_tests_contacts_connection_change_contact_info (service_conn, handle,
349 info);
350
351 tp_connection_get_contacts_by_handle (client_conn,
352 1, &handle,
353 0, NULL,
354 by_handle_cb,
355 &result, finish, NULL);
356 g_main_loop_run (result.loop);
357 g_assert_no_error (result.error);
358
359 contact = g_ptr_array_index (result.contacts, 0);
360 g_assert (tp_contact_get_contact_info (contact) == NULL);
361
362 g_signal_connect (contact, "notify::contact-info",
363 G_CALLBACK (contact_info_notify_cb), &result);
364 tp_connection_refresh_contact_info (client_conn, 1, &contact);
365 g_main_loop_run (result.loop);
366 g_assert_no_error (result.error);
367
368 reset_result (&result);
369 tp_handle_unref (service_repo, handle);
370
371 /* TEST5: Create a TpContact without INFO feature, then request the contact's
372 * info. */
373 handle = tp_handle_ensure (service_repo, "info-test-5", NULL, NULL);
374 tp_connection_get_contacts_by_handle (client_conn,
375 1, &handle,
376 0, NULL,
377 by_handle_cb,
378 &result, finish, NULL);
379 g_main_loop_run (result.loop);
380 g_assert_no_error (result.error);
381
382 contact = g_ptr_array_index (result.contacts, 0);
383 g_assert (tp_contact_get_contact_info (contact) == NULL);
384
385 tp_contact_request_contact_info_async (contact, NULL, contact_info_request_cb,
386 &result);
387 g_main_loop_run (result.loop);
388 g_assert_no_error (result.error);
389
390 reset_result (&result);
391 tp_handle_unref (service_repo, handle);
392
393 /* TEST6: Create a TpContact without INFO feature, then request the contact's
394 * info, and cancel the request. */
395 handle = tp_handle_ensure (service_repo, "info-test-6", NULL, NULL);
396 tp_connection_get_contacts_by_handle (client_conn,
397 1, &handle,
398 0, NULL,
399 by_handle_cb,
400 &result, finish, NULL);
401 g_main_loop_run (result.loop);
402 g_assert_no_error (result.error);
403
404 contact = g_ptr_array_index (result.contacts, 0);
405 g_assert (tp_contact_get_contact_info (contact) == NULL);
406
407 cancellable = g_cancellable_new ();
408 tp_contact_request_contact_info_async (contact, cancellable,
409 contact_info_request_cancelled_cb, &result);
410
411 g_idle_add_full (G_PRIORITY_HIGH, contact_info_request_cancel,
412 cancellable, g_object_unref);
413
414 g_main_loop_run (result.loop);
415 g_assert_no_error (result.error);
416
417 reset_result (&result);
418 tp_handle_unref (service_repo, handle);
419
420 /* Cleanup */
421 g_main_loop_unref (result.loop);
422 g_ptr_array_unref (info);
423 tp_contact_info_list_free (info_list);
424 }
425
426 static void
116427 prepare_avatar_requirements_cb (GObject *object,
117428 GAsyncResult *res,
118429 gpointer user_data)
158469 }
159470
160471 static GFile *
161 create_contact_with_fake_avatar (ContactsConnection *service_conn,
472 create_contact_with_fake_avatar (TpTestsContactsConnection *service_conn,
162473 TpConnection *client_conn,
163474 const gchar *id)
164475 {
179490 array = g_array_new (FALSE, FALSE, sizeof (gchar));
180491 g_array_append_vals (array, avatar_data, strlen (avatar_data) + 1);
181492
182 contacts_connection_change_avatar_data (service_conn, handle, array,
493 tp_tests_contacts_connection_change_avatar_data (service_conn, handle, array,
183494 avatar_mime_type, avatar_token);
184495
185496 tp_connection_get_contacts_by_handle (client_conn,
212523 /* Keep avatar_file alive after contact destruction */
213524 g_object_ref (avatar_file);
214525
215 g_object_unref (contact);
216 g_array_free (result.invalid, TRUE);
217 g_ptr_array_free (result.contacts, TRUE);
526 reset_result (&result);
218527 g_main_loop_unref (result.loop);
219528
220529 tp_handle_unref (service_repo, handle);
282591 #define RAND_STR_LEN 6
283592
284593 static void
285 test_avatar_data (ContactsConnection *service_conn,
594 test_avatar_data (TpTestsContactsConnection *service_conn,
286595 TpConnection *client_conn)
287596 {
288597 static const gchar letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
338647 }
339648
340649 static void
341 test_by_handle (ContactsConnection *service_conn,
650 test_by_handle (TpTestsContactsConnection *service_conn,
342651 TpConnection *client_conn)
343652 {
344653 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
383692
384693 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
385694 MYASSERT (result.invalid->len == 2, ": %u", result.invalid->len);
386 test_assert_no_error (result.error);
695 g_assert_no_error (result.error);
387696
388697 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
389698 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
390699 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
391 contacts[0] = g_ptr_array_index (result.contacts, 0);
392 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[0]), handles[0]);
393 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
394 contacts[1] = g_ptr_array_index (result.contacts, 1);
395 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[1]), handles[1]);
396 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
397 contacts[3] = g_ptr_array_index (result.contacts, 2);
398 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[3]), handles[3]);
399 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[3]), "chris");
700 contacts[0] = g_object_ref (g_ptr_array_index (result.contacts, 0));
701 g_assert_cmpuint (tp_contact_get_handle (contacts[0]), ==, handles[0]);
702 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
703 contacts[1] = g_object_ref (g_ptr_array_index (result.contacts, 1));
704 g_assert_cmpuint (tp_contact_get_handle (contacts[1]), ==, handles[1]);
705 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
706 contacts[3] = g_object_ref (g_ptr_array_index (result.contacts, 2));
707 g_assert_cmpuint (tp_contact_get_handle (contacts[3]), ==, handles[3]);
708 g_assert_cmpstr (tp_contact_get_identifier (contacts[3]), ==, "chris");
400709
401710 /* clean up before doing the second request */
402 g_array_free (result.invalid, TRUE);
403 result.invalid = NULL;
404 g_ptr_array_free (result.contacts, TRUE);
405 result.contacts = NULL;
711 reset_result (&result);
406712 g_assert (result.error == NULL);
407713
408714 /* Replace one of the invalid handles with a valid one */
427733
428734 MYASSERT (result.contacts->len == 4, ": %u", result.contacts->len);
429735 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
430 test_assert_no_error (result.error);
736 g_assert_no_error (result.error);
431737
432738 /* 0, 1 and 3 we already have a reference to */
433739 MYASSERT (g_ptr_array_index (result.contacts, 0) == contacts[0], "");
439745
440746 /* 2 we don't */
441747 contacts[2] = g_ptr_array_index (result.contacts, 2);
442 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[2]), handles[2]);
443 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[2]), "dora");
748 g_assert_cmpuint (tp_contact_get_handle (contacts[2]), ==, handles[2]);
749 g_assert_cmpstr (tp_contact_get_identifier (contacts[2]), ==, "dora");
750
751 g_ptr_array_unref (result.contacts);
752 result.contacts = NULL;
444753
445754 /* clean up refs to contacts and assert that they aren't leaked */
446755
457766 }
458767
459768 /* wait for ReleaseHandles to run */
460 test_connection_run_until_dbus_queue_processed (client_conn);
769 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
461770
462771 /* unref all the handles we created service-side */
463772 tp_handle_unref (service_repo, handles[0]);
470779 MYASSERT (!tp_handle_is_valid (service_repo, handles[3], NULL), "");
471780
472781 /* remaining cleanup */
782 g_assert (result.error == NULL);
783 reset_result (&result);
473784 g_main_loop_unref (result.loop);
474 g_array_free (result.invalid, TRUE);
475 g_ptr_array_free (result.contacts, TRUE);
476 g_assert (result.error == NULL);
477 }
478
479 static void
480 test_no_features (ContactsConnection *service_conn,
785 }
786
787 static void
788 test_no_features (TpTestsContactsConnection *service_conn,
481789 TpConnection *client_conn)
482790 {
483791 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
503811
504812 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
505813 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
506 test_assert_no_error (result.error);
814 g_assert_no_error (result.error);
507815
508816 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
509817 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
510818 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
511819
512820 for (i = 0; i < 3; i++)
513 contacts[i] = g_ptr_array_index (result.contacts, i);
821 contacts[i] = g_object_ref (g_ptr_array_index (result.contacts, i));
822
823 g_assert (result.error == NULL);
824 reset_result (&result);
514825
515826 for (i = 0; i < 3; i++)
516827 {
517828 MYASSERT (tp_contact_get_connection (contacts[i]) == client_conn, "");
518 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
519 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
520 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
829 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
830 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
831 ids[i]);
832 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
521833 tp_contact_get_identifier (contacts[i]));
522834 MYASSERT (tp_contact_get_avatar_token (contacts[i]) == NULL,
523835 ": %s", tp_contact_get_avatar_token (contacts[i]));
524 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[i]),
836 g_assert_cmpuint (tp_contact_get_presence_type (contacts[i]), ==,
525837 TP_CONNECTION_PRESENCE_TYPE_UNSET);
526 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[i]), "");
527 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]), "");
838 g_assert_cmpstr (tp_contact_get_presence_status (contacts[i]), ==,
839 "");
840 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
841 "");
528842 MYASSERT (!tp_contact_has_feature (contacts[i],
529843 TP_CONTACT_FEATURE_ALIAS), "");
530844 MYASSERT (!tp_contact_has_feature (contacts[i],
540854 for (i = 0; i < 3; i++)
541855 {
542856 g_object_unref (contacts[i]);
543 test_connection_run_until_dbus_queue_processed (client_conn);
857 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
544858 tp_handle_unref (service_repo, handles[i]);
545859 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
546860 }
547861
548862 /* remaining cleanup */
549863 g_main_loop_unref (result.loop);
550 g_array_free (result.invalid, TRUE);
551 g_ptr_array_free (result.contacts, TRUE);
552 g_assert (result.error == NULL);
553864 }
554865
555866 static void
605916 * FIXME: Ideally we should have a MYASSERT_SAME_ASV */
606917 #define ASSERT_SAME_LOCATION(left, right)\
607918 G_STMT_START {\
608 MYASSERT_SAME_UINT (g_hash_table_size (left), g_hash_table_size (right));\
609 MYASSERT_SAME_STRING(g_hash_table_lookup (left, "country"),\
919 g_assert_cmpuint (g_hash_table_size (left), ==, \
920 g_hash_table_size (right));\
921 g_assert_cmpstr (g_hash_table_lookup (left, "country"), ==,\
610922 g_hash_table_lookup (right, "country"));\
611923 } G_STMT_END
612924
668980 }
669981
670982 static void
671 test_upgrade (ContactsConnection *service_conn,
983 test_upgrade (TpTestsContactsConnection *service_conn,
672984 TpConnection *client_conn)
673985 {
674986 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
677989 static const gchar * const aliases[] = { "Alice in Wonderland",
678990 "Bob the Builder", "Christopher Robin" };
679991 static const gchar * const tokens[] = { "aaaaa", "bbbbb", "ccccc" };
680 static ContactsConnectionPresenceStatusIndex statuses[] = {
681 CONTACTS_CONNECTION_STATUS_AVAILABLE, CONTACTS_CONNECTION_STATUS_BUSY,
682 CONTACTS_CONNECTION_STATUS_AWAY };
992 static TpTestsContactsConnectionPresenceStatusIndex statuses[] = {
993 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
994 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
995 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY };
683996 static const gchar * const messages[] = { "", "Fixing it",
684997 "GON OUT BACKSON" };
685998 GHashTable *location_1 = tp_asv_new (
7031016 for (i = 0; i < 3; i++)
7041017 handles[i] = tp_handle_ensure (service_repo, ids[i], NULL, NULL);
7051018
706 contacts_connection_change_aliases (service_conn, 3, handles, aliases);
707 contacts_connection_change_presences (service_conn, 3, handles,
1019 tp_tests_contacts_connection_change_aliases (service_conn, 3, handles,
1020 aliases);
1021 tp_tests_contacts_connection_change_presences (service_conn, 3, handles,
7081022 statuses, messages);
709 contacts_connection_change_avatar_tokens (service_conn, 3, handles, tokens);
710 contacts_connection_change_locations (service_conn, 3, handles, locations);
1023 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 3, handles,
1024 tokens);
1025 tp_tests_contacts_connection_change_locations (service_conn, 3, handles,
1026 locations);
7111027
7121028 capabilities = create_contact_caps (handles);
713 contacts_connection_change_capabilities (service_conn, capabilities);
1029 tp_tests_contacts_connection_change_capabilities (service_conn, capabilities);
7141030 g_hash_table_unref (capabilities);
7151031
7161032 tp_connection_get_contacts_by_handle (client_conn,
7231039
7241040 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
7251041 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
726 test_assert_no_error (result.error);
1042 g_assert_no_error (result.error);
7271043
7281044 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
7291045 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
7301046 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
7311047
7321048 for (i = 0; i < 3; i++)
733 contacts[i] = g_ptr_array_index (result.contacts, i);
1049 contacts[i] = g_object_ref (g_ptr_array_index (result.contacts, i));
7341050
7351051 for (i = 0; i < 3; i++)
7361052 {
7371053 MYASSERT (tp_contact_get_connection (contacts[i]) == client_conn, "");
738 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
739 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
740 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
1054 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1055 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1056 ids[i]);
1057 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
7411058 tp_contact_get_identifier (contacts[i]));
7421059 MYASSERT (tp_contact_get_avatar_token (contacts[i]) == NULL,
7431060 ": %s", tp_contact_get_avatar_token (contacts[i]));
744 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[i]),
1061 g_assert_cmpuint (tp_contact_get_presence_type (contacts[i]), ==,
7451062 TP_CONNECTION_PRESENCE_TYPE_UNSET);
746 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[i]), "");
747 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]), "");
1063 g_assert_cmpstr (tp_contact_get_presence_status (contacts[i]), ==,
1064 "");
1065 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
1066 "");
7481067 MYASSERT (!tp_contact_has_feature (contacts[i],
7491068 TP_CONTACT_FEATURE_ALIAS), "");
7501069 MYASSERT (!tp_contact_has_feature (contacts[i],
7581077 }
7591078
7601079 /* clean up before doing the second request */
761 g_array_free (result.invalid, TRUE);
762 result.invalid = NULL;
763 g_ptr_array_free (result.contacts, TRUE);
764 result.contacts = NULL;
7651080 g_assert (result.error == NULL);
1081 reset_result (&result);
7661082
7671083 tp_connection_upgrade_contacts (client_conn,
7681084 3, contacts,
7741090
7751091 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
7761092 MYASSERT (result.invalid == NULL, "");
777 test_assert_no_error (result.error);
1093 g_assert_no_error (result.error);
7781094
7791095 for (i = 0; i < 3; i++)
7801096 {
7811097 MYASSERT (g_ptr_array_index (result.contacts, 0) == contacts[0], "");
782 g_object_unref (g_ptr_array_index (result.contacts, i));
783 }
784
785 for (i = 0; i < 3; i++)
786 {
787 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
788 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
1098 }
1099
1100 g_assert (result.invalid == NULL);
1101 g_assert (result.error == NULL);
1102 reset_result (&result);
1103
1104 for (i = 0; i < 3; i++)
1105 {
1106 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1107 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1108 ids[i]);
7891109
7901110 MYASSERT (tp_contact_has_feature (contacts[i],
7911111 TP_CONTACT_FEATURE_ALIAS), "");
792 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]), aliases[i]);
1112 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
1113 aliases[i]);
7931114
7941115 MYASSERT (tp_contact_has_feature (contacts[i],
7951116 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
796 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
1117 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
7971118 tokens[i]);
7981119
7991120 MYASSERT (tp_contact_has_feature (contacts[i],
8001121 TP_CONTACT_FEATURE_PRESENCE), "");
801 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
1122 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
8021123 messages[i]);
8031124
8041125 MYASSERT (tp_contact_has_feature (contacts[i],
8111132 MYASSERT (tp_contact_get_capabilities (contacts[i]) != NULL, "");
8121133 }
8131134
814 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
1135 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
8151136 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
816 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
1137 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
8171138 "available");
818 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
1139 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
8191140 TP_CONNECTION_PRESENCE_TYPE_BUSY);
820 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
1141 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==,
8211142 "busy");
822 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[2]),
1143 g_assert_cmpuint (tp_contact_get_presence_type (contacts[2]), ==,
8231144 TP_CONNECTION_PRESENCE_TYPE_AWAY);
824 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[2]),
1145 g_assert_cmpstr (tp_contact_get_presence_status (contacts[2]), ==,
8251146 "away");
8261147
8271148 for (i = 0; i < 3; i++)
8281149 {
8291150 g_object_unref (contacts[i]);
830 test_connection_run_until_dbus_queue_processed (client_conn);
1151 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
8311152 tp_handle_unref (service_repo, handles[i]);
8321153 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
8331154 }
8341155
8351156 /* remaining cleanup */
8361157 g_main_loop_unref (result.loop);
837 g_ptr_array_free (result.contacts, TRUE);
838 g_assert (result.invalid == NULL);
839 g_assert (result.error == NULL);
8401158 }
8411159
8421160 typedef struct
9241242 }
9251243
9261244 static void
927 test_features (ContactsConnection *service_conn,
1245 test_features (TpTestsContactsConnection *service_conn,
9281246 TpConnection *client_conn)
9291247 {
9301248 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
9331251 static const gchar * const aliases[] = { "Alice in Wonderland",
9341252 "Bob the Builder", "Christopher Robin" };
9351253 static const gchar * const tokens[] = { "aaaaa", "bbbbb", "ccccc" };
936 static ContactsConnectionPresenceStatusIndex statuses[] = {
937 CONTACTS_CONNECTION_STATUS_AVAILABLE, CONTACTS_CONNECTION_STATUS_BUSY,
938 CONTACTS_CONNECTION_STATUS_AWAY };
1254 static TpTestsContactsConnectionPresenceStatusIndex statuses[] = {
1255 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
1256 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
1257 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY };
9391258 static const gchar * const messages[] = { "", "Fixing it",
9401259 "GON OUT BACKSON" };
9411260 static const gchar * const new_aliases[] = { "Alice [at a tea party]",
9421261 "Bob the Plumber" };
9431262 static const gchar * const new_tokens[] = { "AAAA", "BBBB" };
944 static ContactsConnectionPresenceStatusIndex new_statuses[] = {
945 CONTACTS_CONNECTION_STATUS_AWAY, CONTACTS_CONNECTION_STATUS_AVAILABLE };
1263 static TpTestsContactsConnectionPresenceStatusIndex new_statuses[] = {
1264 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY,
1265 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE };
9461266 static const gchar * const new_messages[] = { "At the Mad Hatter's",
9471267 "It'll cost you" };
9481268 GHashTable *location_1 = tp_asv_new (
9881308 for (i = 0; i < 3; i++)
9891309 handles[i] = tp_handle_ensure (service_repo, ids[i], NULL, NULL);
9901310
991 contacts_connection_change_aliases (service_conn, 3, handles, aliases);
992 contacts_connection_change_presences (service_conn, 3, handles,
1311 tp_tests_contacts_connection_change_aliases (service_conn, 3, handles,
1312 aliases);
1313 tp_tests_contacts_connection_change_presences (service_conn, 3, handles,
9931314 statuses, messages);
994 contacts_connection_change_avatar_tokens (service_conn, 3, handles, tokens);
995 contacts_connection_change_locations (service_conn, 3, handles, locations);
1315 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 3, handles,
1316 tokens);
1317 tp_tests_contacts_connection_change_locations (service_conn, 3, handles,
1318 locations);
9961319
9971320 /* contact capabilities */
9981321 capabilities = create_contact_caps (handles);
999 contacts_connection_change_capabilities (service_conn, capabilities);
1322 tp_tests_contacts_connection_change_capabilities (service_conn,
1323 capabilities);
10001324 g_hash_table_unref (capabilities);
10011325
10021326 tp_connection_get_contacts_by_handle (client_conn,
10091333
10101334 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
10111335 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
1012 test_assert_no_error (result.error);
1336 g_assert_no_error (result.error);
10131337
10141338 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
10151339 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
10161340 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
10171341
10181342 for (i = 0; i < 3; i++)
1019 contacts[i] = g_ptr_array_index (result.contacts, i);
1343 contacts[i] = g_object_ref (g_ptr_array_index (result.contacts, i));
1344
1345 g_assert (result.error == NULL);
1346 reset_result (&result);
10201347
10211348 for (i = 0; i < 3; i++)
10221349 {
10231350 TpCapabilities *caps;
10241351
1025 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
1026 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
1352 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1353 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1354 ids[i]);
10271355
10281356 MYASSERT (tp_contact_has_feature (contacts[i],
10291357 TP_CONTACT_FEATURE_ALIAS), "");
1030 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]), aliases[i]);
1358 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
1359 aliases[i]);
10311360
10321361 MYASSERT (tp_contact_has_feature (contacts[i],
10331362 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
1034 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
1363 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
10351364 tokens[i]);
10361365
10371366 MYASSERT (tp_contact_has_feature (contacts[i],
10381367 TP_CONTACT_FEATURE_PRESENCE), "");
1039 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
1368 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
10401369 messages[i]);
10411370
10421371 MYASSERT (tp_contact_has_feature (contacts[i],
10561385 support_text_chatrooms[i], " contact %u", i);
10571386 }
10581387
1059 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
1388 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
10601389 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
1061 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
1390 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
10621391 "available");
1063 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
1392 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
10641393
10651394 TP_CONNECTION_PRESENCE_TYPE_BUSY);
1066 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
1395 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==,
10671396 "busy");
1068 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[2]),
1397 g_assert_cmpuint (tp_contact_get_presence_type (contacts[2]), ==,
10691398 TP_CONNECTION_PRESENCE_TYPE_AWAY);
1070 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[2]),
1399 g_assert_cmpstr (tp_contact_get_presence_status (contacts[2]), ==,
10711400 "away");
10721401
10731402 /* exercise GObject properties in a basic way */
10841413 "capabilities", &from_gobject.capabilities,
10851414 NULL);
10861415 MYASSERT (from_gobject.connection == client_conn, "");
1087 MYASSERT_SAME_UINT (from_gobject.handle, handles[0]);
1088 MYASSERT_SAME_STRING (from_gobject.identifier, "alice");
1089 MYASSERT_SAME_STRING (from_gobject.alias, "Alice in Wonderland");
1090 MYASSERT_SAME_STRING (from_gobject.avatar_token, "aaaaa");
1091 MYASSERT_SAME_UINT (from_gobject.presence_type,
1416 g_assert_cmpuint (from_gobject.handle, ==, handles[0]);
1417 g_assert_cmpstr (from_gobject.identifier, ==, "alice");
1418 g_assert_cmpstr (from_gobject.alias, ==, "Alice in Wonderland");
1419 g_assert_cmpstr (from_gobject.avatar_token, ==, "aaaaa");
1420 g_assert_cmpuint (from_gobject.presence_type, ==,
10921421 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
1093 MYASSERT_SAME_STRING (from_gobject.presence_status, "available");
1094 MYASSERT_SAME_STRING (from_gobject.presence_message, "");
1422 g_assert_cmpstr (from_gobject.presence_status, ==, "available");
1423 g_assert_cmpstr (from_gobject.presence_message, ==, "");
10951424 ASSERT_SAME_LOCATION (from_gobject.location, locations[0]);
10961425 MYASSERT (tp_capabilities_is_specific_to_contact (from_gobject.capabilities),
10971426 "");
11171446 G_CALLBACK (contact_notify_cb), &notify_ctx_chris);
11181447
11191448 /* Change Alice and Bob's contact info, leave Chris as-is */
1120 contacts_connection_change_aliases (service_conn, 2, handles, new_aliases);
1121 contacts_connection_change_presences (service_conn, 2, handles,
1449 tp_tests_contacts_connection_change_aliases (service_conn, 2, handles,
1450 new_aliases);
1451 tp_tests_contacts_connection_change_presences (service_conn, 2, handles,
11221452 new_statuses, new_messages);
1123 contacts_connection_change_avatar_tokens (service_conn, 2, handles,
1453 tp_tests_contacts_connection_change_avatar_tokens (service_conn, 2, handles,
11241454 new_tokens);
1125 contacts_connection_change_locations (service_conn, 2, handles,
1455 tp_tests_contacts_connection_change_locations (service_conn, 2, handles,
11261456 new_locations);
11271457
11281458 new_capabilities = create_new_contact_caps (handles);
1129 contacts_connection_change_capabilities (service_conn, new_capabilities);
1459 tp_tests_contacts_connection_change_capabilities (service_conn,
1460 new_capabilities);
11301461 g_hash_table_unref (new_capabilities);
11311462
1132 test_connection_run_until_dbus_queue_processed (client_conn);
1463 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
11331464
11341465 g_assert (notify_ctx_is_fully_changed (&notify_ctx_alice));
11351466 g_assert (!notify_ctx_is_changed (&notify_ctx_chris));
11381469 {
11391470 TpCapabilities *caps;
11401471
1141 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
1142 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
1472 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1473 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1474 ids[i]);
11431475
11441476 MYASSERT (tp_contact_has_feature (contacts[i],
11451477 TP_CONTACT_FEATURE_ALIAS), "");
1146 MYASSERT_SAME_STRING (tp_contact_get_alias (contacts[i]),
1478 g_assert_cmpstr (tp_contact_get_alias (contacts[i]), ==,
11471479 new_aliases[i]);
11481480
11491481 MYASSERT (tp_contact_has_feature (contacts[i],
11501482 TP_CONTACT_FEATURE_AVATAR_TOKEN), "");
1151 MYASSERT_SAME_STRING (tp_contact_get_avatar_token (contacts[i]),
1483 g_assert_cmpstr (tp_contact_get_avatar_token (contacts[i]), ==,
11521484 new_tokens[i]);
11531485
11541486 MYASSERT (tp_contact_has_feature (contacts[i],
11551487 TP_CONTACT_FEATURE_PRESENCE), "");
1156 MYASSERT_SAME_STRING (tp_contact_get_presence_message (contacts[i]),
1488 g_assert_cmpstr (tp_contact_get_presence_message (contacts[i]), ==,
11571489 new_messages[i]);
11581490
11591491 MYASSERT (tp_contact_has_feature (contacts[i],
11701502 new_support_text_chatrooms[i], " contact %u", i);
11711503 }
11721504
1173 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[0]),
1505 g_assert_cmpuint (tp_contact_get_presence_type (contacts[0]), ==,
11741506 TP_CONNECTION_PRESENCE_TYPE_AWAY);
1175 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[0]),
1507 g_assert_cmpstr (tp_contact_get_presence_status (contacts[0]), ==,
11761508 "away");
1177 MYASSERT_SAME_UINT (tp_contact_get_presence_type (contacts[1]),
1509 g_assert_cmpuint (tp_contact_get_presence_type (contacts[1]), ==,
11781510 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
1179 MYASSERT_SAME_STRING (tp_contact_get_presence_status (contacts[1]),
1511 g_assert_cmpstr (tp_contact_get_presence_status (contacts[1]), ==,
11801512 "available");
11811513
11821514 for (i = 0; i < 3; i++)
11831515 {
11841516 g_object_unref (contacts[i]);
1185 test_connection_run_until_dbus_queue_processed (client_conn);
1517 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
11861518 tp_handle_unref (service_repo, handles[i]);
11871519 MYASSERT (!tp_handle_is_valid (service_repo, handles[i], NULL), "");
11881520 }
11891521
11901522 /* remaining cleanup */
11911523 g_main_loop_unref (result.loop);
1192 g_array_free (result.invalid, TRUE);
1193 g_ptr_array_free (result.contacts, TRUE);
1194 g_assert (result.error == NULL);
11951524 g_hash_table_unref (location_1);
11961525 g_hash_table_unref (location_2);
11971526 g_hash_table_unref (location_3);
12811610 static const gchar * const ids[] = { "Alice", "Bob", "Not valid", "Chris",
12821611 "not valid either", NULL };
12831612 TpContact *contacts[3];
1284 guint i;
12851613 GError *e /* no initialization needed */;
12861614
12871615 g_message ("%s: all bad (fd.o #19688)", G_STRFUNC);
12971625 MYASSERT (result.contacts->len == 0, ": %u", result.contacts->len);
12981626 MYASSERT (g_hash_table_size (result.bad_ids) == 1, ": %u",
12991627 g_hash_table_size (result.bad_ids));
1300 test_assert_no_error (result.error);
1628 g_assert_no_error (result.error);
13011629
13021630 e = g_hash_table_lookup (result.bad_ids, "Not valid");
13031631 MYASSERT (e != NULL, "");
13041632
1305 g_ptr_array_free (result.contacts, TRUE);
1306 result.contacts = NULL;
1307 g_strfreev (result.good_ids);
1308 result.good_ids = NULL;
1309 g_hash_table_destroy (result.bad_ids);
1310 result.bad_ids = NULL;
1633 reset_result (&result);
13111634
13121635 g_message ("%s: all good", G_STRFUNC);
13131636
13221645 MYASSERT (result.contacts->len == 2, ": %u", result.contacts->len);
13231646 MYASSERT (g_hash_table_size (result.bad_ids) == 0, ": %u",
13241647 g_hash_table_size (result.bad_ids));
1325 test_assert_no_error (result.error);
1648 g_assert_no_error (result.error);
13261649
13271650 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
13281651 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
13291652 contacts[0] = g_ptr_array_index (result.contacts, 0);
1330 MYASSERT_SAME_STRING (result.good_ids[0], "Alice");
1331 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
1653 g_assert_cmpstr (result.good_ids[0], ==, "Alice");
1654 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
13321655 contacts[1] = g_ptr_array_index (result.contacts, 1);
1333 MYASSERT_SAME_STRING (result.good_ids[1], "Bob");
1334 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
1335
1336 for (i = 0; i < 2; i++)
1337 {
1338 g_object_unref (contacts[i]);
1339 }
1340
1341 g_ptr_array_free (result.contacts, TRUE);
1342 result.contacts = NULL;
1343 g_strfreev (result.good_ids);
1344 result.good_ids = NULL;
1345 g_hash_table_destroy (result.bad_ids);
1346 result.bad_ids = NULL;
1656 g_assert_cmpstr (result.good_ids[1], ==, "Bob");
1657 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
1658
1659 reset_result (&result);
13471660
13481661 g_message ("%s: not all good", G_STRFUNC);
13491662
13581671 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
13591672 MYASSERT (g_hash_table_size (result.bad_ids) == 2, ": %u",
13601673 g_hash_table_size (result.bad_ids));
1361 test_assert_no_error (result.error);
1674 g_assert_no_error (result.error);
13621675
13631676 e = g_hash_table_lookup (result.bad_ids, "Not valid");
13641677 MYASSERT (e != NULL, "");
13701683 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
13711684 MYASSERT (g_ptr_array_index (result.contacts, 2) != NULL, "");
13721685 contacts[0] = g_ptr_array_index (result.contacts, 0);
1373 MYASSERT_SAME_STRING (result.good_ids[0], "Alice");
1374 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[0]), "alice");
1686 g_assert_cmpstr (result.good_ids[0], ==, "Alice");
1687 g_assert_cmpstr (tp_contact_get_identifier (contacts[0]), ==, "alice");
13751688 contacts[1] = g_ptr_array_index (result.contacts, 1);
1376 MYASSERT_SAME_STRING (result.good_ids[1], "Bob");
1377 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[1]), "bob");
1689 g_assert_cmpstr (result.good_ids[1], ==, "Bob");
1690 g_assert_cmpstr (tp_contact_get_identifier (contacts[1]), ==, "bob");
13781691 contacts[2] = g_ptr_array_index (result.contacts, 2);
1379 MYASSERT_SAME_STRING (result.good_ids[2], "Chris");
1380 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[2]), "chris");
1381
1382 /* clean up refs to contacts */
1383
1384 for (i = 0; i < 3; i++)
1385 {
1386 g_object_unref (contacts[i]);
1387 }
1692 g_assert_cmpstr (result.good_ids[2], ==, "Chris");
1693 g_assert_cmpstr (tp_contact_get_identifier (contacts[2]), ==, "chris");
13881694
13891695 /* wait for ReleaseHandles to run */
1390 test_connection_run_until_dbus_queue_processed (client_conn);
1696 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
13911697
13921698 /* remaining cleanup */
1699 reset_result (&result);
13931700 g_main_loop_unref (result.loop);
1394
1395 g_ptr_array_free (result.contacts, TRUE);
1396 result.contacts = NULL;
1397 g_strfreev (result.good_ids);
1398 result.good_ids = NULL;
1399 g_hash_table_destroy (result.bad_ids);
1400 result.bad_ids = NULL;
1401 }
1402
1403 static void
1404 test_capabilities_without_contact_caps (ContactsConnection *service_conn,
1701 }
1702
1703 static void
1704 test_capabilities_without_contact_caps (
1705 TpTestsContactsConnection *service_conn,
14051706 TpConnection *client_conn)
14061707 {
14071708 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
14281729
14291730 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
14301731 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
1431 test_assert_no_error (result.error);
1732 g_assert_no_error (result.error);
14321733
14331734 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
14341735 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
14411742 {
14421743 TpCapabilities *caps;
14431744
1444 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
1445 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
1745 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1746 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1747 ids[i]);
14461748
14471749 MYASSERT (tp_contact_has_feature (contacts[i],
14481750 TP_CONTACT_FEATURE_CAPABILITIES), "");
14551757 " contact %u", i);
14561758 }
14571759
1760 g_assert (result.error == NULL);
1761 reset_result (&result);
14581762 g_main_loop_unref (result.loop);
1459 g_array_free (result.invalid, TRUE);
1460 g_ptr_array_free (result.contacts, TRUE);
1461 g_assert (result.error == NULL);
1462 }
1463
1464 static void
1465 test_prepare_contact_caps_without_request (ContactsConnection *service_conn,
1763 }
1764
1765 static void
1766 test_prepare_contact_caps_without_request (
1767 TpTestsContactsConnection *service_conn,
14661768 TpConnection *client_conn)
14671769 {
14681770 Result result = { g_main_loop_new (NULL, FALSE), NULL, NULL, NULL };
14891791
14901792 MYASSERT (result.contacts->len == 3, ": %u", result.contacts->len);
14911793 MYASSERT (result.invalid->len == 0, ": %u", result.invalid->len);
1492 test_assert_no_error (result.error);
1794 g_assert_no_error (result.error);
14931795
14941796 MYASSERT (g_ptr_array_index (result.contacts, 0) != NULL, "");
14951797 MYASSERT (g_ptr_array_index (result.contacts, 1) != NULL, "");
15031805 TpCapabilities *caps;
15041806 GPtrArray *classes;
15051807
1506 MYASSERT_SAME_UINT (tp_contact_get_handle (contacts[i]), handles[i]);
1507 MYASSERT_SAME_STRING (tp_contact_get_identifier (contacts[i]), ids[i]);
1808 g_assert_cmpuint (tp_contact_get_handle (contacts[i]), ==, handles[i]);
1809 g_assert_cmpstr (tp_contact_get_identifier (contacts[i]), ==,
1810 ids[i]);
15081811
15091812 MYASSERT (tp_contact_has_feature (contacts[i],
15101813 TP_CONTACT_FEATURE_CAPABILITIES), "");
15131816 MYASSERT (caps != NULL, "");
15141817 MYASSERT (!tp_capabilities_is_specific_to_contact (caps), "");
15151818 classes = tp_capabilities_get_channel_classes (caps);
1516 MYASSERT_SAME_UINT (classes->len, 0);
1517 }
1518
1819 g_assert_cmpuint (classes->len, ==, 0);
1820 }
1821
1822 g_assert (result.error == NULL);
1823 reset_result (&result);
15191824 g_main_loop_unref (result.loop);
1520 g_array_free (result.invalid, TRUE);
1521 g_ptr_array_free (result.contacts, TRUE);
1522 g_assert (result.error == NULL);
15231825 }
15241826
15251827 int
15281830 {
15291831 TpBaseConnection *base_connection, *legacy_base_connection,
15301832 *no_requests_base_connection;
1531 ContactsConnection *service_conn;
1833 TpTestsContactsConnection *service_conn;
15321834 GError *error = NULL;
15331835 TpConnection *client_conn, *legacy_client_conn, *no_requests_client_conn;
15341836
15371839 g_type_init ();
15381840 tp_debug_set_flags ("all");
15391841
1540 test_create_and_connect_conn (CONTACTS_TYPE_CONNECTION, "me@test.com",
1541 &base_connection, &client_conn);
1542
1543 service_conn = CONTACTS_CONNECTION (base_connection);
1544
1545 test_create_and_connect_conn (LEGACY_CONTACTS_TYPE_CONNECTION, "me2@test.com",
1546 &legacy_base_connection, &legacy_client_conn);
1547
1548 test_create_and_connect_conn (NO_REQUESTS_TYPE_CONNECTION, "me3@test.com",
1549 &no_requests_base_connection, &no_requests_client_conn);
1842 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_CONTACTS_CONNECTION,
1843 "me@test.com", &base_connection, &client_conn);
1844
1845 service_conn = TP_TESTS_CONTACTS_CONNECTION (base_connection);
1846
1847 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION,
1848 "me2@test.com", &legacy_base_connection, &legacy_client_conn);
1849
1850 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_NO_REQUESTS_CONNECTION,
1851 "me3@test.com", &no_requests_base_connection, &no_requests_client_conn);
15501852
15511853 /* Tests */
15521854
15571859 test_by_id (client_conn);
15581860 test_avatar_requirements (client_conn);
15591861 test_avatar_data (service_conn, client_conn);
1862 test_contact_info (service_conn, client_conn);
15601863
15611864 /* test if TpContact fallbacks to connection's capabilities if
15621865 * ContactCapabilities is not implemented. */
15631866 test_capabilities_without_contact_caps (
1564 CONTACTS_CONNECTION (legacy_base_connection), legacy_client_conn);
1867 TP_TESTS_CONTACTS_CONNECTION (legacy_base_connection),
1868 legacy_client_conn);
15651869
15661870 /* test if TP_CONTACT_FEATURE_CAPABILITIES is prepared but with
15671871 * an empty set of capabilities if the connection doesn't support
15681872 * ContactCapabilities and Requests. */
15691873 test_prepare_contact_caps_without_request (
1570 CONTACTS_CONNECTION (no_requests_base_connection),
1874 TP_TESTS_CONTACTS_CONNECTION (no_requests_base_connection),
15711875 no_requests_client_conn);
15721876
15731877 /* Teardown */
15741878
15751879 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
15761880 "");
1577 test_assert_no_error (error);
1881 g_assert_no_error (error);
15781882 g_object_unref (client_conn);
15791883 g_object_unref (service_conn);
15801884
15811885 MYASSERT (tp_cli_connection_run_disconnect (legacy_client_conn, -1, &error, NULL),
15821886 "");
1583 test_assert_no_error (error);
1887 g_assert_no_error (error);
15841888 g_object_unref (legacy_client_conn);
15851889 g_object_unref (legacy_base_connection);
15861890
15871891 MYASSERT (tp_cli_connection_run_disconnect (no_requests_client_conn, -1,
15881892 &error, NULL), "");
1589 test_assert_no_error (error);
1893 g_assert_no_error (error);
15901894 g_object_unref (no_requests_client_conn);
15911895 g_object_unref (no_requests_base_connection);
15921896
6767 g_message ("RequestName raised %s",
6868 (error == NULL ? "no error" : error->message));
6969 /* we're on a private bus, so certainly nobody else should own this name */
70 test_assert_no_error (error);
70 g_assert_no_error ((GError *) error);
7171 MYASSERT (result == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER, ": %u", result);
7272 }
7373
171171 /* We use TpDBusDaemon because it's a convenient concrete subclass of
172172 * TpProxy. */
173173 g_message ("Creating proxies");
174 a = test_dbus_daemon_dup_or_die ();
174 a = tp_tests_dbus_daemon_dup_or_die ();
175175 g_message ("a=%p", a);
176176 b = tp_dbus_daemon_new (tp_proxy_get_dbus_connection (a));
177177 g_message ("b=%p", b);
194194 g_message ("Connecting signal to a");
195195 tp_cli_dbus_daemon_connect_to_name_owner_changed (a, noc, PTR (TEST_A),
196196 destroy_user_data, (GObject *) z, &error_out);
197 test_assert_no_error (error_out);
197 g_assert_no_error (error_out);
198198
199199 /* assert that connecting to a signal on an interface we don't have fails */
200200 freed = FALSE;
208208
209209 /* b gets its signal connection cancelled because stub is
210210 * destroyed */
211 stub = test_object_new_static_class (stub_object_get_type (), NULL);
211 stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
212 NULL);
212213 g_message ("Connecting signal to b");
213214 tp_cli_dbus_daemon_connect_to_name_owner_changed (b, noc, PTR (TEST_B),
214215 destroy_user_data, stub, &error_out);
215 test_assert_no_error (error_out);
216 g_assert_no_error (error_out);
216217 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_B), "");
217218 g_object_unref (stub);
218219
221222 g_message ("Connecting signal to c");
222223 tp_cli_dbus_daemon_connect_to_name_owner_changed (c, noc, PTR (TEST_C),
223224 destroy_user_data, NULL, &error_out);
224 test_assert_no_error (error_out);
225 g_assert_no_error (error_out);
225226 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_C), "");
226227 g_message ("Forcibly invalidating c");
227228 tp_proxy_invalidate ((TpProxy *) c, &err);
243244 g_message ("Connecting signal to d");
244245 tp_cli_dbus_daemon_connect_to_name_owner_changed (d, noc, PTR (TEST_D),
245246 destroy_user_data, NULL, &error_out);
246 test_assert_no_error (error_out);
247 g_assert_no_error (error_out);
247248 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_D), "");
248249 g_message ("Destroying d");
249250 tmp_obj = d;
256257 g_message ("Connecting signal to e");
257258 sc = tp_cli_dbus_daemon_connect_to_name_owner_changed (e, noc, PTR (TEST_E),
258259 destroy_user_data, NULL, &error_out);
259 test_assert_no_error (error_out);
260 g_assert_no_error (error_out);
260261 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_E), "");
261262 g_message ("Disconnecting signal from e");
262263 tp_proxy_signal_connection_disconnect (sc);
269270 g_message ("Connecting signal to f");
270271 tp_cli_dbus_daemon_connect_to_name_owner_changed (f, noc, PTR (TEST_F),
271272 destroy_user_data, NULL, &error_out);
272 test_assert_no_error (error_out);
273 g_assert_no_error (error_out);
273274 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_F), "");
274275 g_message ("Forcibly disposing f's DBusGProxy to simulate name owner loss");
275276 tmp_obj = tp_proxy_borrow_interface_by_id ((TpProxy *) f,
293294 g_message ("Connecting signal to g");
294295 tp_cli_dbus_daemon_connect_to_name_owner_changed (g, noc, PTR (TEST_G),
295296 destroy_user_data, (GObject *) g, &error_out);
296 test_assert_no_error (error_out);
297 g_assert_no_error (error_out);
297298 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_G), "");
298299 g_message ("Destroying g");
299300 tmp_obj = g;
305306 /* h gets its signal connection cancelled because its weak object is
306307 * destroyed, meaning there are simultaneously two reasons for it to become
307308 * cancelled (fd.o#14750) */
308 stub = test_object_new_static_class (stub_object_get_type (), NULL);
309 stub = tp_tests_object_new_static_class (tp_tests_stub_object_get_type (),
310 NULL);
309311 g_object_weak_ref (stub, h_stub_destroyed, &sc);
310312 g_message ("Connecting signal to h");
311313 tp_cli_dbus_daemon_connect_to_name_owner_changed (h, noc, PTR (TEST_H),
312314 destroy_user_data, stub, &error_out);
313 test_assert_no_error (error_out);
315 g_assert_no_error (error_out);
314316 MYASSERT (!tp_intset_is_member (freed_user_data, TEST_H), "");
315317 g_object_unref (stub);
316318
320322 g_message ("Connecting signal to z");
321323 tp_cli_dbus_daemon_connect_to_name_owner_changed (z, noc, PTR (TEST_Z),
322324 destroy_user_data, (GObject *) a, &error_out);
323 test_assert_no_error (error_out);
325 g_assert_no_error (error_out);
324326
325327 /* make sure a NameOwnerChanged signal occurs */
326328 g_message ("Requesting name");
9898
9999 mainloop = g_main_loop_new (NULL, FALSE);
100100
101 dbus_daemon = test_dbus_daemon_dup_or_die ();
101 dbus_daemon = tp_tests_dbus_daemon_dup_or_die ();
102102
103103 g_timeout_add (5000, time_out, mainloop);
104104
112112 handler = g_signal_connect (early_cm, "exited",
113113 G_CALLBACK (early_cm_exited), &saw_exited);
114114
115 test_connection_manager_run_until_readying_fails (early_cm, &error);
115 tp_tests_proxy_run_until_prepared_or_failed (early_cm, NULL, &error);
116116 g_assert (error != NULL);
117117 g_assert (tp_proxy_get_invalidated (early_cm) == NULL);
118118 g_assert_cmpuint (error->domain, ==, DBUS_GERROR);
147147 g_signal_handler_disconnect (late_cm, handler);
148148
149149 /* Now both objects can become ready */
150 test_connection_manager_run_until_ready (early_cm);
151 test_connection_manager_run_until_ready (late_cm);
150 tp_tests_proxy_run_until_prepared (early_cm, NULL);
151 tp_tests_proxy_run_until_prepared (late_cm, NULL);
152152
153153 g_object_unref (late_cm);
154154 g_object_unref (early_cm);
1919 #include "tests/lib/util.h"
2020
2121 static GMainLoop *mainloop;
22 gboolean shutdown_finished = FALSE;
23 gboolean invalidated = FALSE;
2224
2325 static void
2426 on_invalidated (TpChannel *chan,
3638 MYASSERT (*client == chan, "%p vs %p", *client, chan);
3739 g_object_unref (*client);
3840 *client = NULL;
41
42 invalidated = TRUE;
43
44 if (shutdown_finished)
45 g_main_loop_quit (mainloop);
3946 }
4047
4148 static gboolean
4249 disconnect (gpointer data)
4350 {
44 simple_connection_inject_disconnect (data);
51 tp_tests_simple_connection_inject_disconnect (data);
4552
4653 return FALSE;
4754 }
5057 on_shutdown_finished (TpBaseConnection *base_conn,
5158 gpointer user_data)
5259 {
53 g_main_loop_quit (mainloop);
60 shutdown_finished = TRUE;
61
62 if (invalidated)
63 g_main_loop_quit (mainloop);
5464 }
5565
5666 int
5767 main (int argc,
5868 char **argv)
5969 {
60 SimpleConnection *service_conn;
70 TpTestsSimpleConnection *service_conn;
6171 TpBaseConnection *service_conn_as_base;
6272 TpHandleRepoIface *contact_repo;
63 TestTextChannelNull *service_chan;
73 TpTestsTextChannelNull *service_chan;
6474 TpDBusDaemon *dbus;
6575 TpConnection *conn;
6676 TpChannel *chan;
7383 g_type_init ();
7484 tp_debug_set_flags ("all");
7585 mainloop = g_main_loop_new (NULL, FALSE);
76 dbus = test_dbus_daemon_dup_or_die ();
86 dbus = tp_tests_dbus_daemon_dup_or_die ();
7787
78 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (SIMPLE_TYPE_CONNECTION,
88 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
89 TP_TESTS_TYPE_SIMPLE_CONNECTION,
7990 "account", "me@example.com",
8091 "protocol", "simple",
8192 NULL));
8899
89100 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
90101 &name, &conn_path, &error), "");
91 test_assert_no_error (error);
102 g_assert_no_error (error);
92103
93104 conn = tp_connection_new (dbus, name, conn_path, &error);
94105 MYASSERT (conn != NULL, "");
95 test_assert_no_error (error);
106 g_assert_no_error (error);
96107
97108 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL), "");
98 test_assert_no_error (error);
109 g_assert_no_error (error);
99110
100111 /* Paste on a channel */
101112
104115 MYASSERT (contact_repo != NULL, "");
105116
106117 handle = tp_handle_ensure (contact_repo, "them@example.org", NULL, &error);
107 test_assert_no_error (error);
118 g_assert_no_error (error);
108119 chan_path = g_strdup_printf ("%s/Channel", conn_path);
109120
110 service_chan = TEST_TEXT_CHANNEL_NULL (test_object_new_static_class (
111 TEST_TYPE_TEXT_CHANNEL_NULL,
121 service_chan = TP_TESTS_TEXT_CHANNEL_NULL (tp_tests_object_new_static_class (
122 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
112123 "connection", service_conn,
113124 "object-path", chan_path,
114125 "handle", handle,
116127
117128 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
118129 TP_HANDLE_TYPE_CONTACT, handle, &error);
119 test_assert_no_error (error);
130 g_assert_no_error (error);
120131
121132 tp_channel_run_until_ready (chan, &error, NULL);
122 test_assert_no_error (error);
133 g_assert_no_error (error);
123134
124135 g_signal_connect (chan, "invalidated", G_CALLBACK (on_invalidated),
125136 &chan);
1212 GError invalidation_reason = { TP_ERRORS, TP_ERROR_NOT_YOURS, "bees!" };
1313 GError *error = NULL;
1414
15 bus_daemon = test_dbus_daemon_dup_or_die ();
15 bus_daemon = tp_tests_dbus_daemon_dup_or_die ();
1616 tp_proxy_invalidate ((TpProxy *) bus_daemon, &invalidation_reason);
1717
1818 props = tp_proxy_borrow_interface_by_id ((TpProxy *) bus_daemon,
2323 #define IDENTIFIER "them@example.org"
2424
2525 static GMainLoop *mainloop;
26 TestTextChannelGroup *service_chan;
26 TpTestsTextChannelGroup *service_chan;
2727 TpChannel *chan = NULL;
2828 TpHandleRepoIface *contact_repo;
2929 TpHandle self_handle, camel, camel2;
8282 MYASSERT (expecting_members_changed, ": got unexpected MembersChanged");
8383 expecting_members_changed = FALSE;
8484
85 MYASSERT_SAME_STRING (arg_Message, expected_message);
86 MYASSERT_SAME_UINT (arg_Actor, expected_actor);
87 MYASSERT_SAME_UINT (arg_Reason, expected_reason);
85 g_assert_cmpstr (arg_Message, ==, expected_message);
86 g_assert_cmpuint (arg_Actor, ==, expected_actor);
87 g_assert_cmpuint (arg_Reason, ==, expected_reason);
8888
8989 expected_diffs (arg_Added, arg_Removed, arg_Local_Pending,
9090 arg_Remote_Pending, NULL);
117117 if (message == NULL)
118118 message = "";
119119
120 MYASSERT_SAME_STRING (message, expected_message);
120 g_assert_cmpstr (message, ==, expected_message);
121121
122122 actor = tp_asv_get_uint32 (arg_Details, "actor", &valid);
123123 if (valid)
124124 {
125 MYASSERT_SAME_UINT (actor, expected_actor);
125 g_assert_cmpuint (actor, ==, expected_actor);
126126 }
127127 else
128128 {
129 MYASSERT_SAME_UINT (expected_actor, 0);
129 g_assert_cmpuint (expected_actor, ==, 0);
130130 MYASSERT (tp_asv_lookup (arg_Details, "actor") == NULL,
131131 ": wanted an actor, not an imposter");
132132 }
134134 reason = tp_asv_get_uint32 (arg_Details, "change-reason", &valid);
135135 if (valid)
136136 {
137 MYASSERT_SAME_UINT (reason, expected_reason);
137 g_assert_cmpuint (reason, ==, expected_reason);
138138 }
139139 else
140140 {
141 MYASSERT_SAME_UINT (expected_reason,
141 g_assert_cmpuint (expected_reason, ==,
142142 TP_CHANNEL_GROUP_CHANGE_REASON_NONE);
143143 MYASSERT (tp_asv_lookup (arg_Details, "reason") == NULL,
144144 ": utterly unreasonable");
163163
164164 MYASSERT (tp_cli_dbus_properties_run_get_all (chan, -1,
165165 TP_IFACE_CHANNEL_INTERFACE_GROUP, &props, &error, NULL), "");
166 test_assert_no_error (error);
166 g_assert_no_error (error);
167167
168168 members = tp_asv_get_boxed (props, "Members", DBUS_TYPE_G_UINT_ARRAY);
169169 MYASSERT (members != NULL, ": Members should be defined"); \
184184
185185 flags = tp_asv_get_uint32 (props, "GroupFlags", &valid);
186186 MYASSERT (flags, ": GroupFlags property should be defined");
187 MYASSERT_SAME_UINT (flags,
187 g_assert_cmpuint (flags, ==,
188188 TP_CHANNEL_GROUP_FLAG_PROPERTIES |
189189 TP_CHANNEL_GROUP_FLAG_MEMBERS_CHANGED_DETAILED);
190190
213213
214214 id = g_hash_table_lookup (member_ids, GUINT_TO_POINTER (*h));
215215 MYASSERT (id != NULL, ": id for %u in map", *h);
216 MYASSERT_SAME_STRING (id, tp_handle_inspect (contact_repo, *h));
216 g_assert_cmpstr (id, ==, tp_handle_inspect (contact_repo, *h));
217217 }
218218
219219 MYASSERT (g_hash_table_size (member_ids) == n, ": %u member IDs", n);
236236
237237 /* ...which is us */
238238 h = g_array_index (local_pending, TpHandle, 0);
239 MYASSERT_SAME_UINT (h, self_handle);
239 g_assert_cmpuint (h, ==, self_handle);
240240
241241 details_contains_ids_for (details, hs);
242242 }
254254 MYASSERT (added->len == 1, ": one added");
255255
256256 h = g_array_index (added, TpHandle, 0);
257 MYASSERT_SAME_UINT (h, self_handle);
257 g_assert_cmpuint (h, ==, self_handle);
258258
259259 MYASSERT (removed->len == 0, ": no-one removed");
260260 MYASSERT (local_pending->len == 0, ": no new local pending");
296296 self_added_to_members);
297297 MYASSERT (tp_cli_channel_interface_group_run_add_members (chan, -1,
298298 contacts, "", &error, NULL), "");
299 test_assert_no_error (error);
299 g_assert_no_error (error);
300300 wait_for_outstanding_signals ();
301301 MYASSERT (!outstanding_signals (),
302302 ": MembersChanged and MembersChangedDetailed should have fired once");
318318 MYASSERT (added->len == 1, ": one added");
319319
320320 h = g_array_index (added, TpHandle, 0);
321 MYASSERT_SAME_UINT (h, camel);
321 g_assert_cmpuint (h, ==, camel);
322322
323323 details_contains_ids_for (details, hs);
324324
341341 MYASSERT (added->len == 1, ": one added");
342342
343343 h = g_array_index (added, TpHandle, 0);
344 MYASSERT_SAME_UINT (h, camel2);
344 g_assert_cmpuint (h, ==, camel2);
345345
346346 details_contains_ids_for (details, hs);
347347
368368 MYASSERT (removed->len == 1, ": one removed");
369369
370370 h = g_array_index (removed, TpHandle, 0);
371 MYASSERT_SAME_UINT (h, camel);
371 g_assert_cmpuint (h, ==, camel);
372372
373373 MYASSERT (added->len == 0, ": no-one added");
374374 MYASSERT (local_pending->len == 0, ": no new local pending");
463463 GArray *service_members;
464464 TpHandle a, b;
465465
466 MYASSERT_SAME_UINT (tp_intset_size (members), 2);
466 g_assert_cmpuint (tp_intset_size (members), ==, 2);
467467 MYASSERT (tp_intset_is_member (members, self_handle), "");
468468 MYASSERT (tp_intset_is_member (members, camel2), ": what a pity");
469469
472472 */
473473 tp_group_mixin_get_members ((GObject *) service_chan, &service_members,
474474 NULL);
475 MYASSERT_SAME_UINT (service_members->len, 2);
475 g_assert_cmpuint (service_members->len, ==, 2);
476476 a = g_array_index (service_members, TpHandle, 0);
477477 b = g_array_index (service_members, TpHandle, 1);
478478 MYASSERT (a != b, "");
492492 GError *error = NULL;
493493
494494 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
495 test_assert_no_error (error);
495 g_assert_no_error (error);
496496
497497 MYASSERT (tp_proxy_has_interface (chan, TP_IFACE_CHANNEL_INTERFACE_GROUP),
498498 "");
513513 main (int argc,
514514 char **argv)
515515 {
516 SimpleConnection *service_conn;
516 TpTestsSimpleConnection *service_conn;
517517 TpBaseConnection *service_conn_as_base;
518518 TpDBusDaemon *dbus;
519519 TpConnection *conn;
524524
525525 g_type_init ();
526526 tp_debug_set_flags ("all");
527 dbus = test_dbus_daemon_dup_or_die ();
528
529 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (SIMPLE_TYPE_CONNECTION,
527 dbus = tp_tests_dbus_daemon_dup_or_die ();
528
529 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
530 TP_TESTS_TYPE_SIMPLE_CONNECTION,
530531 "account", "me@example.com",
531532 "protocol", "simple",
532533 NULL));
536537
537538 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
538539 &name, &conn_path, &error), "");
539 test_assert_no_error (error);
540 g_assert_no_error (error);
540541
541542 conn = tp_connection_new (dbus, name, conn_path, &error);
542543 MYASSERT (conn != NULL, "");
543 test_assert_no_error (error);
544 g_assert_no_error (error);
544545
545546 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
546547 "");
547 test_assert_no_error (error);
548 g_assert_no_error (error);
548549
549550 contact_repo = tp_base_connection_get_handles (service_conn_as_base,
550551 TP_HANDLE_TYPE_CONTACT);
553554
554555 chan_path = g_strdup_printf ("%s/Channel", conn_path);
555556
556 service_chan = TEST_TEXT_CHANNEL_GROUP (test_object_new_static_class (
557 TEST_TYPE_TEXT_CHANNEL_GROUP,
557 service_chan = TP_TESTS_TEXT_CHANNEL_GROUP (
558 tp_tests_object_new_static_class (
559 TP_TESTS_TYPE_TEXT_CHANNEL_GROUP,
558560 "connection", service_conn,
559561 "object-path", chan_path,
560562 "detailed", TRUE,
563565 mainloop = g_main_loop_new (NULL, FALSE);
564566
565567 MYASSERT (tp_cli_connection_run_connect (conn, -1, &error, NULL), "");
566 test_assert_no_error (error);
568 g_assert_no_error (error);
567569
568570 chan = tp_channel_new (conn, chan_path, NULL, TP_UNKNOWN_HANDLE_TYPE, 0,
569571 &error);
570 test_assert_no_error (error);
572 g_assert_no_error (error);
571573
572574 MYASSERT (tp_channel_run_until_ready (chan, &error, NULL), "");
573 test_assert_no_error (error);
575 g_assert_no_error (error);
574576
575577 test_group_mixin ();
576578
577579 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
578 test_assert_no_error (error);
580 g_assert_no_error (error);
579581
580582 /* clean up */
581583
1414 static void
1515 test_handles (void)
1616 {
17 TpDBusDaemon *bus_daemon = test_dbus_daemon_dup_or_die ();
17 TpDBusDaemon *bus_daemon = tp_tests_dbus_daemon_dup_or_die ();
1818 TpHandleRepoIface *tp_repo = NULL;
1919 GError *error = NULL;
2020 TpHandle handle = 0;
2121 const gchar *jid = "handle.test@foobar";
2222 const gchar *return_jid;
2323
24 tp_repo = test_object_new_static_class (TP_TYPE_DYNAMIC_HANDLE_REPO,
24 tp_repo = tp_tests_object_new_static_class (TP_TYPE_DYNAMIC_HANDLE_REPO,
2525 "handle-type", TP_HANDLE_TYPE_CONTACT,
2626 NULL);
2727 g_assert (tp_repo != NULL);
8989 g_assert (tp_handle_is_valid (tp_repo, handle, NULL) == TRUE);
9090
9191 /* wait for D-Bus to catch up */
92 test_proxy_run_until_dbus_queue_processed (bus_daemon);
92 tp_tests_proxy_run_until_dbus_queue_processed (bus_daemon);
9393
9494 /* No more refs */
9595 g_assert (tp_handle_is_valid (tp_repo, handle, NULL) == FALSE);
2323
2424 g_type_init ();
2525
26 repo = test_object_new_static_class (TP_TYPE_DYNAMIC_HANDLE_REPO,
26 repo = tp_tests_object_new_static_class (TP_TYPE_DYNAMIC_HANDLE_REPO,
2727 "handle-type", TP_HANDLE_TYPE_CONTACT,
2828 NULL);
2929 MYASSERT (repo != NULL, "");
3737 static gboolean
3838 disconnect (gpointer data)
3939 {
40 simple_connection_inject_disconnect (data);
40 tp_tests_simple_connection_inject_disconnect (data);
4141
4242 return FALSE;
4343 }
5353 main (int argc,
5454 char **argv)
5555 {
56 SimpleConnection *service;
56 TpTestsSimpleConnection *service;
5757 TpBaseConnection *service_as_base;
5858 TpDBusDaemon *dbus;
5959 TpConnection *client;
6464 g_type_init ();
6565 tp_debug_set_flags ("all");
6666 mainloop = g_main_loop_new (NULL, FALSE);
67 dbus = test_dbus_daemon_dup_or_die ();
67 dbus = tp_tests_dbus_daemon_dup_or_die ();
6868
69 service = SIMPLE_CONNECTION (test_object_new_static_class (SIMPLE_TYPE_CONNECTION,
69 service = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
70 TP_TESTS_TYPE_SIMPLE_CONNECTION,
7071 "account", "me@example.com",
7172 "protocol", "simple",
7273 NULL));
7980
8081 MYASSERT (tp_base_connection_register (service_as_base, "simple",
8182 &name, &path, &error), "");
82 test_assert_no_error (error);
83 g_assert_no_error (error);
8384
8485 client = tp_connection_new (dbus, name, path, &error);
8586 MYASSERT (client != NULL, "");
86 test_assert_no_error (error);
87 g_assert_no_error (error);
8788
8889 MYASSERT (tp_connection_run_until_ready (client, TRUE, &error, NULL), "");
89 test_assert_no_error (error);
90 g_assert_no_error (error);
9091
9192 MYASSERT (tp_cli_connection_connect_to_status_changed (client,
9293 on_status_changed, &client, NULL, NULL, NULL), "");
4141 g_type_init ();
4242
4343 MYASSERT (strlen (LONG_ACCOUNT_IS_LONG) == 256, "");
44 service_conn = EXAMPLE_ECHO_CONNECTION (test_object_new_static_class (
44 service_conn = EXAMPLE_ECHO_CONNECTION (tp_tests_object_new_static_class (
4545 EXAMPLE_TYPE_ECHO_CONNECTION,
4646 "account", LONG_ACCOUNT_IS_LONG,
4747 "protocol", "example",
5252
5353 MYASSERT (tp_base_connection_register (service_conn_as_base, "example",
5454 &name, &conn_path, &error), "");
55 test_assert_no_error (error);
55 g_assert_no_error (error);
5656 /* Name is too long to be used unmodified; check that it's shortened to 255
5757 * characters.
5858 */
208208
209209 g_type_init ();
210210 tp_debug_set_flags ("all");
211 dbus = test_dbus_daemon_dup_or_die ();
212
213 service_cm = EXAMPLE_ECHO_2_CONNECTION_MANAGER (test_object_new_static_class (
211 dbus = tp_tests_dbus_daemon_dup_or_die ();
212
213 service_cm = EXAMPLE_ECHO_2_CONNECTION_MANAGER (
214 tp_tests_object_new_static_class (
214215 EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER,
215216 NULL));
216217 g_assert (service_cm != NULL);
222223
223224 cm = tp_connection_manager_new (dbus, "example_echo_2", NULL, &error);
224225 g_assert (cm != NULL);
225 test_connection_manager_run_until_ready (cm);
226 tp_tests_proxy_run_until_prepared (cm, NULL);
226227
227228 parameters = tp_asv_new (
228229 "account", G_TYPE_STRING, "me@example.com",
230231
231232 tp_cli_connection_manager_run_request_connection (cm, -1,
232233 "example", parameters, &name, &conn_path, &error, NULL);
233 test_assert_no_error (error);
234 g_assert_no_error (error);
234235
235236 g_hash_table_unref (parameters);
236237
237238 conn = tp_connection_new (dbus, name, conn_path, &error);
238239 MYASSERT (conn != NULL, "");
239 test_assert_no_error (error);
240 g_assert_no_error (error);
240241
241242 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
242243 "");
243 test_assert_no_error (error);
244
245 handle = test_connection_run_request_contact_handle (conn,
244 g_assert_no_error (error);
245
246 handle = tp_tests_connection_run_request_contact_handle (conn,
246247 "them@example.com");
247248
248249 {
256257
257258 tp_cli_connection_interface_requests_run_create_channel (conn, -1,
258259 request, &chan_path, NULL, &error, NULL);
259 test_assert_no_error (error);
260 g_assert_no_error (error);
260261
261262 g_hash_table_destroy (request);
262263 }
263264
264265 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
265266 TP_HANDLE_TYPE_CONTACT, handle, &error);
266 test_assert_no_error (error);
267 g_assert_no_error (error);
267268
268269 tp_channel_run_until_ready (chan, &error, NULL);
269 test_assert_no_error (error);
270 g_assert_no_error (error);
270271
271272 MYASSERT (tp_cli_channel_type_text_connect_to_received (chan, on_received,
272273 NULL, NULL, NULL, NULL) != NULL, "");
292293
293294 tp_cli_dbus_properties_run_get_all (chan, -1,
294295 TP_IFACE_CHANNEL_INTERFACE_MESSAGES, &properties, &error, NULL);
295 test_assert_no_error (error);
296 g_assert_no_error (error);
296297
297298 g_print ("\n\n==== Examining properties ====\n\n");
298299
344345 while (received_count < 1 || message_received_count < 1)
345346 g_main_context_iteration (NULL, TRUE);
346347
347 test_assert_no_error (error);
348 g_assert_no_error (error);
348349 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
349350 MYASSERT (received_count == 1, ": %u != 1", received_count);
350351 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
384385 while (received_count < 1 || message_received_count < 1)
385386 g_main_context_iteration (NULL, TRUE);
386387
387 test_assert_no_error (error);
388 g_assert_no_error (error);
388389 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
389390 MYASSERT (received_count == 1, ": %u != 1", received_count);
390391 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION,
425426 while (received_count < 1 || message_received_count < 1)
426427 g_main_context_iteration (NULL, TRUE);
427428
428 test_assert_no_error (error);
429 g_assert_no_error (error);
429430 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
430431 MYASSERT (received_count == 1, ": %u != 1", received_count);
431432 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE,
512513
513514 tp_cli_channel_interface_messages_run_send_message (chan, -1,
514515 send_parts, 0 /* flags */, &token, &error, NULL);
515 test_assert_no_error (error);
516 g_assert_no_error (error);
516517
517518 /* wait for pending events to be delivered */
518519 while (received_count < 1 || message_received_count < 1)
618619
619620 tp_cli_channel_interface_messages_run_send_message (chan, -1,
620621 send_parts, 0 /* flags */, &token, &error, NULL);
621 test_assert_no_error (error);
622 g_assert_no_error (error);
622623
623624 /* wait for pending events to be delivered */
624625 while (received_count < 1 || message_received_count < 1)
708709
709710 tp_cli_channel_interface_messages_run_send_message (chan, -1,
710711 send_parts, 0 /* flags */, &token, &error, NULL);
711 test_assert_no_error (error);
712 g_assert_no_error (error);
712713
713714 /* wait for pending events to be delivered */
714715 while (received_count < 1 || message_received_count < 1)
802803
803804 tp_cli_channel_interface_messages_run_send_message (chan, -1,
804805 send_parts, 0 /* flags */, &token, &error, NULL);
805 test_assert_no_error (error);
806 g_assert_no_error (error);
806807
807808 /* wait for pending events to be delivered */
808809 while (received_count < 1 || message_received_count < 1)
858859
859860 tp_cli_channel_interface_messages_run_get_pending_message_content (chan,
860861 -1, last_received_id, part_numbers, &ret, &error, NULL);
861 test_assert_no_error (error);
862 g_assert_no_error (error);
862863
863864 MYASSERT (g_hash_table_size (ret) == 2, ": %u",
864865 g_hash_table_size (ret));
887888
888889 tp_cli_channel_type_text_run_list_pending_messages (chan, -1,
889890 FALSE, &messages, &error, NULL);
890 test_assert_no_error (error);
891 g_assert_no_error (error);
891892
892893 g_print ("Freeing\n");
893894 g_boxed_free (TP_ARRAY_TYPE_PENDING_TEXT_MESSAGE_LIST, messages);
932933
933934 tp_cli_dbus_properties_run_get_all (chan, -1,
934935 TP_IFACE_CHANNEL_INTERFACE_MESSAGES, &properties, &error, NULL);
935 test_assert_no_error (error);
936 g_assert_no_error (error);
936937
937938 g_print ("\n\n==== Examining properties ====\n\n");
938939
984985
985986 tp_cli_channel_type_text_run_acknowledge_pending_messages (chan, -1,
986987 msgid, &error, NULL);
987 test_assert_no_error (error);
988 g_assert_no_error (error);
988989
989990 g_array_free (msgid, TRUE);
990991 }
997998
998999 tp_cli_channel_type_text_run_list_pending_messages (chan, -1,
9991000 TRUE, &messages, &error, NULL);
1000 test_assert_no_error (error);
1001 g_assert_no_error (error);
10011002
10021003 g_print ("Freeing\n");
10031004 g_boxed_free (TP_ARRAY_TYPE_PENDING_TEXT_MESSAGE_LIST, messages);
10091010 GPtrArray *channels;
10101011
10111012 MYASSERT (tp_cli_channel_run_close (chan, -1, &error, NULL), "");
1012 test_assert_no_error (error);
1013 g_assert_no_error (error);
10131014 MYASSERT (tp_proxy_get_invalidated (chan) != NULL, "");
10141015
10151016 /* assert that the channel has really gone */
10161017 MYASSERT (tp_cli_connection_run_list_channels (conn, -1,
10171018 &channels, &error, NULL), "");
1018 test_assert_no_error (error);
1019 g_assert_no_error (error);
10191020 MYASSERT (channels->len == 0, "%u != 0", channels->len);
10201021 g_boxed_free (TP_ARRAY_TYPE_CHANNEL_INFO_LIST, channels);
10211022 }
10231024 g_print ("\n\n==== End of tests ====\n");
10241025
10251026 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
1026 test_assert_no_error (error);
1027 g_assert_no_error (error);
10271028
10281029 g_object_unref (chan);
10291030 g_object_unref (conn);
4343 TpDBusDaemon *dbus;
4444 GError *error /* statically initialized to NULL */ ;
4545
46 ParamConnectionManager *service_cm;
46 TpTestsParamConnectionManager *service_cm;
4747
4848 TpConnectionManager *cm;
4949 TpConnection *conn;
6060 tp_debug_set_flags ("all");
6161
6262 test->mainloop = g_main_loop_new (NULL, FALSE);
63 test->dbus = test_dbus_daemon_dup_or_die ();
64
65 test->service_cm = PARAM_CONNECTION_MANAGER (test_object_new_static_class (
66 TYPE_PARAM_CONNECTION_MANAGER,
63 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
64
65 test->service_cm = TP_TESTS_PARAM_CONNECTION_MANAGER (
66 tp_tests_object_new_static_class (
67 TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER,
6768 NULL));
6869 g_assert (test->service_cm != NULL);
6970 service_cm_as_base = TP_BASE_CONNECTION_MANAGER (test->service_cm);
7576 test->cm = tp_connection_manager_new (test->dbus, "params_cm",
7677 NULL, &test->error);
7778 g_assert (test->cm != NULL);
78 test_connection_manager_run_until_ready (test->cm);
79 tp_tests_proxy_run_until_prepared (test->cm, NULL);
7980 }
8081
8182 static void
9596 gconstpointer data G_GNUC_UNUSED)
9697 {
9798 GHashTable *parameters;
98 CMParams *params;
99 TpTestsCMParams *params;
99100 gchar *array_of_strings[] = { "Telepathy", "rocks", "!", NULL };
100101 guint i;
101102 GArray *array_of_bytes;
143144 g_assert (test->error->code == TP_ERROR_NOT_IMPLEMENTED);
144145 g_clear_error (&test->error);
145146
146 params = param_connection_manager_steal_params_last_conn ();
147 params = tp_tests_param_connection_manager_steal_params_last_conn ();
147148 g_assert (params != NULL);
148149
149150 g_assert (!tp_strdiff (params->a_string, "a string"));
169170 g_assert (!tp_strdiff (params->lc_string, "filter me"));
170171 g_assert (!tp_strdiff (params->uc_string, "FILTER ME"));
171172
172 param_connection_manager_free_params (params);
173 tp_tests_param_connection_manager_free_params (params);
173174 g_hash_table_destroy (parameters);
174175 g_array_free (array_of_bytes, TRUE);
175176 }
179180 gconstpointer data G_GNUC_UNUSED)
180181 {
181182 GHashTable *parameters;
182 CMParams *params;
183 TpTestsCMParams *params;
183184
184185 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
185186 (GDestroyNotify) tp_g_value_slice_free);
192193 g_assert_cmpint (test->error->code, ==, TP_ERROR_NOT_IMPLEMENTED);
193194 g_clear_error (&test->error);
194195
195 params = param_connection_manager_steal_params_last_conn ();
196 params = tp_tests_param_connection_manager_steal_params_last_conn ();
196197 g_assert (params->would_have_been_freed);
197198 g_assert_cmpstr (params->a_string, ==, "the default string");
198199 g_assert_cmpint (params->a_int16, ==, 42);
199200 g_assert_cmpint (params->a_int32, ==, 42);
200 param_connection_manager_free_params (params);
201 tp_tests_param_connection_manager_free_params (params);
201202
202203 g_hash_table_destroy (parameters);
203204 }
207208 gconstpointer data G_GNUC_UNUSED)
208209 {
209210 GHashTable *parameters;
210 CMParams *params;
211 TpTestsCMParams *params;
211212
212213 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
213214 (GDestroyNotify) tp_g_value_slice_free);
218219 g_assert_cmpint (test->error->code, ==, TP_ERROR_INVALID_ARGUMENT);
219220 g_clear_error (&test->error);
220221
221 params = param_connection_manager_steal_params_last_conn ();
222 params = tp_tests_param_connection_manager_steal_params_last_conn ();
222223
223224 if (params != NULL)
224225 {
225226 g_assert (params->would_have_been_freed);
226 param_connection_manager_free_params (params);
227 tp_tests_param_connection_manager_free_params (params);
227228 }
228229
229230 g_hash_table_destroy (parameters);
234235 gconstpointer data G_GNUC_UNUSED)
235236 {
236237 GHashTable *parameters;
237 CMParams *params;
238 TpTestsCMParams *params;
238239
239240 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
240241 (GDestroyNotify) tp_g_value_slice_free);
251252 g_assert_cmpint (test->error->code, ==, TP_ERROR_INVALID_ARGUMENT);
252253 g_clear_error (&test->error);
253254
254 params = param_connection_manager_steal_params_last_conn ();
255 params = tp_tests_param_connection_manager_steal_params_last_conn ();
255256
256257 if (params != NULL)
257258 {
258259 g_assert (params->would_have_been_freed);
259 param_connection_manager_free_params (params);
260 tp_tests_param_connection_manager_free_params (params);
260261 }
261262
262263 g_hash_table_destroy (parameters);
267268 gconstpointer data G_GNUC_UNUSED)
268269 {
269270 GHashTable *parameters;
270 CMParams *params;
271 TpTestsCMParams *params;
271272
272273 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
273274 (GDestroyNotify) tp_g_value_slice_free);
280281 g_assert_cmpint (test->error->code, ==, TP_ERROR_INVALID_ARGUMENT);
281282 g_clear_error (&test->error);
282283
283 params = param_connection_manager_steal_params_last_conn ();
284 params = tp_tests_param_connection_manager_steal_params_last_conn ();
284285
285286 if (params != NULL)
286287 {
287288 g_assert (params->would_have_been_freed);
288 param_connection_manager_free_params (params);
289 tp_tests_param_connection_manager_free_params (params);
289290 }
290291
291292 g_hash_table_destroy (parameters);
296297 gconstpointer data G_GNUC_UNUSED)
297298 {
298299 GHashTable *parameters;
299 CMParams *params;
300 TpTestsCMParams *params;
300301
301302 parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
302303 (GDestroyNotify) tp_g_value_slice_free);
311312 g_assert_cmpint (test->error->code, ==, TP_ERROR_INVALID_ARGUMENT);
312313 g_clear_error (&test->error);
313314
314 params = param_connection_manager_steal_params_last_conn ();
315 params = tp_tests_param_connection_manager_steal_params_last_conn ();
315316
316317 if (params != NULL)
317318 {
318319 g_assert (params->would_have_been_freed);
319 param_connection_manager_free_params (params);
320 tp_tests_param_connection_manager_free_params (params);
320321 }
321322
322323 g_hash_table_destroy (parameters);
131131
132132 tp_debug_set_flags ("all");
133133 g_type_init ();
134 dbus_daemon = test_dbus_daemon_dup_or_die ();
134 dbus_daemon = tp_tests_dbus_daemon_dup_or_die ();
135135
136 obj = test_object_new_static_class (TEST_TYPE_PROPERTIES, NULL);
136 obj = tp_tests_object_new_static_class (TEST_TYPE_PROPERTIES, NULL);
137137 tp_dbus_daemon_register_object (dbus_daemon, "/", obj);
138138
139139 /* Open a D-Bus connection to myself */
140 proxy = TP_PROXY (test_object_new_static_class (TP_TYPE_PROXY,
140 proxy = TP_PROXY (tp_tests_object_new_static_class (TP_TYPE_PROXY,
141141 "dbus-daemon", dbus_daemon,
142142 "bus-name", tp_dbus_daemon_get_unique_name (dbus_daemon),
143143 "object-path", "/",
2929 }
3030
3131 static void
32 test_self_handle (SimpleConnection *service_conn,
32 test_self_handle (TpTestsSimpleConnection *service_conn,
3333 TpConnection *client_conn)
3434 {
3535 TpBaseConnection *service_conn_as_base = TP_BASE_CONNECTION (service_conn);
4141 g_signal_connect (client_conn, "notify::self-handle",
4242 G_CALLBACK (on_self_handle_changed), &times);
4343
44 MYASSERT_SAME_STRING (tp_handle_inspect (contact_repo,
45 tp_base_connection_get_self_handle (service_conn_as_base)),
44 g_assert_cmpstr (tp_handle_inspect (contact_repo,
45 tp_base_connection_get_self_handle (service_conn_as_base)), ==,
4646 "me@example.com");
4747
48 MYASSERT_SAME_UINT (tp_connection_get_self_handle (client_conn),
48 g_assert_cmpuint (tp_connection_get_self_handle (client_conn), ==,
4949 tp_base_connection_get_self_handle (service_conn_as_base));
5050
5151 g_object_get (client_conn,
5252 "self-handle", &handle,
5353 NULL);
54 MYASSERT_SAME_UINT (handle,
54 g_assert_cmpuint (handle, ==,
5555 tp_base_connection_get_self_handle (service_conn_as_base));
5656
57 MYASSERT_SAME_UINT (times, 0);
57 g_assert_cmpuint (times, ==, 0);
5858
5959 /* similar to /nick in IRC */
60 simple_connection_set_identifier (service_conn, "myself@example.org");
61 test_connection_run_until_dbus_queue_processed (client_conn);
62 MYASSERT_SAME_UINT (times, 1);
60 tp_tests_simple_connection_set_identifier (service_conn, "myself@example.org");
61 tp_tests_proxy_run_until_dbus_queue_processed (client_conn);
62 g_assert_cmpuint (times, ==, 1);
6363
64 MYASSERT_SAME_STRING (tp_handle_inspect (contact_repo,
65 tp_base_connection_get_self_handle (service_conn_as_base)),
64 g_assert_cmpstr (tp_handle_inspect (contact_repo,
65 tp_base_connection_get_self_handle (service_conn_as_base)), ==,
6666 "myself@example.org");
6767
68 MYASSERT_SAME_UINT (tp_connection_get_self_handle (client_conn),
68 g_assert_cmpuint (tp_connection_get_self_handle (client_conn), ==,
6969 tp_base_connection_get_self_handle (service_conn_as_base));
7070
7171 g_object_get (client_conn,
7272 "self-handle", &handle,
7373 NULL);
74 MYASSERT_SAME_UINT (handle,
74 g_assert_cmpuint (handle, ==,
7575 tp_base_connection_get_self_handle (service_conn_as_base));
7676 }
7777
8080 char **argv)
8181 {
8282 TpDBusDaemon *dbus;
83 SimpleConnection *service_conn;
83 TpTestsSimpleConnection *service_conn;
8484 TpBaseConnection *service_conn_as_base;
8585 gchar *name;
8686 gchar *conn_path;
9191
9292 g_type_init ();
9393 tp_debug_set_flags ("all");
94 dbus = test_dbus_daemon_dup_or_die ();
94 dbus = tp_tests_dbus_daemon_dup_or_die ();
9595
96 service_conn = SIMPLE_CONNECTION (test_object_new_static_class (
97 SIMPLE_TYPE_CONNECTION,
96 service_conn = TP_TESTS_SIMPLE_CONNECTION (tp_tests_object_new_static_class (
97 TP_TESTS_TYPE_SIMPLE_CONNECTION,
9898 "account", "me@example.com",
9999 "protocol", "simple",
100100 NULL));
104104
105105 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
106106 &name, &conn_path, &error), "");
107 test_assert_no_error (error);
107 g_assert_no_error (error);
108108
109109 client_conn = tp_connection_new (dbus, name, conn_path, &error);
110110 MYASSERT (client_conn != NULL, "");
111 test_assert_no_error (error);
111 g_assert_no_error (error);
112112 MYASSERT (tp_connection_run_until_ready (client_conn, TRUE, &error, NULL),
113113 "");
114 test_assert_no_error (error);
114 g_assert_no_error (error);
115115
116116 /* Tests */
117117
121121
122122 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
123123 "");
124 test_assert_no_error (error);
124 g_assert_no_error (error);
125125 g_object_unref (client_conn);
126126
127127 service_conn_as_base = NULL;
1919 #include "tests/lib/util.h"
2020
2121 static void
22 test_simple_presence (ContactsConnection *service_conn,
22 test_simple_presence (TpTestsContactsConnection *service_conn,
2323 TpConnection *client_conn)
2424 {
2525 GError *error = NULL;
3030 MYASSERT (tp_cli_dbus_properties_run_get (client_conn, -1,
3131 TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, "Statuses",
3232 &value, &error, NULL), "");
33 test_assert_no_error (error);
33 g_assert_no_error (error);
3434
3535 MYASSERT (G_VALUE_TYPE (value) == TP_HASH_TYPE_SIMPLE_STATUS_SPEC_MAP,
3636 ": %s != %s", G_VALUE_TYPE_NAME (value),
4040
4141 spec = g_hash_table_lookup (statuses, "available");
4242 MYASSERT (spec != NULL, "");
43 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
43 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
4444 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
4545 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
4646 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* can have message */
4747
4848 spec = g_hash_table_lookup (statuses, "busy");
4949 MYASSERT (spec != NULL, "");
50 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
50 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
5151 TP_CONNECTION_PRESENCE_TYPE_BUSY);
5252 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
5353 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* can have message */
5454
5555 spec = g_hash_table_lookup (statuses, "away");
5656 MYASSERT (spec != NULL, "");
57 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
57 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
5858 TP_CONNECTION_PRESENCE_TYPE_AWAY);
5959 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
6060 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* can have message */
6161
6262 spec = g_hash_table_lookup (statuses, "offline");
6363 MYASSERT (spec != NULL, "");
64 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
64 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
6565 TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
6666 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
6767
6868 spec = g_hash_table_lookup (statuses, "unknown");
6969 MYASSERT (spec != NULL, "");
70 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
70 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
7171 TP_CONNECTION_PRESENCE_TYPE_UNKNOWN);
7272 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
7373
7474 spec = g_hash_table_lookup (statuses, "error");
7575 MYASSERT (spec != NULL, "");
76 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
76 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
7777 TP_CONNECTION_PRESENCE_TYPE_ERROR);
7878 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
7979
8282
8383 MYASSERT (!tp_cli_connection_interface_simple_presence_run_set_presence (
8484 client_conn, -1, "offline", "", &error, NULL), "");
85 MYASSERT_SAME_STRING (g_quark_to_string (error->domain),
85 g_assert_cmpstr (g_quark_to_string (error->domain), ==,
8686 g_quark_to_string (TP_ERRORS));
8787 g_error_free (error);
8888 error = NULL;
8989
9090 MYASSERT (tp_cli_connection_interface_simple_presence_run_set_presence (
9191 client_conn, -1, "available", "Here I am", &error, NULL), "");
92 test_assert_no_error (error);
92 g_assert_no_error (error);
9393 }
9494
9595 static void
96 test_complex_presence (ContactsConnection *service_conn,
96 test_complex_presence (TpTestsContactsConnection *service_conn,
9797 TpConnection *client_conn)
9898 {
9999 GHashTable *statuses = NULL;
104104
105105 MYASSERT (tp_cli_connection_interface_presence_run_get_statuses (
106106 client_conn, -1, &statuses, &error, NULL), "");
107 test_assert_no_error (error);
107 g_assert_no_error (error);
108108
109109 spec = g_hash_table_lookup (statuses, "available");
110110 MYASSERT (spec != NULL, "");
111 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
111 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
112112 TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
113113 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
114114 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
115115 params = g_value_get_boxed (spec->values + 3);
116116 MYASSERT (params != NULL, "");
117 MYASSERT_SAME_UINT (g_hash_table_size (params), 1);
118 MYASSERT_SAME_STRING (
119 (const gchar *) g_hash_table_lookup (params, "message"), "s");
117 g_assert_cmpuint (g_hash_table_size (params), ==, 1);
118 g_assert_cmpstr (
119 (const gchar *) g_hash_table_lookup (params, "message"), ==, "s");
120120
121121 spec = g_hash_table_lookup (statuses, "away");
122122 MYASSERT (spec != NULL, "");
123 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
123 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
124124 TP_CONNECTION_PRESENCE_TYPE_AWAY);
125125 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
126126 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
127127 params = g_value_get_boxed (spec->values + 3);
128128 MYASSERT (params != NULL, "");
129 MYASSERT_SAME_UINT (g_hash_table_size (params), 1);
130 MYASSERT_SAME_STRING (
131 (const gchar *) g_hash_table_lookup (params, "message"), "s");
129 g_assert_cmpuint (g_hash_table_size (params), ==, 1);
130 g_assert_cmpstr (
131 (const gchar *) g_hash_table_lookup (params, "message"), ==, "s");
132132
133133 spec = g_hash_table_lookup (statuses, "busy");
134134 MYASSERT (spec != NULL, "");
135 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
135 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
136136 TP_CONNECTION_PRESENCE_TYPE_BUSY);
137137 MYASSERT (g_value_get_boolean (spec->values + 1), ""); /* can set on self */
138138 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
139139 params = g_value_get_boxed (spec->values + 3);
140140 MYASSERT (params != NULL, "");
141 MYASSERT_SAME_UINT (g_hash_table_size (params), 1);
142 MYASSERT_SAME_STRING (
143 (const gchar *) g_hash_table_lookup (params, "message"), "s");
141 g_assert_cmpuint (g_hash_table_size (params), ==, 1);
142 g_assert_cmpstr (
143 (const gchar *) g_hash_table_lookup (params, "message"), ==, "s");
144144
145145 spec = g_hash_table_lookup (statuses, "offline");
146146 MYASSERT (spec != NULL, "");
147 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
147 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
148148 TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
149149 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
150150 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
151151 params = g_value_get_boxed (spec->values + 3);
152152 MYASSERT (params != NULL, "");
153 MYASSERT_SAME_UINT (g_hash_table_size (params), 0);
153 g_assert_cmpuint (g_hash_table_size (params), ==, 0);
154154
155155 spec = g_hash_table_lookup (statuses, "error");
156156 MYASSERT (spec != NULL, "");
157 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
157 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
158158 TP_CONNECTION_PRESENCE_TYPE_ERROR);
159159 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
160160 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
161161 params = g_value_get_boxed (spec->values + 3);
162162 MYASSERT (params != NULL, "");
163 MYASSERT_SAME_UINT (g_hash_table_size (params), 0);
163 g_assert_cmpuint (g_hash_table_size (params), ==, 0);
164164
165165 spec = g_hash_table_lookup (statuses, "unknown");
166166 MYASSERT (spec != NULL, "");
167 MYASSERT_SAME_UINT (g_value_get_uint (spec->values + 0),
167 g_assert_cmpuint (g_value_get_uint (spec->values + 0), ==,
168168 TP_CONNECTION_PRESENCE_TYPE_UNKNOWN);
169169 MYASSERT (!g_value_get_boolean (spec->values + 1), ""); /* can set on self */
170170 MYASSERT (g_value_get_boolean (spec->values + 2), ""); /* exclusive */
171171 params = g_value_get_boxed (spec->values + 3);
172172 MYASSERT (params != NULL, "");
173 MYASSERT_SAME_UINT (g_hash_table_size (params), 0);
173 g_assert_cmpuint (g_hash_table_size (params), ==, 0);
174174
175175 monster = g_hash_table_new (g_str_hash, g_str_equal);
176176 params = g_hash_table_new (g_str_hash, g_str_equal);
179179
180180 MYASSERT (!tp_cli_connection_interface_presence_run_set_status (
181181 client_conn, -1, monster, &error, NULL), "");
182 MYASSERT_SAME_STRING (g_quark_to_string (error->domain),
182 g_assert_cmpstr (g_quark_to_string (error->domain), ==,
183183 g_quark_to_string (TP_ERRORS));
184184 g_error_free (error);
185185 error = NULL;
189189
190190 MYASSERT (tp_cli_connection_interface_presence_run_set_status (
191191 client_conn, -1, monster, &error, NULL), "");
192 test_assert_no_error (error);
192 g_assert_no_error (error);
193193
194194 g_hash_table_destroy (params);
195195 params = NULL;
204204 char **argv)
205205 {
206206 TpDBusDaemon *dbus;
207 ContactsConnection *service_conn;
207 TpTestsContactsConnection *service_conn;
208208 TpBaseConnection *service_conn_as_base;
209209 gchar *name;
210210 gchar *conn_path;
217217
218218 g_type_init ();
219219 tp_debug_set_flags ("all");
220 dbus = test_dbus_daemon_dup_or_die ();
221
222 service_conn = CONTACTS_CONNECTION (test_object_new_static_class (
223 CONTACTS_TYPE_CONNECTION,
220 dbus = tp_tests_dbus_daemon_dup_or_die ();
221
222 service_conn = TP_TESTS_CONTACTS_CONNECTION (
223 tp_tests_object_new_static_class (
224 TP_TESTS_TYPE_CONTACTS_CONNECTION,
224225 "account", "me@example.com",
225226 "protocol", "simple",
226227 NULL));
230231
231232 MYASSERT (tp_base_connection_register (service_conn_as_base, "simple",
232233 &name, &conn_path, &error), "");
233 test_assert_no_error (error);
234 g_assert_no_error (error);
234235
235236 client_conn = tp_connection_new (dbus, name, conn_path, &error);
236237 MYASSERT (client_conn != NULL, "");
237 test_assert_no_error (error);
238 g_assert_no_error (error);
238239
239240 /* Assert that GetInterfaces succeeds before we're CONNECTED */
240241 MYASSERT (tp_cli_connection_run_get_interfaces (client_conn, -1, &interfaces,
241242 &error, NULL), "");
242 test_assert_no_error (error);
243 g_assert_no_error (error);
243244 MYASSERT (tp_strv_contains ((const gchar * const *) interfaces,
244245 TP_IFACE_CONNECTION_INTERFACE_ALIASING), "");
245246 MYASSERT (tp_strv_contains ((const gchar * const *) interfaces,
255256 MYASSERT (tp_cli_connection_run_get_status (client_conn, -1, &status,
256257 &error, NULL), "");
257258 g_assert_cmpuint (status, ==, (guint) TP_CONNECTION_STATUS_DISCONNECTED);
258 test_assert_no_error (error);
259 g_assert_no_error (error);
259260
260261 MYASSERT (tp_connection_run_until_ready (client_conn, TRUE, &error, NULL),
261262 "");
262 test_assert_no_error (error);
263 g_assert_no_error (error);
263264
264265 /* Tests */
265266
270271
271272 MYASSERT (tp_cli_connection_run_disconnect (client_conn, -1, &error, NULL),
272273 "");
273 test_assert_no_error (error);
274 g_assert_no_error (error);
274275 g_object_unref (client_conn);
275276
276277 service_conn_as_base = NULL;
2525 /* Service side objects */
2626 TpBaseClient *simple_approver;
2727 TpBaseConnection *base_connection;
28 SimpleAccount *account_service;
29 TestTextChannelNull *text_chan_service;
30 SimpleChannelDispatchOperation *cdo_service;
28 TpTestsSimpleAccount *account_service;
29 TpTestsTextChannelNull *text_chan_service;
30 TpTestsSimpleChannelDispatchOperation *cdo_service;
3131
3232 /* Client side objects */
3333 TpClient *client;
5050 TpHandleRepoIface *contact_repo;
5151
5252 test->mainloop = g_main_loop_new (NULL, FALSE);
53 test->dbus = test_dbus_daemon_dup_or_die ();
53 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
5454
5555 test->error = NULL;
5656
6161 g_assert_no_error (test->error);
6262
6363 /* Create service-side Account object */
64 test->account_service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT,
65 NULL);
64 test->account_service = tp_tests_object_new_static_class (
65 TP_TESTS_TYPE_SIMPLE_ACCOUNT, NULL);
6666 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
6767 test->account_service);
6868
7171 g_assert (test->account != NULL);
7272
7373 /* Create (service and client sides) connection objects */
74 test_create_and_connect_conn (SIMPLE_TYPE_CONNECTION, "me@test.com",
75 &test->base_connection, &test->connection);
74 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_SIMPLE_CONNECTION,
75 "me@test.com", &test->base_connection, &test->connection);
7676
7777 /* Create service-side text channel object */
7878 chan_path = g_strdup_printf ("%s/Channel",
8585 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
8686 g_assert_no_error (test->error);
8787
88 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
89 test_object_new_static_class (
90 TEST_TYPE_TEXT_CHANNEL_NULL,
88 test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
89 tp_tests_object_new_static_class (
90 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
9191 "connection", test->base_connection,
9292 "object-path", chan_path,
9393 "handle", handle,
103103 g_free (chan_path);
104104
105105 /* Create Service side ChannelDispatchOperation object */
106 test->cdo_service = test_object_new_static_class (
107 SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION,
106 test->cdo_service = tp_tests_object_new_static_class (
107 TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION,
108108 NULL);
109109 tp_dbus_daemon_register_object (test->dbus, CDO_PATH, test->cdo_service);
110110
111 simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
111 tp_tests_simple_channel_dispatch_operation_set_conn_path (test->cdo_service,
112112 tp_proxy_get_object_path (test->connection));
113113
114 simple_channel_dispatch_operation_set_account_path (test->cdo_service,
115 tp_proxy_get_object_path (test->account));
116
117 simple_channel_dispatch_operation_add_channel (test->cdo_service,
114 tp_tests_simple_channel_dispatch_operation_set_account_path (
115 test->cdo_service, tp_proxy_get_object_path (test->account));
116
117 tp_tests_simple_channel_dispatch_operation_add_channel (test->cdo_service,
118118 test->text_chan);
119119
120120 g_assert (tp_dbus_daemon_request_name (test->dbus,
164164 TpSimpleApproverAddDispatchOperationImpl impl)
165165 {
166166 /* Create service-side Client object */
167 test->simple_approver = test_object_new_static_class (TP_TYPE_SIMPLE_APPROVER,
167 test->simple_approver = tp_tests_object_new_static_class (
168 TP_TYPE_SIMPLE_APPROVER,
168169 "dbus-daemon", test->dbus,
169170 "name", "MySimpleApprover",
170171 "uniquify-name", FALSE,
175176 g_assert (test->simple_approver != NULL);
176177
177178 /* Create client-side Client object */
178 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
179 test->client = tp_tests_object_new_static_class (TP_TYPE_CLIENT,
179180 "dbus-daemon", test->dbus,
180181 "bus-name", tp_base_client_get_bus_name (test->simple_approver),
181182 "object-path", tp_base_client_get_object_path (test->simple_approver),
2424 /* Service side objects */
2525 TpBaseClient *simple_handler;
2626 TpBaseConnection *base_connection;
27 SimpleAccount *account_service;
28 TestTextChannelNull *text_chan_service;
27 TpTestsSimpleAccount *account_service;
28 TpTestsTextChannelNull *text_chan_service;
2929
3030 /* Client side objects */
3131 TpClient *client;
4747 TpHandleRepoIface *contact_repo;
4848
4949 test->mainloop = g_main_loop_new (NULL, FALSE);
50 test->dbus = test_dbus_daemon_dup_or_die ();
50 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
5151
5252 test->error = NULL;
5353
5858 g_assert_no_error (test->error);
5959
6060 /* Create service-side Account object */
61 test->account_service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT,
62 NULL);
61 test->account_service = tp_tests_object_new_static_class (
62 TP_TESTS_TYPE_SIMPLE_ACCOUNT, NULL);
6363 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
6464 test->account_service);
6565
6868 g_assert (test->account != NULL);
6969
7070 /* 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);
71 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_SIMPLE_CONNECTION,
72 "me@test.com", &test->base_connection, &test->connection);
7373
7474 /* Create service-side text channel object */
7575 chan_path = g_strdup_printf ("%s/Channel",
8282 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
8383 g_assert_no_error (test->error);
8484
85 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
86 test_object_new_static_class (
87 TEST_TYPE_TEXT_CHANNEL_NULL,
85 test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
86 tp_tests_object_new_static_class (
87 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
8888 "connection", test->base_connection,
8989 "object-path", chan_path,
9090 "handle", handle,
140140 TpSimpleHandlerHandleChannelsImpl impl)
141141 {
142142 /* Create service-side Client object */
143 test->simple_handler = test_object_new_static_class (TP_TYPE_SIMPLE_HANDLER,
143 test->simple_handler = tp_tests_object_new_static_class (
144 TP_TYPE_SIMPLE_HANDLER,
144145 "dbus-daemon", test->dbus,
145146 "bypass-approval", bypass_approval,
146147 "requests", requests,
153154 g_assert (test->simple_handler != NULL);
154155
155156 /* Create client-side Client object */
156 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
157 test->client = tp_tests_object_new_static_class (TP_TYPE_CLIENT,
157158 "dbus-daemon", test->dbus,
158159 "bus-name", tp_base_client_get_bus_name (test->simple_handler),
159160 "object-path", tp_base_client_get_object_path (test->simple_handler),
2424 /* Service side objects */
2525 TpBaseClient *simple_observer;
2626 TpBaseConnection *base_connection;
27 SimpleAccount *account_service;
28 TestTextChannelNull *text_chan_service;
27 TpTestsSimpleAccount *account_service;
28 TpTestsTextChannelNull *text_chan_service;
2929
3030 /* Client side objects */
3131 TpClient *client;
4747 TpHandleRepoIface *contact_repo;
4848
4949 test->mainloop = g_main_loop_new (NULL, FALSE);
50 test->dbus = test_dbus_daemon_dup_or_die ();
50 test->dbus = tp_tests_dbus_daemon_dup_or_die ();
5151
5252 test->error = NULL;
5353
5858 g_assert_no_error (test->error);
5959
6060 /* Create service-side Account object */
61 test->account_service = test_object_new_static_class (SIMPLE_TYPE_ACCOUNT,
62 NULL);
61 test->account_service = tp_tests_object_new_static_class (
62 TP_TESTS_TYPE_SIMPLE_ACCOUNT, NULL);
6363 tp_dbus_daemon_register_object (test->dbus, ACCOUNT_PATH,
6464 test->account_service);
6565
6868 g_assert (test->account != NULL);
6969
7070 /* Create (service and client sides) connection objects */
71 test_create_and_connect_conn (SIMPLE_TYPE_CONNECTION, "me@test.com",
71 tp_tests_create_and_connect_conn (TP_TESTS_TYPE_SIMPLE_CONNECTION, "me@test.com",
7272 &test->base_connection, &test->connection);
7373
7474 /* Create service-side text channel object */
8282 handle = tp_handle_ensure (contact_repo, "bob", NULL, &test->error);
8383 g_assert_no_error (test->error);
8484
85 test->text_chan_service = TEST_TEXT_CHANNEL_NULL (
86 test_object_new_static_class (
87 TEST_TYPE_TEXT_CHANNEL_NULL,
85 test->text_chan_service = TP_TESTS_TEXT_CHANNEL_NULL (
86 tp_tests_object_new_static_class (
87 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
8888 "connection", test->base_connection,
8989 "object-path", chan_path,
9090 "handle", handle,
139139 TpSimpleObserverObserveChannelsImpl impl)
140140 {
141141 /* Create service-side Client object */
142 test->simple_observer = test_object_new_static_class (TP_TYPE_SIMPLE_OBSERVER,
142 test->simple_observer = tp_tests_object_new_static_class (
143 TP_TYPE_SIMPLE_OBSERVER,
143144 "dbus-daemon", test->dbus,
144145 "recover", recover,
145146 "name", "MySimpleObserver",
151152 g_assert (test->simple_observer != NULL);
152153
153154 /* Create client-side Client object */
154 test->client = test_object_new_static_class (TP_TYPE_CLIENT,
155 test->client = tp_tests_object_new_static_class (TP_TYPE_CLIENT,
155156 "dbus-daemon", test->dbus,
156157 "bus-name", tp_base_client_get_bus_name (test->simple_observer),
157158 "object-path", tp_base_client_get_object_path (test->simple_observer),
9292
9393 g_type_init ();
9494 /* tp_debug_set_flags ("all"); */
95 dbus = test_dbus_daemon_dup_or_die ();
96
97 service_conn = EXAMPLE_ECHO_CONNECTION (test_object_new_static_class (
95 dbus = tp_tests_dbus_daemon_dup_or_die ();
96
97 service_conn = EXAMPLE_ECHO_CONNECTION (tp_tests_object_new_static_class (
9898 EXAMPLE_TYPE_ECHO_CONNECTION,
9999 "account", "me@example.com",
100100 "protocol", "example",
105105
106106 MYASSERT (tp_base_connection_register (service_conn_as_base, "example",
107107 &name, &conn_path, &error), "");
108 test_assert_no_error (error);
108 g_assert_no_error (error);
109109
110110 conn = tp_connection_new (dbus, name, conn_path, &error);
111111 MYASSERT (conn != NULL, "");
112 test_assert_no_error (error);
112 g_assert_no_error (error);
113113
114114 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
115115 "");
116 test_assert_no_error (error);
116 g_assert_no_error (error);
117117
118118 contact_repo = tp_base_connection_get_handles (service_conn_as_base,
119119 TP_HANDLE_TYPE_CONTACT);
120120 MYASSERT (contact_repo != NULL, "");
121121
122122 handle = tp_handle_ensure (contact_repo, "them@example.org", NULL, &error);
123 test_assert_no_error (error);
123 g_assert_no_error (error);
124124
125125 /* FIXME: exercise RequestChannel rather than just pasting on a channel */
126126
127127 chan_path = g_strdup_printf ("%s/Channel", conn_path);
128128
129 service_chan = EXAMPLE_ECHO_CHANNEL (test_object_new_static_class (
129 service_chan = EXAMPLE_ECHO_CHANNEL (tp_tests_object_new_static_class (
130130 EXAMPLE_TYPE_ECHO_CHANNEL,
131131 "connection", service_conn,
132132 "object-path", chan_path,
135135
136136 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
137137 TP_HANDLE_TYPE_CONTACT, handle, &error);
138 test_assert_no_error (error);
138 g_assert_no_error (error);
139139
140140 tp_channel_run_until_ready (chan, &error, NULL);
141 test_assert_no_error (error);
141 g_assert_no_error (error);
142142
143143 MYASSERT (tp_cli_channel_type_text_connect_to_received (chan, on_received,
144144 g_object_ref (contact_repo), g_object_unref, NULL, NULL) != NULL, "");
150150 tp_cli_channel_type_text_run_send (chan, -1,
151151 TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Hello, world!",
152152 &error, NULL);
153 test_assert_no_error (error);
154
155 test_connection_run_until_dbus_queue_processed (conn);
153 g_assert_no_error (error);
154
155 tp_tests_proxy_run_until_dbus_queue_processed (conn);
156156 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
157157 MYASSERT (received_count == 1, ": %u != 1", received_count);
158158 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
172172 tp_cli_channel_type_text_run_send (chan, -1,
173173 TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, "drinks coffee",
174174 &error, NULL);
175 test_assert_no_error (error);
176
177 test_connection_run_until_dbus_queue_processed (conn);
175 g_assert_no_error (error);
176
177 tp_tests_proxy_run_until_dbus_queue_processed (conn);
178178 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
179179 MYASSERT (received_count == 1, ": %u != 1", received_count);
180180 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION,
195195 tp_cli_channel_type_text_run_send (chan, -1,
196196 TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, "Printer on fire",
197197 &error, NULL);
198 test_assert_no_error (error);
199
200 test_connection_run_until_dbus_queue_processed (conn);
198 g_assert_no_error (error);
199
200 tp_tests_proxy_run_until_dbus_queue_processed (conn);
201201 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
202202 MYASSERT (received_count == 1, ": %u != 1", received_count);
203203 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE,
220220
221221 tp_cli_channel_type_text_run_list_pending_messages (chan, -1,
222222 FALSE, &messages, &error, NULL);
223 test_assert_no_error (error);
223 g_assert_no_error (error);
224224
225225 g_print ("Freeing\n");
226226 g_boxed_free (TP_ARRAY_TYPE_PENDING_TEXT_MESSAGE_LIST, messages);
263263
264264 tp_cli_channel_type_text_run_acknowledge_pending_messages (chan, -1,
265265 ids, &error, NULL);
266 test_assert_no_error (error);
266 g_assert_no_error (error);
267267
268268 g_array_free (ids, TRUE);
269269 }
276276
277277 tp_cli_channel_type_text_run_list_pending_messages (chan, -1,
278278 TRUE, &messages, &error, NULL);
279 test_assert_no_error (error);
279 g_assert_no_error (error);
280280
281281 g_print ("Freeing\n");
282282 g_boxed_free (TP_ARRAY_TYPE_PENDING_TEXT_MESSAGE_LIST, messages);
288288 gboolean dead;
289289
290290 MYASSERT (tp_cli_channel_run_close (chan, -1, &error, NULL), "");
291 test_assert_no_error (error);
291 g_assert_no_error (error);
292292 MYASSERT (tp_proxy_get_invalidated (chan) != NULL, "");
293293
294294 g_object_get (service_chan,
301301 g_print ("\n\n==== End of tests ====\n");
302302
303303 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
304 test_assert_no_error (error);
304 g_assert_no_error (error);
305305
306306 tp_handle_unref (contact_repo, handle);
307307 g_object_unref (chan);
9494
9595 g_type_init ();
9696 /* tp_debug_set_flags ("all"); */
97 dbus = test_dbus_daemon_dup_or_die ();
98
99 service_conn = EXAMPLE_ECHO_CONNECTION (test_object_new_static_class (
97 dbus = tp_tests_dbus_daemon_dup_or_die ();
98
99 service_conn = EXAMPLE_ECHO_CONNECTION (tp_tests_object_new_static_class (
100100 EXAMPLE_TYPE_ECHO_CONNECTION,
101101 "account", "me@example.com",
102102 "protocol", "example",
107107
108108 MYASSERT (tp_base_connection_register (service_conn_as_base, "example",
109109 &name, &conn_path, &error), "");
110 test_assert_no_error (error);
110 g_assert_no_error (error);
111111
112112 conn = tp_connection_new (dbus, name, conn_path, &error);
113113 MYASSERT (conn != NULL, "");
114 test_assert_no_error (error);
114 g_assert_no_error (error);
115115
116116 MYASSERT (tp_connection_run_until_ready (conn, TRUE, &error, NULL),
117117 "");
118 test_assert_no_error (error);
118 g_assert_no_error (error);
119119
120120 contact_repo = tp_base_connection_get_handles (service_conn_as_base,
121121 TP_HANDLE_TYPE_CONTACT);
122122 MYASSERT (contact_repo != NULL, "");
123123
124124 handle = tp_handle_ensure (contact_repo, "them@example.org", NULL, &error);
125 test_assert_no_error (error);
125 g_assert_no_error (error);
126126
127127 /* FIXME: exercise RequestChannel rather than just pasting on a channel */
128128
129129 chan_path = g_strdup_printf ("%s/Channel", conn_path);
130130
131 service_chan = EXAMPLE_ECHO_CHANNEL (test_object_new_static_class (
131 service_chan = EXAMPLE_ECHO_CHANNEL (tp_tests_object_new_static_class (
132132 EXAMPLE_TYPE_ECHO_CHANNEL,
133133 "connection", service_conn,
134134 "object-path", chan_path,
137137
138138 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
139139 TP_HANDLE_TYPE_CONTACT, handle, &error);
140 test_assert_no_error (error);
140 g_assert_no_error (error);
141141
142142 tp_channel_run_until_ready (chan, &error, NULL);
143 test_assert_no_error (error);
143 g_assert_no_error (error);
144144
145145 MYASSERT (tp_cli_channel_type_text_connect_to_received (chan, on_received,
146146 g_object_ref (contact_repo), g_object_unref, NULL, NULL) != NULL, "");
152152 tp_cli_channel_type_text_run_send (chan, -1,
153153 TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Hello, world!",
154154 &error, NULL);
155 test_assert_no_error (error);
156
157 test_connection_run_until_dbus_queue_processed (conn);
155 g_assert_no_error (error);
156
157 tp_tests_proxy_run_until_dbus_queue_processed (conn);
158158 MYASSERT (sent_count == 1, ": %u != 1", sent_count);
159159 MYASSERT (received_count == 1, ": %u != 1", received_count);
160160 MYASSERT (last_sent_type == TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
176176 TpHandle new_initiator;
177177
178178 MYASSERT (tp_cli_channel_run_close (chan, -1, &error, NULL), "");
179 test_assert_no_error (error);
179 g_assert_no_error (error);
180180 MYASSERT (tp_proxy_get_invalidated (chan) != NULL, "");
181181
182182 g_object_get (service_chan,
185185 NULL);
186186
187187 MYASSERT (!dead, "");
188 MYASSERT_SAME_UINT (new_initiator, handle);
188 g_assert_cmpuint (new_initiator, ==, handle);
189189 }
190190
191191 g_print ("\n\n==== Re-creating TpChannel ====\n");
194194
195195 chan = tp_channel_new (conn, chan_path, TP_IFACE_CHANNEL_TYPE_TEXT,
196196 TP_HANDLE_TYPE_CONTACT, handle, &error);
197 test_assert_no_error (error);
197 g_assert_no_error (error);
198198
199199 tp_channel_run_until_ready (chan, &error, NULL);
200 test_assert_no_error (error);
200 g_assert_no_error (error);
201201
202202 g_print ("\n\n==== Listing messages ====\n");
203203
207207
208208 tp_cli_channel_type_text_run_list_pending_messages (chan, -1,
209209 FALSE, &messages, &error, NULL);
210 test_assert_no_error (error);
211
212 MYASSERT_SAME_UINT (messages->len, 1);
210 g_assert_no_error (error);
211
212 g_assert_cmpuint (messages->len, ==, 1);
213213 structure = g_ptr_array_index (messages, 0);
214 MYASSERT_SAME_UINT (g_value_get_uint (structure->values + 0),
214 g_assert_cmpuint (g_value_get_uint (structure->values + 0), ==,
215215 last_received_id);
216 MYASSERT_SAME_UINT (g_value_get_uint (structure->values + 1),
216 g_assert_cmpuint (g_value_get_uint (structure->values + 1), ==,
217217 last_received_time);
218 MYASSERT_SAME_UINT (g_value_get_uint (structure->values + 2),
218 g_assert_cmpuint (g_value_get_uint (structure->values + 2), ==,
219219 handle);
220 MYASSERT_SAME_UINT (g_value_get_uint (structure->values + 3),
220 g_assert_cmpuint (g_value_get_uint (structure->values + 3), ==,
221221 TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL);
222 MYASSERT_SAME_UINT (g_value_get_uint (structure->values + 4),
222 g_assert_cmpuint (g_value_get_uint (structure->values + 4), ==,
223223 TP_CHANNEL_TEXT_MESSAGE_FLAG_RESCUED);
224 MYASSERT_SAME_STRING (g_value_get_string (structure->values + 5),
224 g_assert_cmpstr (g_value_get_string (structure->values + 5), ==,
225225 "You said: Hello, world!");
226226
227227 g_print ("Freeing\n");
235235
236236 MYASSERT (tp_cli_channel_interface_destroyable_run_destroy (chan, -1,
237237 &error, NULL), "");
238 test_assert_no_error (error);
238 g_assert_no_error (error);
239239 MYASSERT (tp_proxy_get_invalidated (chan) != NULL, "");
240240
241241 g_object_get (service_chan,
248248 g_print ("\n\n==== End of tests ====\n");
249249
250250 MYASSERT (tp_cli_connection_run_disconnect (conn, -1, &error, NULL), "");
251 test_assert_no_error (error);
251 g_assert_no_error (error);
252252
253253 tp_handle_unref (contact_repo, handle);
254254 g_object_unref (chan);
7474 g_type_init ();
7575 tp_debug_set_flags ("all");
7676
77 bus_daemon = test_dbus_daemon_dup_or_die ();
77 bus_daemon = tp_tests_dbus_daemon_dup_or_die ();
7878
7979 /* this interface is automatically supported... */
8080 MYASSERT (tp_cli_dbus_daemon_run_list_names (bus_daemon, -1, NULL,
110110 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
111111 CPP = @CPP@
112112 CPPFLAGS = @CPPFLAGS@
113 CXX = @CXX@
114 CXXCPP = @CXXCPP@
115 CXXDEPMODE = @CXXDEPMODE@
116 CXXFLAGS = @CXXFLAGS@
113117 CYGPATH_W = @CYGPATH_W@
114118 DBUS_CFLAGS = @DBUS_CFLAGS@
115119 DBUS_LIBS = @DBUS_LIBS@
197201 abs_top_builddir = @abs_top_builddir@
198202 abs_top_srcdir = @abs_top_srcdir@
199203 ac_ct_CC = @ac_ct_CC@
204 ac_ct_CXX = @ac_ct_CXX@
200205 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
201206 am__include = @am__include@
202207 am__leading_dot = @am__leading_dot@
1414
1515 static void contacts_iface_init (gpointer g_iface, gpointer iface_data);
1616
17 G_DEFINE_TYPE_WITH_CODE (Bug19101Connection, bug_19101_connection,
18 CONTACTS_TYPE_CONNECTION,
17 G_DEFINE_TYPE_WITH_CODE (TpTestsBug19101Connection,
18 tp_tests_bug19101_connection, TP_TESTS_TYPE_CONTACTS_CONNECTION,
1919 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS,
2020 contacts_iface_init);
2121 )
2222
2323 static void
24 bug_19101_connection_init (Bug19101Connection *self)
24 tp_tests_bug19101_connection_init (TpTestsBug19101Connection *self)
2525 {
2626 }
2727
2828 static void
29 bug_19101_connection_class_init (Bug19101ConnectionClass *klass)
29 tp_tests_bug19101_connection_class_init (TpTestsBug19101ConnectionClass *klass)
3030 {
3131 }
3232
3434 * of attributes for each handle.
3535 */
3636 static void
37 bug_19101_connection_get_contact_attributes (
37 tp_tests_bug19101_connection_get_contact_attributes (
3838 TpSvcConnectionInterfaceContacts *iface,
3939 const GArray *handles,
4040 const char **interfaces,
6767 (TpSvcConnectionInterfaceContactsClass *) g_iface;
6868
6969 #define IMPLEMENT(x) tp_svc_connection_interface_contacts_implement_##x ( \
70 klass, bug_19101_connection_##x)
70 klass, tp_tests_bug19101_connection_##x)
7171 IMPLEMENT(get_contact_attributes);
7272 #undef IMPLEMENT
7373 }
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef TESTS_LIB_BUG_19101_CONN_H
12 #define TESTS_LIB_BUG_19101_CONN_H
11 #ifndef __TP_TESTS_BUG19101_CONN_H__
12 #define __TP_TESTS_BUG19101_CONN_H__
1313
1414 #include "contacts-conn.h"
1515
1616 G_BEGIN_DECLS
1717
18 typedef struct _Bug19101Connection Bug19101Connection;
19 typedef struct _Bug19101ConnectionClass Bug19101ConnectionClass;
18 typedef struct _TpTestsBug19101Connection TpTestsBug19101Connection;
19 typedef struct _TpTestsBug19101ConnectionClass TpTestsBug19101ConnectionClass;
2020
21 struct _Bug19101ConnectionClass {
22 ContactsConnectionClass parent_class;
21 struct _TpTestsBug19101ConnectionClass {
22 TpTestsContactsConnectionClass parent_class;
2323 };
2424
25 struct _Bug19101Connection {
26 ContactsConnection parent;
25 struct _TpTestsBug19101Connection {
26 TpTestsContactsConnection parent;
2727 };
2828
29 GType bug_19101_connection_get_type (void);
29 GType tp_tests_bug19101_connection_get_type (void);
3030
3131 /* TYPE MACROS */
32 #define BUG_19101_TYPE_CONNECTION \
33 (bug_19101_connection_get_type ())
32 #define TP_TESTS_TYPE_BUG19101_CONNECTION \
33 (tp_tests_bug19101_connection_get_type ())
3434 #define BUG_19101_CONNECTION(obj) \
35 (G_TYPE_CHECK_INSTANCE_CAST((obj), BUG_19101_TYPE_CONNECTION, \
36 Bug19101Connection))
35 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_BUG19101_CONNECTION, \
36 TpTestsBug19101Connection))
3737 #define BUG_19101_CONNECTION_CLASS(klass) \
38 (G_TYPE_CHECK_CLASS_CAST((klass), BUG_19101_TYPE_CONNECTION, \
39 Bug19101ConnectionClass))
38 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_BUG19101_CONNECTION, \
39 TpTestsBug19101ConnectionClass))
4040 #define BUG_19101_IS_CONNECTION(obj) \
41 (G_TYPE_CHECK_INSTANCE_TYPE((obj), BUG_19101_TYPE_CONNECTION))
41 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_BUG19101_CONNECTION))
4242 #define BUG_19101_IS_CONNECTION_CLASS(klass) \
43 (G_TYPE_CHECK_CLASS_TYPE((klass), BUG_19101_TYPE_CONNECTION))
43 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_BUG19101_CONNECTION))
4444 #define BUG_19101_CONNECTION_GET_CLASS(obj) \
45 (G_TYPE_INSTANCE_GET_CLASS ((obj), BUG_19101_TYPE_CONNECTION, \
46 Bug19101ConnectionClass))
45 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_BUG19101_CONNECTION, \
46 TpTestsBug19101ConnectionClass))
4747
4848 G_END_DECLS
4949
50 #endif
50 #endif /* #ifndef __TP_TESTS_BUG19101_CONN_H__ */
2020
2121 static void service_iface_init (gpointer, gpointer);
2222
23 G_DEFINE_TYPE_WITH_CODE (Bug16307Connection,
24 bug16307_connection,
25 SIMPLE_TYPE_CONNECTION,
23 G_DEFINE_TYPE_WITH_CODE (TpTestsBug16307Connection,
24 tp_tests_bug16307_connection,
25 TP_TESTS_TYPE_SIMPLE_CONNECTION,
2626 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION,
2727 service_iface_init);
2828 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING,
3939
4040 static guint signals[N_SIGNALS] = {0};
4141
42 struct _Bug16307ConnectionPrivate
42 struct _TpTestsBug16307ConnectionPrivate
4343 {
4444 /* In a real connection manager, the underlying implementation start
4545 * connecting, then go to state CONNECTED when finished. Here there isn't
4848 * is called.
4949 *
5050 * Also, the GetStatus D-Bus reply is delayed until
51 * bug16307_connection_inject_get_status_return() is called
51 * tp_tests_bug16307_connection_inject_get_status_return() is called
5252 */
5353 DBusGMethodInvocation *get_status_invocation;
5454 };
5555
5656 static void
57 bug16307_connection_init (Bug16307Connection *self)
58 {
59 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, BUG16307_TYPE_CONNECTION,
60 Bug16307ConnectionPrivate);
57 tp_tests_bug16307_connection_init (TpTestsBug16307Connection *self)
58 {
59 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
60 TP_TESTS_TYPE_BUG16307_CONNECTION, TpTestsBug16307ConnectionPrivate);
6161 }
6262
6363 static void
6464 finalize (GObject *object)
6565 {
66 G_OBJECT_CLASS (bug16307_connection_parent_class)->finalize (object);
66 G_OBJECT_CLASS (tp_tests_bug16307_connection_parent_class)->finalize (object);
6767 }
6868
6969 static gboolean
7070 pretend_connected (gpointer data)
7171 {
72 Bug16307Connection *self = BUG16307_CONNECTION (data);
72 TpTestsBug16307Connection *self = TP_TESTS_BUG16307_CONNECTION (data);
7373 TpBaseConnection *conn = (TpBaseConnection *) self;
7474 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn,
7575 TP_HANDLE_TYPE_CONTACT);
8989 }
9090
9191 void
92 bug16307_connection_inject_get_status_return (Bug16307Connection *self)
92 tp_tests_bug16307_connection_inject_get_status_return (TpTestsBug16307Connection *self)
9393 {
9494 TpBaseConnection *self_base = TP_BASE_CONNECTION (self);
9595 DBusGMethodInvocation *context;
138138 }
139139
140140 static void
141 bug16307_connection_class_init (Bug16307ConnectionClass *klass)
141 tp_tests_bug16307_connection_class_init (TpTestsBug16307ConnectionClass *klass)
142142 {
143143 TpBaseConnectionClass *base_class =
144144 (TpBaseConnectionClass *) klass;
151151 NULL };
152152
153153 object_class->finalize = finalize;
154 g_type_class_add_private (klass, sizeof (Bug16307ConnectionPrivate));
154 g_type_class_add_private (klass, sizeof (TpTestsBug16307ConnectionPrivate));
155155
156156 base_class->start_connecting = start_connecting;
157157
167167 }
168168
169169 /**
170 * bug16307_connection_get_status
170 * tp_tests_bug16307_connection_get_status
171171 *
172172 * Implements D-Bus method GetStatus
173173 * on interface org.freedesktop.Telepathy.Connection
174174 */
175175 static void
176 bug16307_connection_get_status (TpSvcConnection *iface,
176 tp_tests_bug16307_connection_get_status (TpSvcConnection *iface,
177177 DBusGMethodInvocation *context)
178178 {
179179 TpBaseConnection *self_base = TP_BASE_CONNECTION (iface);
180 Bug16307Connection *self = BUG16307_CONNECTION (iface);
180 TpTestsBug16307Connection *self = TP_TESTS_BUG16307_CONNECTION (iface);
181181
182182 /* auto-connect on get_status */
183183 if ((self_base->status == TP_INTERNAL_CONNECTION_STATUS_NEW ||
201201 TpSvcConnectionClass *klass = g_iface;
202202
203203 #define IMPLEMENT(prefix,x) tp_svc_connection_implement_##x (klass, \
204 bug16307_connection_##prefix##x)
204 tp_tests_bug16307_connection_##prefix##x)
205205 IMPLEMENT(,get_status);
206206 #undef IMPLEMENT
207207 }
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef __BUG16307_CONN_H__
12 #define __BUG16307_CONN_H__
11 #ifndef __TP_TESTS_BUG16307_CONN_H__
12 #define __TP_TESTS_BUG16307_CONN_H__
1313
1414 #include <glib-object.h>
1515 #include <telepathy-glib/base-connection.h>
1818
1919 G_BEGIN_DECLS
2020
21 typedef struct _Bug16307Connection Bug16307Connection;
22 typedef struct _Bug16307ConnectionClass Bug16307ConnectionClass;
23 typedef struct _Bug16307ConnectionPrivate Bug16307ConnectionPrivate;
21 typedef struct _TpTestsBug16307Connection TpTestsBug16307Connection;
22 typedef struct _TpTestsBug16307ConnectionClass TpTestsBug16307ConnectionClass;
23 typedef struct _TpTestsBug16307ConnectionPrivate TpTestsBug16307ConnectionPrivate;
2424
25 struct _Bug16307ConnectionClass {
26 SimpleConnectionClass parent_class;
25 struct _TpTestsBug16307ConnectionClass {
26 TpTestsSimpleConnectionClass parent_class;
2727 };
2828
29 struct _Bug16307Connection {
30 SimpleConnection parent;
29 struct _TpTestsBug16307Connection {
30 TpTestsSimpleConnection parent;
3131
32 Bug16307ConnectionPrivate *priv;
32 TpTestsBug16307ConnectionPrivate *priv;
3333 };
3434
35 GType bug16307_connection_get_type (void);
35 GType tp_tests_bug16307_connection_get_type (void);
3636
3737 /* TYPE MACROS */
38 #define BUG16307_TYPE_CONNECTION \
39 (bug16307_connection_get_type ())
40 #define BUG16307_CONNECTION(obj) \
41 (G_TYPE_CHECK_INSTANCE_CAST((obj), BUG16307_TYPE_CONNECTION, \
42 Bug16307Connection))
43 #define BUG16307_CONNECTION_CLASS(klass) \
44 (G_TYPE_CHECK_CLASS_CAST((klass), BUG16307_TYPE_CONNECTION, \
45 Bug16307ConnectionClass))
46 #define BUG16307_IS_CONNECTION(obj) \
47 (G_TYPE_CHECK_INSTANCE_TYPE((obj), BUG16307_TYPE_CONNECTION))
48 #define BUG16307_IS_CONNECTION_CLASS(klass) \
49 (G_TYPE_CHECK_CLASS_TYPE((klass), BUG16307_TYPE_CONNECTION))
50 #define BUG16307_CONNECTION_GET_CLASS(obj) \
51 (G_TYPE_INSTANCE_GET_CLASS ((obj), BUG16307_TYPE_CONNECTION, \
52 Bug16307ConnectionClass))
38 #define TP_TESTS_TYPE_BUG16307_CONNECTION \
39 (tp_tests_bug16307_connection_get_type ())
40 #define TP_TESTS_BUG16307_CONNECTION(obj) \
41 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_BUG16307_CONNECTION, \
42 TpTestsBug16307Connection))
43 #define TP_TESTS_BUG16307_CONNECTION_CLASS(klass) \
44 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_BUG16307_CONNECTION, \
45 TpTestsBug16307ConnectionClass))
46 #define TP_TESTS_BUG16307_IS_CONNECTION(obj) \
47 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_BUG16307_CONNECTION))
48 #define TP_TESTS_BUG16307_IS_CONNECTION_CLASS(klass) \
49 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_BUG16307_CONNECTION))
50 #define TP_TESTS_BUG16307_CONNECTION_GET_CLASS(obj) \
51 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_BUG16307_CONNECTION, \
52 TpTestsBug16307ConnectionClass))
5353
5454 /* Cause "network events", for debugging/testing */
5555
56 void bug16307_connection_inject_get_status_return (Bug16307Connection *self);
56 void tp_tests_bug16307_connection_inject_get_status_return (TpTestsBug16307Connection *self);
5757
5858 G_END_DECLS
5959
60 #endif /* #ifndef __BUG16307_CONN_H__ */
60 #endif /* #ifndef __TP_TESTS_BUG16307_CONN_H__ */
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 init_contact_info (gpointer, gpointer);
2728 static void conn_avatars_properties_getter (GObject *object, GQuark interface,
2829 GQuark name, GValue *value, gpointer getter_data);
2930
30 G_DEFINE_TYPE_WITH_CODE (ContactsConnection,
31 contacts_connection,
32 SIMPLE_TYPE_CONNECTION,
31 G_DEFINE_TYPE_WITH_CODE (TpTestsContactsConnection,
32 tp_tests_contacts_connection,
33 TP_TESTS_TYPE_SIMPLE_CONNECTION,
3334 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING,
3435 init_aliasing);
3536 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_AVATARS,
4546 G_IMPLEMENT_INTERFACE (
4647 TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_CAPABILITIES,
4748 init_contact_caps)
49 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_INFO,
50 init_contact_info)
4851 );
4952
5053 /* type definition stuff */
6871 N_SIGNALS
6972 };
7073
71 struct _ContactsConnectionPrivate
74 struct _TpTestsContactsConnectionPrivate
7275 {
7376 /* TpHandle => gchar * */
7477 GHashTable *aliases;
8285 GHashTable *locations;
8386 /* TpHandle => GPtrArray * */
8487 GHashTable *capabilities;
88 /* TpHandle => GPtrArray * */
89 GHashTable *contact_info;
90 GPtrArray *default_contact_info;
8591 };
8692
8793 typedef struct
128134 }
129135
130136 static void
131 contacts_connection_init (ContactsConnection *self)
132 {
133 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CONTACTS_TYPE_CONNECTION,
134 ContactsConnectionPrivate);
137 tp_tests_contacts_connection_init (TpTestsContactsConnection *self)
138 {
139 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_CONTACTS_CONNECTION,
140 TpTestsContactsConnectionPrivate);
135141 self->priv->aliases = g_hash_table_new_full (g_direct_hash, g_direct_equal,
136142 NULL, g_free);
137143 self->priv->avatars = g_hash_table_new_full (g_direct_hash,
144150 NULL, (GDestroyNotify) g_hash_table_unref);
145151 self->priv->capabilities = g_hash_table_new_full (g_direct_hash,
146152 g_direct_equal, NULL, (GDestroyNotify) free_rcc_list);
153 self->priv->contact_info = g_hash_table_new_full (g_direct_hash,
154 g_direct_equal, NULL, (GDestroyNotify) g_ptr_array_unref);
147155 }
148156
149157 static void
150158 finalize (GObject *object)
151159 {
152 ContactsConnection *self = CONTACTS_CONNECTION (object);
160 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
153161
154162 tp_contacts_mixin_finalize (object);
155163 g_hash_table_destroy (self->priv->aliases);
158166 g_hash_table_destroy (self->priv->presence_messages);
159167 g_hash_table_destroy (self->priv->locations);
160168 g_hash_table_destroy (self->priv->capabilities);
161
162 G_OBJECT_CLASS (contacts_connection_parent_class)->finalize (object);
169 g_hash_table_destroy (self->priv->contact_info);
170
171 if (self->priv->default_contact_info != NULL)
172 g_ptr_array_unref (self->priv->default_contact_info);
173
174 G_OBJECT_CLASS (tp_tests_contacts_connection_parent_class)->finalize (object);
163175 }
164176
165177 static void
168180 GHashTable *attributes)
169181 {
170182 guint i;
171 ContactsConnection *self = CONTACTS_CONNECTION (object);
183 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
172184 TpBaseConnection *base = TP_BASE_CONNECTION (object);
173185 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
174186 TP_HANDLE_TYPE_CONTACT);
196208 GHashTable *attributes)
197209 {
198210 guint i;
199 ContactsConnection *self = CONTACTS_CONNECTION (object);
211 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
200212
201213 for (i = 0; i < contacts->len; i++)
202214 {
219231 GHashTable *attributes)
220232 {
221233 guint i;
222 ContactsConnection *self = CONTACTS_CONNECTION (object);
234 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
223235
224236 for (i = 0; i < contacts->len; i++)
225237 {
242254 GHashTable *attributes)
243255 {
244256 guint i;
245 ContactsConnection *self = CONTACTS_CONNECTION (object);
257 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
246258
247259 for (i = 0; i < contacts->len; i++)
248260 {
261273 }
262274
263275 static void
276 contact_info_fill_contact_attributes (GObject *object,
277 const GArray *contacts,
278 GHashTable *attributes)
279 {
280 guint i;
281 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
282
283 for (i = 0; i < contacts->len; i++)
284 {
285 TpHandle handle = g_array_index (contacts, guint, i);
286 GPtrArray *info = g_hash_table_lookup (self->priv->contact_info,
287 GUINT_TO_POINTER (handle));
288
289 if (info != NULL)
290 {
291 tp_contacts_mixin_set_contact_attribute (attributes, handle,
292 TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO "/info",
293 tp_g_value_slice_new_boxed (TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST,
294 info));
295 }
296 }
297 }
298
299 static TpDBusPropertiesMixinPropImpl conn_contact_info_properties[] = {
300 { "ContactInfoFlags", GUINT_TO_POINTER (TP_CONTACT_INFO_FLAG_PUSH |
301 TP_CONTACT_INFO_FLAG_CAN_SET), NULL },
302 { "SupportedFields", NULL, NULL },
303 { NULL }
304 };
305
306 static void
307 conn_contact_info_properties_getter (GObject *object,
308 GQuark interface,
309 GQuark name,
310 GValue *value,
311 gpointer getter_data)
312 {
313 GQuark q_supported_fields = g_quark_from_static_string ("SupportedFields");
314 static GPtrArray *supported_fields = NULL;
315
316 if (name == q_supported_fields)
317 {
318 if (supported_fields == NULL)
319 {
320 supported_fields = g_ptr_array_new ();
321 g_ptr_array_add (supported_fields, tp_value_array_build (4,
322 G_TYPE_STRING, "n",
323 G_TYPE_STRV, NULL,
324 G_TYPE_UINT, 0,
325 G_TYPE_UINT, 0,
326 G_TYPE_INVALID));
327 }
328 g_value_set_boxed (value, supported_fields);
329 }
330 else
331 {
332 g_value_set_uint (value, GPOINTER_TO_UINT (getter_data));
333 }
334 }
335
336 static void
264337 constructed (GObject *object)
265338 {
266339 TpBaseConnection *base = TP_BASE_CONNECTION (object);
267340 void (*parent_impl) (GObject *) =
268 G_OBJECT_CLASS (contacts_connection_parent_class)->constructed;
341 G_OBJECT_CLASS (tp_tests_contacts_connection_parent_class)->constructed;
269342
270343 if (parent_impl != NULL)
271344 parent_impl (object);
272345
273346 tp_contacts_mixin_init (object,
274 G_STRUCT_OFFSET (ContactsConnection, contacts_mixin));
347 G_STRUCT_OFFSET (TpTestsContactsConnection, contacts_mixin));
275348 tp_base_connection_register_with_contacts_mixin (base);
276349 tp_contacts_mixin_add_contact_attributes_iface (object,
277350 TP_IFACE_CONNECTION_INTERFACE_ALIASING,
285358 tp_contacts_mixin_add_contact_attributes_iface (object,
286359 TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES,
287360 contact_caps_fill_contact_attributes);
361 tp_contacts_mixin_add_contact_attributes_iface (object,
362 TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO,
363 contact_info_fill_contact_attributes);
288364
289365 tp_presence_mixin_init (object,
290 G_STRUCT_OFFSET (ContactsConnection, presence_mixin));
366 G_STRUCT_OFFSET (TpTestsContactsConnection, presence_mixin));
291367 tp_presence_mixin_simple_presence_register_with_contacts_mixin (object);
292368 }
293369
296372 { NULL }
297373 };
298374
299 /* Must match ContactsConnectionPresenceStatusIndex in the .h */
375 /* Must match TpTestsContactsConnectionPresenceStatusIndex in the .h */
300376 static const TpPresenceStatusSpec my_statuses[] = {
301377 { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE,
302378 can_have_message },
325401 const GArray *contacts,
326402 GError **error)
327403 {
328 ContactsConnection *self = CONTACTS_CONNECTION (object);
404 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object);
329405 GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal,
330406 NULL, (GDestroyNotify) tp_presence_status_free);
331407 guint i;
334410 {
335411 TpHandle handle = g_array_index (contacts, TpHandle, i);
336412 gpointer key = GUINT_TO_POINTER (handle);
337 ContactsConnectionPresenceStatusIndex index;
413 TpTestsContactsConnectionPresenceStatusIndex index;
338414 const gchar *presence_message;
339415 GHashTable *parameters;
340416
364440 GError **error)
365441 {
366442 TpBaseConnection *base_conn = TP_BASE_CONNECTION (object);
367 ContactsConnectionPresenceStatusIndex index = status->index;
443 TpTestsContactsConnectionPresenceStatusIndex index = status->index;
368444 const gchar *message = "";
369445
370446 if (status->optional_arguments != NULL)
375451 message = "";
376452 }
377453
378 contacts_connection_change_presences (CONTACTS_CONNECTION (object),
454 tp_tests_contacts_connection_change_presences (TP_TESTS_CONTACTS_CONNECTION (object),
379455 1, &(base_conn->self_handle), &index, &message);
380456
381457 return TRUE;
382458 }
383459
384460 static void
385 contacts_connection_class_init (ContactsConnectionClass *klass)
461 tp_tests_contacts_connection_class_init (TpTestsContactsConnectionClass *klass)
386462 {
387463 TpBaseConnectionClass *base_class =
388464 (TpBaseConnectionClass *) klass;
395471 TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE,
396472 TP_IFACE_CONNECTION_INTERFACE_LOCATION,
397473 TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES,
474 TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO,
398475 TP_IFACE_CONNECTION_INTERFACE_REQUESTS,
399476 NULL };
400477 static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
403480 NULL,
404481 conn_avatars_properties,
405482 },
483 { TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO,
484 conn_contact_info_properties_getter,
485 NULL,
486 conn_contact_info_properties,
487 },
406488 { NULL }
407489 };
408490
409491 object_class->constructed = constructed;
410492 object_class->finalize = finalize;
411 g_type_class_add_private (klass, sizeof (ContactsConnectionPrivate));
493 g_type_class_add_private (klass, sizeof (TpTestsContactsConnectionPrivate));
412494
413495 base_class->interfaces_always_present = interfaces_always_present;
414496
415497 tp_contacts_mixin_class_init (object_class,
416 G_STRUCT_OFFSET (ContactsConnectionClass, contacts_mixin));
498 G_STRUCT_OFFSET (TpTestsContactsConnectionClass, contacts_mixin));
417499
418500 tp_presence_mixin_class_init (object_class,
419 G_STRUCT_OFFSET (ContactsConnectionClass, presence_mixin),
501 G_STRUCT_OFFSET (TpTestsContactsConnectionClass, presence_mixin),
420502 my_status_available, my_get_contact_statuses,
421503 my_set_own_status, my_statuses);
422504
424506
425507 klass->properties_class.interfaces = prop_interfaces;
426508 tp_dbus_properties_mixin_class_init (object_class,
427 G_STRUCT_OFFSET (ContactsConnectionClass, properties_class));
509 G_STRUCT_OFFSET (TpTestsContactsConnectionClass, properties_class));
428510 }
429511
430512 void
431 contacts_connection_change_aliases (ContactsConnection *self,
513 tp_tests_contacts_connection_change_aliases (TpTestsContactsConnection *self,
432514 guint n,
433515 const TpHandle *handles,
434516 const gchar * const *aliases)
464546 }
465547
466548 void
467 contacts_connection_change_presences (
468 ContactsConnection *self,
549 tp_tests_contacts_connection_change_presences (
550 TpTestsContactsConnection *self,
469551 guint n,
470552 const TpHandle *handles,
471 const ContactsConnectionPresenceStatusIndex *indexes,
553 const TpTestsContactsConnectionPresenceStatusIndex *indexes,
472554 const gchar * const *messages)
473555 {
474556 GHashTable *presences = g_hash_table_new_full (g_direct_hash, g_direct_equal,
506588 }
507589
508590 void
509 contacts_connection_change_avatar_tokens (ContactsConnection *self,
591 tp_tests_contacts_connection_change_avatar_tokens (TpTestsContactsConnection *self,
510592 guint n,
511593 const TpHandle *handles,
512594 const gchar * const *tokens)
524606 }
525607
526608 void
527 contacts_connection_change_avatar_data (ContactsConnection *self,
609 tp_tests_contacts_connection_change_avatar_data (
610 TpTestsContactsConnection *self,
528611 TpHandle handle,
529612 GArray *data,
530613 const gchar *mime_type,
538621 }
539622
540623 void
541 contacts_connection_change_locations (ContactsConnection *self,
624 tp_tests_contacts_connection_change_locations (TpTestsContactsConnection *self,
542625 guint n,
543626 const TpHandle *handles,
544627 GHashTable **locations)
558641 }
559642
560643 void
561 contacts_connection_change_capabilities (ContactsConnection *self,
644 tp_tests_contacts_connection_change_capabilities (
645 TpTestsContactsConnection *self,
562646 GHashTable *capabilities)
563647 {
564648 GHashTableIter iter;
577661 self, capabilities);
578662 }
579663
664 void
665 tp_tests_contacts_connection_change_contact_info (
666 TpTestsContactsConnection *self,
667 TpHandle handle,
668 GPtrArray *info)
669 {
670 g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (handle),
671 g_ptr_array_ref (info));
672
673 tp_svc_connection_interface_contact_info_emit_contact_info_changed (self,
674 handle, info);
675 }
676
677 void
678 tp_tests_contacts_connection_set_default_contact_info (
679 TpTestsContactsConnection *self,
680 GPtrArray *info)
681 {
682 if (self->priv->default_contact_info != NULL)
683 g_ptr_array_unref (self->priv->default_contact_info);
684 self->priv->default_contact_info = g_ptr_array_ref (info);
685 }
686
580687 static void
581688 my_get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing,
582689 DBusGMethodInvocation *context)
593700 const GArray *contacts,
594701 DBusGMethodInvocation *context)
595702 {
596 ContactsConnection *self = CONTACTS_CONNECTION (aliasing);
703 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (aliasing);
597704 TpBaseConnection *base = TP_BASE_CONNECTION (aliasing);
598705 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
599706 TP_HANDLE_TYPE_CONTACT);
636743 const GArray *contacts,
637744 DBusGMethodInvocation *context)
638745 {
639 ContactsConnection *self = CONTACTS_CONNECTION (aliasing);
746 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (aliasing);
640747 TpBaseConnection *base = TP_BASE_CONNECTION (aliasing);
641748 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
642749 TP_HANDLE_TYPE_CONTACT);
696803 const GArray *contacts,
697804 DBusGMethodInvocation *context)
698805 {
699 ContactsConnection *self = CONTACTS_CONNECTION (avatars);
806 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars);
700807 TpBaseConnection *base = TP_BASE_CONNECTION (avatars);
701808 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
702809 TP_HANDLE_TYPE_CONTACT);
747854 const GArray *contacts,
748855 DBusGMethodInvocation *context)
749856 {
750 ContactsConnection *self = CONTACTS_CONNECTION (avatars);
857 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars);
751858 TpBaseConnection *base = TP_BASE_CONNECTION (avatars);
752859 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
753860 TP_HANDLE_TYPE_CONTACT);
787894 const GArray *contacts,
788895 DBusGMethodInvocation *context)
789896 {
790 ContactsConnection *self = CONTACTS_CONNECTION (avatars);
897 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars);
791898 TpBaseConnection *base = TP_BASE_CONNECTION (avatars);
792899 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
793900 TP_HANDLE_TYPE_CONTACT);
860967 const GArray *contacts,
861968 DBusGMethodInvocation *context)
862969 {
863 ContactsConnection *self = CONTACTS_CONNECTION (avatars);
970 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars);
864971 TpBaseConnection *base = TP_BASE_CONNECTION (avatars);
865972 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
866973 TP_HANDLE_TYPE_CONTACT);
9131020 const GArray *contacts,
9141021 DBusGMethodInvocation *context)
9151022 {
916 ContactsConnection *self = CONTACTS_CONNECTION (obj);
1023 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj);
9171024 TpBaseConnection *base = TP_BASE_CONNECTION (obj);
9181025 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
9191026 TP_HANDLE_TYPE_CONTACT);
9621069 #undef IMPLEMENT
9631070 }
9641071
1072 static GPtrArray *
1073 lookup_contact_info (TpTestsContactsConnection *self,
1074 TpHandle handle)
1075 {
1076 GPtrArray *ret = g_hash_table_lookup (self->priv->contact_info,
1077 GUINT_TO_POINTER (handle));
1078
1079 if (ret == NULL && self->priv->default_contact_info != NULL)
1080 {
1081 ret = self->priv->default_contact_info;
1082 g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (handle),
1083 g_ptr_array_ref (ret));
1084 }
1085
1086 return ret;
1087 }
1088
1089 static void
1090 my_refresh_contact_info (TpSvcConnectionInterfaceContactInfo *obj,
1091 const GArray *contacts,
1092 DBusGMethodInvocation *context)
1093 {
1094 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj);
1095 TpBaseConnection *base = TP_BASE_CONNECTION (obj);
1096 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
1097 TP_HANDLE_TYPE_CONTACT);
1098 GError *error = NULL;
1099 guint i;
1100
1101 TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
1102
1103 if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error))
1104 {
1105 dbus_g_method_return_error (context, error);
1106 g_error_free (error);
1107 return;
1108 }
1109
1110 for (i = 0; i < contacts->len; i++)
1111 {
1112 TpHandle handle = g_array_index (contacts, guint, i);
1113 GPtrArray *arr = lookup_contact_info (self, handle);
1114
1115 tp_svc_connection_interface_contact_info_emit_contact_info_changed (self,
1116 handle, arr);
1117 }
1118
1119 tp_svc_connection_interface_contact_info_return_from_refresh_contact_info (
1120 context);
1121 }
1122
1123 static void
1124 my_request_contact_info (TpSvcConnectionInterfaceContactInfo *obj,
1125 guint handle,
1126 DBusGMethodInvocation *context)
1127 {
1128 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj);
1129 TpBaseConnection *base = TP_BASE_CONNECTION (obj);
1130 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base,
1131 TP_HANDLE_TYPE_CONTACT);
1132 GError *error = NULL;
1133 GPtrArray *ret;
1134
1135 TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
1136
1137 if (!tp_handle_is_valid (contact_repo, handle, &error))
1138 {
1139 dbus_g_method_return_error (context, error);
1140 g_error_free (error);
1141 return;
1142 }
1143
1144 ret = lookup_contact_info (self, handle);
1145
1146 tp_svc_connection_interface_contact_info_return_from_request_contact_info (
1147 context, ret);
1148 }
1149
1150 static void
1151 my_set_contact_info (TpSvcConnectionInterfaceContactInfo *obj,
1152 const GPtrArray *info,
1153 DBusGMethodInvocation *context)
1154 {
1155 TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj);
1156 TpBaseConnection *base = TP_BASE_CONNECTION (obj);
1157 GPtrArray *copy;
1158 guint i;
1159 TpHandle self_handle;
1160
1161 TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context);
1162
1163 /* Deep copy info */
1164 copy = g_ptr_array_new_with_free_func ((GDestroyNotify) g_value_array_free);
1165 for (i = 0; i < info->len; i++)
1166 g_ptr_array_add (copy, g_value_array_copy (g_ptr_array_index (info, i)));
1167
1168 self_handle = tp_base_connection_get_self_handle (base);
1169 g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (self_handle),
1170 copy);
1171
1172 tp_svc_connection_interface_contact_info_return_from_set_contact_info (
1173 context);
1174 }
1175
1176 static void
1177 init_contact_info (gpointer g_iface,
1178 gpointer iface_data)
1179 {
1180 TpSvcConnectionInterfaceContactInfoClass *klass = g_iface;
1181
1182 #define IMPLEMENT(x) tp_svc_connection_interface_contact_info_implement_##x (\
1183 klass, my_##x)
1184 IMPLEMENT (refresh_contact_info);
1185 IMPLEMENT (request_contact_info);
1186 IMPLEMENT (set_contact_info);
1187 #undef IMPLEMENT
1188 }
1189
9651190 /* =============== Legacy version (no Contacts interface) ================= */
9661191
967
968 G_DEFINE_TYPE (LegacyContactsConnection, legacy_contacts_connection,
969 CONTACTS_TYPE_CONNECTION);
970
971 static void
972 legacy_contacts_connection_init (LegacyContactsConnection *self)
973 {
974 }
975
976 static void
977 legacy_contacts_connection_class_init (LegacyContactsConnectionClass *klass)
1192 G_DEFINE_TYPE (TpTestsLegacyContactsConnection,
1193 tp_tests_legacy_contacts_connection, TP_TESTS_TYPE_CONTACTS_CONNECTION);
1194
1195 static void
1196 tp_tests_legacy_contacts_connection_init (TpTestsLegacyContactsConnection *self)
1197 {
1198 }
1199
1200 static void
1201 tp_tests_legacy_contacts_connection_class_init (
1202 TpTestsLegacyContactsConnectionClass *klass)
9781203 {
9791204 /* Leave Contacts out of the interfaces we say are present, so clients
9801205 * won't use it */
9941219
9951220 /* =============== No Requests and no ContactCapabilities ================= */
9961221
997 G_DEFINE_TYPE (NoRequestsConnection, no_requests_connection,
998 CONTACTS_TYPE_CONNECTION);
999
1000 static void
1001 no_requests_connection_init (NoRequestsConnection *self)
1002 {
1003 }
1004
1005 static void
1006 no_requests_connection_class_init (NoRequestsConnectionClass *klass)
1222 G_DEFINE_TYPE (TpTestsNoRequestsConnection, tp_tests_no_requests_connection,
1223 TP_TESTS_TYPE_CONTACTS_CONNECTION);
1224
1225 static void
1226 tp_tests_no_requests_connection_init (TpTestsNoRequestsConnection *self)
1227 {
1228 }
1229
1230 static void
1231 tp_tests_no_requests_connection_class_init (
1232 TpTestsNoRequestsConnectionClass *klass)
10071233 {
10081234 static const gchar *interfaces_always_present[] = {
10091235 TP_IFACE_CONNECTION_INTERFACE_ALIASING,
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef TESTS_LIB_CONTACTS_CONN_H
12 #define TESTS_LIB_CONTACTS_CONN_H
11 #ifndef __TP_TESTS_CONTACTS_CONN_H__
12 #define __TP_TESTS_CONTACTS_CONN_H__
1313
1414 #include <glib-object.h>
1515 #include <telepathy-glib/base-connection.h>
2020
2121 G_BEGIN_DECLS
2222
23 typedef struct _ContactsConnection ContactsConnection;
24 typedef struct _ContactsConnectionClass ContactsConnectionClass;
25 typedef struct _ContactsConnectionPrivate ContactsConnectionPrivate;
23 typedef struct _TpTestsContactsConnection TpTestsContactsConnection;
24 typedef struct _TpTestsContactsConnectionClass TpTestsContactsConnectionClass;
25 typedef struct _TpTestsContactsConnectionPrivate TpTestsContactsConnectionPrivate;
2626
27 struct _ContactsConnectionClass {
28 SimpleConnectionClass parent_class;
27 struct _TpTestsContactsConnectionClass {
28 TpTestsSimpleConnectionClass parent_class;
2929
3030 TpPresenceMixinClass presence_mixin;
3131 TpContactsMixinClass contacts_mixin;
3232 TpDBusPropertiesMixinClass properties_class;
3333 };
3434
35 struct _ContactsConnection {
36 SimpleConnection parent;
35 struct _TpTestsContactsConnection {
36 TpTestsSimpleConnection parent;
3737
3838 TpPresenceMixin presence_mixin;
3939 TpContactsMixin contacts_mixin;
4040
41 ContactsConnectionPrivate *priv;
41 TpTestsContactsConnectionPrivate *priv;
4242 };
4343
44 GType contacts_connection_get_type (void);
44 GType tp_tests_contacts_connection_get_type (void);
4545
4646 /* Must match my_statuses in the .c */
4747 typedef enum {
48 CONTACTS_CONNECTION_STATUS_AVAILABLE,
49 CONTACTS_CONNECTION_STATUS_BUSY,
50 CONTACTS_CONNECTION_STATUS_AWAY,
51 CONTACTS_CONNECTION_STATUS_OFFLINE,
52 CONTACTS_CONNECTION_STATUS_UNKNOWN,
53 CONTACTS_CONNECTION_STATUS_ERROR
54 } ContactsConnectionPresenceStatusIndex;
48 TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE,
49 TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY,
50 TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY,
51 TP_TESTS_CONTACTS_CONNECTION_STATUS_OFFLINE,
52 TP_TESTS_CONTACTS_CONNECTION_STATUS_UNKNOWN,
53 TP_TESTS_CONTACTS_CONNECTION_STATUS_ERROR
54 } TpTestsContactsConnectionPresenceStatusIndex;
5555
5656 /* TYPE MACROS */
57 #define CONTACTS_TYPE_CONNECTION \
58 (contacts_connection_get_type ())
59 #define CONTACTS_CONNECTION(obj) \
60 (G_TYPE_CHECK_INSTANCE_CAST((obj), CONTACTS_TYPE_CONNECTION, \
61 ContactsConnection))
62 #define CONTACTS_CONNECTION_CLASS(klass) \
63 (G_TYPE_CHECK_CLASS_CAST((klass), CONTACTS_TYPE_CONNECTION, \
64 ContactsConnectionClass))
65 #define CONTACTS_IS_CONNECTION(obj) \
66 (G_TYPE_CHECK_INSTANCE_TYPE((obj), CONTACTS_TYPE_CONNECTION))
67 #define CONTACTS_IS_CONNECTION_CLASS(klass) \
68 (G_TYPE_CHECK_CLASS_TYPE((klass), CONTACTS_TYPE_CONNECTION))
69 #define CONTACTS_CONNECTION_GET_CLASS(obj) \
70 (G_TYPE_INSTANCE_GET_CLASS ((obj), CONTACTS_TYPE_CONNECTION, \
71 ContactsConnectionClass))
57 #define TP_TESTS_TYPE_CONTACTS_CONNECTION \
58 (tp_tests_contacts_connection_get_type ())
59 #define TP_TESTS_CONTACTS_CONNECTION(obj) \
60 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION, \
61 TpTestsContactsConnection))
62 #define TP_TESTS_CONTACTS_CONNECTION_CLASS(klass) \
63 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_CONTACTS_CONNECTION, \
64 TpTestsContactsConnectionClass))
65 #define TP_TESTS_IS_CONTACTS_CONNECTION(obj) \
66 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION))
67 #define TP_TESTS_IS_CONTACTS_CONNECTION_CLASS(klass) \
68 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_CONTACTS_CONNECTION))
69 #define TP_TESTS_CONTACTS_CONNECTION_GET_CLASS(obj) \
70 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION, \
71 TpTestsContactsConnectionClass))
7272
73 void contacts_connection_change_aliases (ContactsConnection *self, guint n,
73 void tp_tests_contacts_connection_change_aliases (
74 TpTestsContactsConnection *self, guint n,
7475 const TpHandle *handles, const gchar * const *aliases);
7576
76 void contacts_connection_change_presences (ContactsConnection *self, guint n,
77 const TpHandle *handles,
78 const ContactsConnectionPresenceStatusIndex *indexes,
77 void tp_tests_contacts_connection_change_presences (
78 TpTestsContactsConnection *self, guint n, const TpHandle *handles,
79 const TpTestsContactsConnectionPresenceStatusIndex *indexes,
7980 const gchar * const *messages);
8081
81 void contacts_connection_change_avatar_tokens (ContactsConnection *self,
82 guint n, const TpHandle *handles, const gchar * const *tokens);
82 void tp_tests_contacts_connection_change_avatar_tokens (
83 TpTestsContactsConnection *self, guint n, const TpHandle *handles,
84 const gchar * const *tokens);
8385
84 void contacts_connection_change_avatar_data (ContactsConnection *self,
86 void tp_tests_contacts_connection_change_avatar_data (
87 TpTestsContactsConnection *self,
8588 TpHandle handle,
8689 GArray *data,
8790 const gchar *mime_type,
8891 const gchar *token);
8992
90 void contacts_connection_change_locations (ContactsConnection *self,
93 void tp_tests_contacts_connection_change_locations (
94 TpTestsContactsConnection *self,
9195 guint n,
9296 const TpHandle *handles,
9397 GHashTable **locations);
9498
95 void contacts_connection_change_capabilities (ContactsConnection *self,
96 GHashTable *capabilities);
99 void tp_tests_contacts_connection_change_capabilities (
100 TpTestsContactsConnection *self, GHashTable *capabilities);
101
102 void tp_tests_contacts_connection_change_contact_info (
103 TpTestsContactsConnection *self, TpHandle handle, GPtrArray *info);
104
105 void tp_tests_contacts_connection_set_default_contact_info (
106 TpTestsContactsConnection *self,
107 GPtrArray *info);
97108
98109 /* Legacy version (no Contacts interface) */
99110
100 typedef struct _LegacyContactsConnection LegacyContactsConnection;
101 typedef struct _LegacyContactsConnectionClass LegacyContactsConnectionClass;
102 typedef struct _LegacyContactsConnectionPrivate
103 LegacyContactsConnectionPrivate;
111 typedef struct _TpTestsLegacyContactsConnection TpTestsLegacyContactsConnection;
112 typedef struct _TpTestsLegacyContactsConnectionClass TpTestsLegacyContactsConnectionClass;
113 typedef struct _TpTestsLegacyContactsConnectionPrivate
114 TpTestsLegacyContactsConnectionPrivate;
104115
105 struct _LegacyContactsConnectionClass {
106 ContactsConnectionClass parent_class;
116 struct _TpTestsLegacyContactsConnectionClass {
117 TpTestsContactsConnectionClass parent_class;
107118 };
108119
109 struct _LegacyContactsConnection {
110 ContactsConnection parent;
120 struct _TpTestsLegacyContactsConnection {
121 TpTestsContactsConnection parent;
111122
112 LegacyContactsConnectionPrivate *priv;
123 TpTestsLegacyContactsConnectionPrivate *priv;
113124 };
114125
115 GType legacy_contacts_connection_get_type (void);
126 GType tp_tests_legacy_contacts_connection_get_type (void);
116127
117128 /* TYPE MACROS */
118 #define LEGACY_CONTACTS_TYPE_CONNECTION \
119 (legacy_contacts_connection_get_type ())
120 #define LEGACY_CONTACTS_CONNECTION(obj) \
121 (G_TYPE_CHECK_INSTANCE_CAST((obj), LEGACY_CONTACTS_TYPE_CONNECTION, \
122 LegacyContactsConnection))
123 #define LEGACY_CONTACTS_CONNECTION_CLASS(klass) \
124 (G_TYPE_CHECK_CLASS_CAST((klass), LEGACY_CONTACTS_TYPE_CONNECTION, \
125 LegacyContactsConnectionClass))
126 #define LEGACY_CONTACTS_IS_CONNECTION(obj) \
127 (G_TYPE_CHECK_INSTANCE_TYPE((obj), LEGACY_CONTACTS_TYPE_CONNECTION))
128 #define LEGACY_CONTACTS_IS_CONNECTION_CLASS(klass) \
129 (G_TYPE_CHECK_CLASS_TYPE((klass), LEGACY_CONTACTS_TYPE_CONNECTION))
130 #define LEGACY_CONTACTS_CONNECTION_GET_CLASS(obj) \
131 (G_TYPE_INSTANCE_GET_CLASS ((obj), LEGACY_CONTACTS_TYPE_CONNECTION, \
132 LegacyContactsConnectionClass))
129 #define TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION \
130 (tp_tests_legacy_contacts_connection_get_type ())
131 #define LEGACY_TP_TESTS_CONTACTS_CONNECTION(obj) \
132 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \
133 TpTestsLegacyContactsConnection))
134 #define LEGACY_TP_TESTS_CONTACTS_CONNECTION_CLASS(klass) \
135 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \
136 TpTestsLegacyContactsConnectionClass))
137 #define TP_TESTS_LEGACY_CONTACTS_IS_CONNECTION(obj) \
138 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION))
139 #define TP_TESTS_LEGACY_CONTACTS_IS_CONNECTION_CLASS(klass) \
140 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION))
141 #define LEGACY_TP_TESTS_CONTACTS_CONNECTION_GET_CLASS(obj) \
142 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \
143 TpTestsLegacyContactsConnectionClass))
133144
134145 /* No Requests version */
135146
136 typedef struct _NoRequestsConnection NoRequestsConnection;
137 typedef struct _NoRequestsConnectionClass NoRequestsConnectionClass;
138 typedef struct _NoRequestsConnectionPrivate
139 NoRequestsConnectionPrivate;
147 typedef struct _TpTestsNoRequestsConnection TpTestsNoRequestsConnection;
148 typedef struct _TpTestsNoRequestsConnectionClass TpTestsNoRequestsConnectionClass;
149 typedef struct _TpTestsNoRequestsConnectionPrivate
150 TpTestsNoRequestsConnectionPrivate;
140151
141 struct _NoRequestsConnectionClass {
142 ContactsConnectionClass parent_class;
152 struct _TpTestsNoRequestsConnectionClass {
153 TpTestsContactsConnectionClass parent_class;
143154 };
144155
145 struct _NoRequestsConnection {
146 ContactsConnection parent;
156 struct _TpTestsNoRequestsConnection {
157 TpTestsContactsConnection parent;
147158
148 NoRequestsConnectionPrivate *priv;
159 TpTestsNoRequestsConnectionPrivate *priv;
149160 };
150161
151 GType no_requests_connection_get_type (void);
162 GType tp_tests_no_requests_connection_get_type (void);
152163
153164 /* TYPE MACROS */
154 #define NO_REQUESTS_TYPE_CONNECTION \
155 (no_requests_connection_get_type ())
156 #define NO_REQUESTS_CONNECTION(obj) \
157 (G_TYPE_CHECK_INSTANCE_CAST((obj), NO_REQUESTS_TYPE_CONNECTION, \
158 NoRequestsConnection))
159 #define NO_REQUESTS_CONNECTION_CLASS(klass) \
160 (G_TYPE_CHECK_CLASS_CAST((klass), NO_REQUESTS_TYPE_CONNECTION, \
161 NoRequestsConnectionClass))
162 #define NO_REQUESTS_IS_CONNECTION(obj) \
163 (G_TYPE_CHECK_INSTANCE_TYPE((obj), NO_REQUESTS_TYPE_CONNECTION))
164 #define NO_REQUESTS_IS_CONNECTION_CLASS(klass) \
165 (G_TYPE_CHECK_CLASS_TYPE((klass), NO_REQUESTS_TYPE_CONNECTION))
166 #define NO_REQUESTS_CONNECTION_GET_CLASS(obj) \
167 (G_TYPE_INSTANCE_GET_CLASS ((obj), NO_REQUESTS_TYPE_CONNECTION, \
168 NoRequestsConnectionClass))
165 #define TP_TESTS_TYPE_NO_REQUESTS_CONNECTION \
166 (tp_tests_no_requests_connection_get_type ())
167 #define TP_TESTS_NO_REQUESTS_CONNECTION(obj) \
168 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \
169 TpTestsNoRequestsConnection))
170 #define TP_TESTS_NO_REQUESTS_CONNECTION_CLASS(klass) \
171 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \
172 TpTestsNoRequestsConnectionClass))
173 #define TP_TESTS_NO_REQUESTS_IS_CONNECTION(obj) \
174 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION))
175 #define TP_TESTS_NO_REQUESTS_IS_CONNECTION_CLASS(klass) \
176 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION))
177 #define TP_TESTS_NO_REQUESTS_CONNECTION_GET_CLASS(obj) \
178 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \
179 TpTestsNoRequestsConnectionClass))
169180
170181 G_END_DECLS
171182
172 #endif
183 #endif /* ifndef __TP_TESTS_CONTACTS_CONN_H__ */
1212 }\
1313 } G_STMT_END
1414
15 #define MYASSERT_SAME_ERROR(left, right) \
16 G_STMT_START {\
17 MYASSERT ((left)->domain == (right)->domain,\
18 ": (%s #%d \"%s\") != (%s #%d \"%s\")",\
19 g_quark_to_string ((left)->domain), (left)->code, (left)->message,\
20 g_quark_to_string ((right)->domain), (right)->code, (right)->message);\
21 MYASSERT ((left)->code == (right)->code,\
22 ": (%s #%d \"%s\") != (%s #%d \"%s\")",\
23 g_quark_to_string ((left)->domain), (left)->code, (left)->message,\
24 g_quark_to_string ((right)->domain), (right)->code, (right)->message);\
25 MYASSERT (!tp_strdiff ((left)->message, (right)->message),\
26 ": (%s #%d \"%s\") != (%s #%d \"%s\")",\
27 g_quark_to_string ((left)->domain), (left)->code, (left)->message,\
28 g_quark_to_string ((right)->domain), (right)->code, (right)->message);\
29 } G_STMT_END
30
31 #define MYASSERT_SAME_STRING(left, right) \
32 g_assert_cmpstr ((left), ==, (right));
33
34 #define MYASSERT_SAME_UINT(left, right) \
35 g_assert_cmpuint ((left), ==, (right))
36
3715 #endif
00 /*
1 * params-cm.h - source for ParamConnectionManager
1 * params-cm.h - source for TpTestsParamConnectionManager
22 *
33 * Copyright © 2007-2009 Collabora Ltd. <http://www.collabora.co.uk/>
44 * Copyright © 2007-2009 Nokia Corporation
2525 #include <telepathy-glib/dbus.h>
2626 #include <telepathy-glib/errors.h>
2727
28 G_DEFINE_TYPE (ParamConnectionManager,
29 param_connection_manager,
28 G_DEFINE_TYPE (TpTestsParamConnectionManager,
29 tp_tests_param_connection_manager,
3030 TP_TYPE_BASE_CONNECTION_MANAGER)
3131
32 struct _ParamConnectionManagerPrivate
32 struct _TpTestsParamConnectionManagerPrivate
3333 {
3434 int dummy;
3535 };
3636
3737 static void
38 param_connection_manager_init (
39 ParamConnectionManager *self)
38 tp_tests_param_connection_manager_init (
39 TpTestsParamConnectionManager *self)
4040 {
4141 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
42 TYPE_PARAM_CONNECTION_MANAGER,
43 ParamConnectionManagerPrivate);
42 TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER,
43 TpTestsParamConnectionManagerPrivate);
4444 }
4545
4646 enum {
47 PARAM_STRING,
48 PARAM_INT16,
49 PARAM_INT32,
50 PARAM_UINT16,
51 PARAM_UINT32,
52 PARAM_INT64,
53 PARAM_UINT64,
54 PARAM_BOOLEAN,
55 PARAM_DOUBLE,
56 PARAM_ARRAY_STRINGS,
57 PARAM_ARRAY_BYTES,
58 PARAM_OBJECT_PATH,
59 PARAM_LC_STRING,
60 PARAM_UC_STRING,
47 TP_TESTS_PARAM_STRING,
48 TP_TESTS_PARAM_INT16,
49 TP_TESTS_PARAM_INT32,
50 TP_TESTS_PARAM_UINT16,
51 TP_TESTS_PARAM_UINT32,
52 TP_TESTS_PARAM_INT64,
53 TP_TESTS_PARAM_UINT64,
54 TP_TESTS_PARAM_BOOLEAN,
55 TP_TESTS_PARAM_DOUBLE,
56 TP_TESTS_PARAM_ARRAY_STRINGS,
57 TP_TESTS_PARAM_ARRAY_BYTES,
58 TP_TESTS_PARAM_OBJECT_PATH,
59 TP_TESTS_PARAM_LC_STRING,
60 TP_TESTS_PARAM_UC_STRING,
6161 NUM_PARAM
6262 };
6363
9292 static TpCMParamSpec param_example_params[] = {
9393 { "a-string", "s", G_TYPE_STRING,
9494 TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "the default string",
95 G_STRUCT_OFFSET (CMParams, a_string), NULL, NULL, NULL },
95 G_STRUCT_OFFSET (TpTestsCMParams, a_string), NULL, NULL, NULL },
9696 { "a-int16", "n", G_TYPE_INT,
9797 TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER (42),
98 G_STRUCT_OFFSET (CMParams, a_int16), NULL, NULL, NULL },
98 G_STRUCT_OFFSET (TpTestsCMParams, a_int16), NULL, NULL, NULL },
9999 { "a-int32", "i", G_TYPE_INT,
100100 TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER (42),
101 G_STRUCT_OFFSET (CMParams, a_int32), NULL, NULL, NULL },
101 G_STRUCT_OFFSET (TpTestsCMParams, a_int32), NULL, NULL, NULL },
102102 { "a-uint16", "q", G_TYPE_UINT, 0, NULL,
103 G_STRUCT_OFFSET (CMParams, a_uint16), NULL, NULL, NULL },
103 G_STRUCT_OFFSET (TpTestsCMParams, a_uint16), NULL, NULL, NULL },
104104 { "a-uint32", "u", G_TYPE_UINT, 0, NULL,
105 G_STRUCT_OFFSET (CMParams, a_uint32), NULL, NULL, NULL },
105 G_STRUCT_OFFSET (TpTestsCMParams, a_uint32), NULL, NULL, NULL },
106106 { "a-int64", "x", G_TYPE_INT64, 0, NULL,
107 G_STRUCT_OFFSET (CMParams, a_int64), NULL, NULL, NULL },
107 G_STRUCT_OFFSET (TpTestsCMParams, a_int64), NULL, NULL, NULL },
108108 { "a-uint64", "t", G_TYPE_UINT64, 0, NULL,
109 G_STRUCT_OFFSET (CMParams, a_uint64), NULL, NULL, NULL },
109 G_STRUCT_OFFSET (TpTestsCMParams, a_uint64), NULL, NULL, NULL },
110110 { "a-boolean", "b", G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_REQUIRED, NULL,
111 G_STRUCT_OFFSET (CMParams, a_boolean), NULL, NULL, NULL },
111 G_STRUCT_OFFSET (TpTestsCMParams, a_boolean), NULL, NULL, NULL },
112112 { "a-double", "d", G_TYPE_DOUBLE, 0, NULL,
113 G_STRUCT_OFFSET (CMParams, a_double), NULL, NULL, NULL },
113 G_STRUCT_OFFSET (TpTestsCMParams, a_double), NULL, NULL, NULL },
114114 { "a-array-of-strings", "as", 0, 0, NULL,
115 G_STRUCT_OFFSET (CMParams, a_array_of_strings), NULL, NULL, NULL },
115 G_STRUCT_OFFSET (TpTestsCMParams, a_array_of_strings), NULL, NULL, NULL },
116116 { "a-array-of-bytes", "ay", 0, 0, NULL,
117 G_STRUCT_OFFSET (CMParams, a_array_of_bytes), NULL, NULL, NULL },
117 G_STRUCT_OFFSET (TpTestsCMParams, a_array_of_bytes), NULL, NULL, NULL },
118118 { "a-object-path", "o", 0, 0, NULL,
119 G_STRUCT_OFFSET (CMParams, a_object_path), NULL, NULL, NULL },
119 G_STRUCT_OFFSET (TpTestsCMParams, a_object_path), NULL, NULL, NULL },
120120
121121 /* demo of a filter */
122122 { "lc-string", "s", G_TYPE_STRING, 0, NULL,
123 G_STRUCT_OFFSET (CMParams, lc_string),
123 G_STRUCT_OFFSET (TpTestsCMParams, lc_string),
124124 filter_string_ascii_case, GINT_TO_POINTER (FALSE), NULL },
125125 { "uc-string", "s", G_TYPE_STRING, 0, NULL,
126 G_STRUCT_OFFSET (CMParams, uc_string),
126 G_STRUCT_OFFSET (TpTestsCMParams, uc_string),
127127 filter_string_ascii_case, GINT_TO_POINTER (TRUE), NULL },
128128 { NULL }
129129 };
130130
131 static CMParams *params = NULL;
131 static TpTestsCMParams *params = NULL;
132132
133133 static gpointer
134134 alloc_params (void)
135135 {
136 params = g_slice_new0 (CMParams);
136 params = g_slice_new0 (TpTestsCMParams);
137137
138138 return params;
139139 }
142142 free_params (gpointer p)
143143 {
144144 /* CM user is responsible to free params so he can check their values */
145 params = (CMParams *) p;
145 params = (TpTestsCMParams *) p;
146146 params->would_have_been_freed = TRUE;
147147 }
148148
165165 }
166166
167167 static void
168 param_connection_manager_class_init (
169 ParamConnectionManagerClass *klass)
168 tp_tests_param_connection_manager_class_init (
169 TpTestsParamConnectionManagerClass *klass)
170170 {
171171 TpBaseConnectionManagerClass *base_class =
172172 (TpBaseConnectionManagerClass *) klass;
173173
174174 g_type_class_add_private (klass,
175 sizeof (ParamConnectionManagerPrivate));
176
177 param_example_params[PARAM_ARRAY_STRINGS].gtype = G_TYPE_STRV;
178 param_example_params[PARAM_ARRAY_BYTES].gtype = DBUS_TYPE_G_UCHAR_ARRAY;
179 param_example_params[PARAM_OBJECT_PATH].gtype = DBUS_TYPE_G_OBJECT_PATH;
175 sizeof (TpTestsParamConnectionManagerPrivate));
176
177 param_example_params[TP_TESTS_PARAM_ARRAY_STRINGS].gtype = G_TYPE_STRV;
178 param_example_params[TP_TESTS_PARAM_ARRAY_BYTES].gtype =
179 DBUS_TYPE_G_UCHAR_ARRAY;
180 param_example_params[TP_TESTS_PARAM_OBJECT_PATH].gtype =
181 DBUS_TYPE_G_OBJECT_PATH;
180182
181183 base_class->new_connection = new_connection;
182184 base_class->cm_dbus_name = "params_cm";
183185 base_class->protocol_params = example_protocols;
184186 }
185187
186 CMParams *
187 param_connection_manager_steal_params_last_conn (void)
188 {
189 CMParams *p = params;
188 TpTestsCMParams *
189 tp_tests_param_connection_manager_steal_params_last_conn (void)
190 {
191 TpTestsCMParams *p = params;
190192
191193 params = NULL;
192194 return p;
193195 }
194196
195197 void
196 param_connection_manager_free_params (CMParams *p)
198 tp_tests_param_connection_manager_free_params (TpTestsCMParams *p)
197199 {
198200 g_free (p->a_string);
199201 g_strfreev (p->a_array_of_strings);
201203 g_array_free (p->a_array_of_bytes, TRUE);
202204 g_free (p->a_object_path);
203205
204 g_slice_free (CMParams, p);
205 }
206 g_slice_free (TpTestsCMParams, p);
207 }
00 /*
1 * params-cm.h - header for ParamConnectionManager
1 * params-cm.h - header for TpTestsParamConnectionManager
22 *
33 * Copyright © 2007-2009 Collabora Ltd. <http://www.collabora.co.uk/>
44 * Copyright © 2007-2009 Nokia Corporation
1818 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1919 */
2020
21 #ifndef __PARAM_CONNECTION_MANAGER_H__
22 #define __PARAM_CONNECTION_MANAGER_H__
21 #ifndef __TP_TESTS_PARAM_CONNECTION_MANAGER_H__
22 #define __TP_TESTS_PARAM_CONNECTION_MANAGER_H__
2323
2424 #include <glib-object.h>
2525 #include <telepathy-glib/base-connection-manager.h>
2626
2727 G_BEGIN_DECLS
2828
29 typedef struct _ParamConnectionManager
30 ParamConnectionManager;
31 typedef struct _ParamConnectionManagerPrivate
32 ParamConnectionManagerPrivate;
29 typedef struct _TpTestsParamConnectionManager
30 TpTestsParamConnectionManager;
31 typedef struct _TpTestsParamConnectionManagerPrivate
32 TpTestsParamConnectionManagerPrivate;
3333
34 typedef struct _ParamConnectionManagerClass
35 ParamConnectionManagerClass;
36 typedef struct _ParamConnectionManagerClassPrivate
37 ParamConnectionManagerClassPrivate;
34 typedef struct _TpTestsParamConnectionManagerClass
35 TpTestsParamConnectionManagerClass;
36 typedef struct _TpTestsParamConnectionManagerClassPrivate
37 TpTestsParamConnectionManagerClassPrivate;
3838
39 struct _ParamConnectionManagerClass {
39 struct _TpTestsParamConnectionManagerClass {
4040 TpBaseConnectionManagerClass parent_class;
4141
42 ParamConnectionManagerClassPrivate *priv;
42 TpTestsParamConnectionManagerClassPrivate *priv;
4343 };
4444
45 struct _ParamConnectionManager {
45 struct _TpTestsParamConnectionManager {
4646 TpBaseConnectionManager parent;
4747
48 ParamConnectionManagerPrivate *priv;
48 TpTestsParamConnectionManagerPrivate *priv;
4949 };
5050
51 GType param_connection_manager_get_type (void);
51 GType tp_tests_param_connection_manager_get_type (void);
5252
5353 /* TYPE MACROS */
54 #define TYPE_PARAM_CONNECTION_MANAGER \
55 (param_connection_manager_get_type ())
56 #define PARAM_CONNECTION_MANAGER(obj) \
57 (G_TYPE_CHECK_INSTANCE_CAST((obj), TYPE_PARAM_CONNECTION_MANAGER, \
58 ParamConnectionManager))
59 #define PARAM_CONNECTION_MANAGER_CLASS(klass) \
60 (G_TYPE_CHECK_CLASS_CAST((klass), TYPE_PARAM_CONNECTION_MANAGER, \
61 ParamConnectionManagerClass))
54 #define TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER \
55 (tp_tests_param_connection_manager_get_type ())
56 #define TP_TESTS_PARAM_CONNECTION_MANAGER(obj) \
57 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \
58 TpTestsParamConnectionManager))
59 #define TP_TESTS_PARAM_CONNECTION_MANAGER_CLASS(klass) \
60 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \
61 TpTestsParamConnectionManagerClass))
6262 #define IS_PARAM_CONNECTION_MANAGER(obj) \
63 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TYPE_PARAM_CONNECTION_MANAGER))
63 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER))
6464 #define IS_PARAM_CONNECTION_MANAGER_CLASS(klass) \
65 (G_TYPE_CHECK_CLASS_TYPE((klass), TYPE_PARAM_CONNECTION_MANAGER))
66 #define PARAM_CONNECTION_MANAGER_GET_CLASS(obj) \
67 (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_PARAM_CONNECTION_MANAGER, \
68 ParamConnectionManagerClass))
65 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER))
66 #define TP_TESTS_PARAM_CONNECTION_MANAGER_GET_CLASS(obj) \
67 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \
68 TpTestsParamConnectionManagerClass))
6969
7070 typedef struct {
7171 gchar *a_string;
8383 gchar *lc_string;
8484 gchar *uc_string;
8585 gboolean would_have_been_freed;
86 } CMParams;
86 } TpTestsCMParams;
8787
88 CMParams * param_connection_manager_steal_params_last_conn (void);
89 void param_connection_manager_free_params (CMParams *params);
88 TpTestsCMParams * tp_tests_param_connection_manager_steal_params_last_conn (
89 void);
90 void tp_tests_param_connection_manager_free_params (TpTestsCMParams *params);
9091
9192 G_END_DECLS
9293
93 #endif
94 #endif /* #ifndef __TP_TESTS_PARAM_CONNECTION_MANAGER_H__ */
1717
1818 static void account_manager_iface_init (gpointer, gpointer);
1919
20 G_DEFINE_TYPE_WITH_CODE (SimpleAccountManager,
21 simple_account_manager,
20 G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleAccountManager,
21 tp_tests_simple_account_manager,
2222 G_TYPE_OBJECT,
2323 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_ACCOUNT_MANAGER,
2424 account_manager_iface_init);
4646 PROP_INVALID_ACCOUNTS,
4747 };
4848
49 struct _SimpleAccountManagerPrivate
49 struct _TpTestsSimpleAccountManagerPrivate
5050 {
5151 int dummy;
5252 };
5353
5454 static void
55 simple_account_manager_create_account (TpSvcAccountManager *self,
55 tp_tests_simple_account_manager_create_account (TpSvcAccountManager *self,
5656 const gchar *in_Connection_Manager,
5757 const gchar *in_Protocol,
5858 const gchar *in_Display_Name,
7070 gpointer unused G_GNUC_UNUSED)
7171 {
7272 #define IMPLEMENT(x) tp_svc_account_manager_implement_##x (\
73 klass, simple_account_manager_##x)
73 klass, tp_tests_simple_account_manager_##x)
7474 IMPLEMENT (create_account);
7575 #undef IMPLEMENT
7676 }
7777
7878
7979 static void
80 simple_account_manager_init (SimpleAccountManager *self)
80 tp_tests_simple_account_manager_init (TpTestsSimpleAccountManager *self)
8181 {
82 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SIMPLE_TYPE_ACCOUNT_MANAGER,
83 SimpleAccountManagerPrivate);
82 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
83 TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, TpTestsSimpleAccountManagerPrivate);
8484 }
8585
8686 static void
87 simple_account_manager_get_property (GObject *object,
87 tp_tests_simple_account_manager_get_property (GObject *object,
8888 guint property_id,
8989 GValue *value,
9090 GParamSpec *spec)
129129 * too.
130130 */
131131 static void
132 simple_account_manager_class_init (SimpleAccountManagerClass *klass)
132 tp_tests_simple_account_manager_class_init (
133 TpTestsSimpleAccountManagerClass *klass)
133134 {
134135 GObjectClass *object_class = (GObjectClass *) klass;
135136 GParamSpec *param_spec;
153154 { NULL },
154155 };
155156
156 g_type_class_add_private (klass, sizeof (SimpleAccountManagerPrivate));
157 object_class->get_property = simple_account_manager_get_property;
157 g_type_class_add_private (klass, sizeof (TpTestsSimpleAccountManagerPrivate));
158 object_class->get_property = tp_tests_simple_account_manager_get_property;
158159
159160 param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces",
160161 "In this case we only implement AccountManager, so none.",
174175
175176 klass->dbus_props_class.interfaces = prop_interfaces;
176177 tp_dbus_properties_mixin_class_init (object_class,
177 G_STRUCT_OFFSET (SimpleAccountManagerClass, dbus_props_class));
178 G_STRUCT_OFFSET (TpTestsSimpleAccountManagerClass, dbus_props_class));
178179 }
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef __SIMPLE_ACCOUNT_MANAGER_H__
12 #define __SIMPLE_ACCOUNT_MANAGER_H__
11 #ifndef __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__
12 #define __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__
1313
1414 #include <glib-object.h>
1515 #include <telepathy-glib/dbus-properties-mixin.h>
1717
1818 G_BEGIN_DECLS
1919
20 typedef struct _SimpleAccountManager SimpleAccountManager;
21 typedef struct _SimpleAccountManagerClass SimpleAccountManagerClass;
22 typedef struct _SimpleAccountManagerPrivate SimpleAccountManagerPrivate;
20 typedef struct _TpTestsSimpleAccountManager TpTestsSimpleAccountManager;
21 typedef struct _TpTestsSimpleAccountManagerClass TpTestsSimpleAccountManagerClass;
22 typedef struct _TpTestsSimpleAccountManagerPrivate TpTestsSimpleAccountManagerPrivate;
2323
24 struct _SimpleAccountManagerClass {
24 struct _TpTestsSimpleAccountManagerClass {
2525 GObjectClass parent_class;
2626 TpDBusPropertiesMixinClass dbus_props_class;
2727 };
2828
29 struct _SimpleAccountManager {
29 struct _TpTestsSimpleAccountManager {
3030 GObject parent;
3131
32 SimpleAccountManagerPrivate *priv;
32 TpTestsSimpleAccountManagerPrivate *priv;
3333 };
3434
35 GType simple_account_manager_get_type (void);
35 GType tp_tests_simple_account_manager_get_type (void);
3636
3737 /* TYPE MACROS */
38 #define SIMPLE_TYPE_ACCOUNT_MANAGER \
39 (simple_account_manager_get_type ())
38 #define TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER \
39 (tp_tests_simple_account_manager_get_type ())
4040 #define SIMPLE_ACCOUNT_MANAGER(obj) \
41 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_ACCOUNT_MANAGER, \
42 SimpleAccountManager))
41 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \
42 TpTestsSimpleAccountManager))
4343 #define SIMPLE_ACCOUNT_MANAGER_CLASS(klass) \
44 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_ACCOUNT_MANAGER, \
45 SimpleAccountManagerClass))
44 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \
45 TpTestsSimpleAccountManagerClass))
4646 #define SIMPLE_IS_ACCOUNT_MANAGER(obj) \
47 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_ACCOUNT_MANAGER))
47 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER))
4848 #define SIMPLE_IS_ACCOUNT_MANAGER_CLASS(klass) \
49 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_ACCOUNT_MANAGER))
49 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER))
5050 #define SIMPLE_ACCOUNT_MANAGER_GET_CLASS(obj) \
51 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_ACCOUNT_MANAGER, \
52 SimpleAccountManagerClass))
51 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \
52 TpTestsSimpleAccountManagerClass))
5353
5454
5555 G_END_DECLS
5656
57 #endif /* #ifndef __SIMPLE_ACCOUNT_MANAGER_H__ */
57 #endif /* #ifndef __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__ */
2020
2121 static void account_iface_init (gpointer, gpointer);
2222
23 G_DEFINE_TYPE_WITH_CODE (SimpleAccount,
24 simple_account,
23 G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleAccount,
24 tp_tests_simple_account,
2525 G_TYPE_OBJECT,
2626 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_ACCOUNT,
2727 account_iface_init);
5353 PROP_HAS_BEEN_ONLINE,
5454 };
5555
56 struct _SimpleAccountPrivate
56 struct _TpTestsSimpleAccountPrivate
5757 {
5858 gpointer unused;
5959 };
6363 gpointer unused G_GNUC_UNUSED)
6464 {
6565 #define IMPLEMENT(x) tp_svc_account_implement_##x (\
66 klass, simple_account_##x)
66 klass, tp_tests_simple_account_##x)
6767 /* TODO */
6868 #undef IMPLEMENT
6969 }
7070
7171
7272 static void
73 simple_account_init (SimpleAccount *self)
74 {
75 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SIMPLE_TYPE_ACCOUNT,
76 SimpleAccountPrivate);
73 tp_tests_simple_account_init (TpTestsSimpleAccount *self)
74 {
75 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_SIMPLE_ACCOUNT,
76 TpTestsSimpleAccountPrivate);
7777 }
7878
7979 static void
80 simple_account_get_property (GObject *object,
80 tp_tests_simple_account_get_property (GObject *object,
8181 guint property_id,
8282 GValue *value,
8383 GParamSpec *spec)
153153 * Properties.GetAll().
154154 */
155155 static void
156 simple_account_class_init (SimpleAccountClass *klass)
156 tp_tests_simple_account_class_init (TpTestsSimpleAccountClass *klass)
157157 {
158158 GObjectClass *object_class = (GObjectClass *) klass;
159159 GParamSpec *param_spec;
187187 { NULL },
188188 };
189189
190 g_type_class_add_private (klass, sizeof (SimpleAccountPrivate));
191 object_class->get_property = simple_account_get_property;
190 g_type_class_add_private (klass, sizeof (TpTestsSimpleAccountPrivate));
191 object_class->get_property = tp_tests_simple_account_get_property;
192192
193193 param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces",
194194 "In this case we only implement Account, so none.",
296296
297297 klass->dbus_props_class.interfaces = prop_interfaces;
298298 tp_dbus_properties_mixin_class_init (object_class,
299 G_STRUCT_OFFSET (SimpleAccountClass, dbus_props_class));
299 G_STRUCT_OFFSET (TpTestsSimpleAccountClass, dbus_props_class));
300300 }
77 * notice and this notice are preserved.
88 */
99
10 #ifndef __SIMPLE_ACCOUNT_H__
11 #define __SIMPLE_ACCOUNT_H__
10 #ifndef __TP_TESTS_SIMPLE_ACCOUNT_H__
11 #define __TP_TESTS_SIMPLE_ACCOUNT_H__
1212
1313 #include <glib-object.h>
1414 #include <telepathy-glib/dbus-properties-mixin.h>
1616
1717 G_BEGIN_DECLS
1818
19 typedef struct _SimpleAccount SimpleAccount;
20 typedef struct _SimpleAccountClass SimpleAccountClass;
21 typedef struct _SimpleAccountPrivate SimpleAccountPrivate;
19 typedef struct _TpTestsSimpleAccount TpTestsSimpleAccount;
20 typedef struct _TpTestsSimpleAccountClass TpTestsSimpleAccountClass;
21 typedef struct _TpTestsSimpleAccountPrivate TpTestsSimpleAccountPrivate;
2222
23 struct _SimpleAccountClass {
23 struct _TpTestsSimpleAccountClass {
2424 GObjectClass parent_class;
2525 TpDBusPropertiesMixinClass dbus_props_class;
2626 };
2727
28 struct _SimpleAccount {
28 struct _TpTestsSimpleAccount {
2929 GObject parent;
3030
31 SimpleAccountPrivate *priv;
31 TpTestsSimpleAccountPrivate *priv;
3232 };
3333
34 GType simple_account_get_type (void);
34 GType tp_tests_simple_account_get_type (void);
3535
3636 /* TYPE MACROS */
37 #define SIMPLE_TYPE_ACCOUNT \
38 (simple_account_get_type ())
39 #define SIMPLE_ACCOUNT(obj) \
40 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_ACCOUNT, \
41 SimpleAccount))
42 #define SIMPLE_ACCOUNT_CLASS(klass) \
43 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_ACCOUNT, \
44 SimpleAccountClass))
45 #define SIMPLE_IS_ACCOUNT(obj) \
46 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_ACCOUNT))
47 #define SIMPLE_IS_ACCOUNT_CLASS(klass) \
48 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_ACCOUNT))
49 #define SIMPLE_ACCOUNT_GET_CLASS(obj) \
50 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_ACCOUNT, \
51 SimpleAccountClass))
37 #define TP_TESTS_TYPE_SIMPLE_ACCOUNT \
38 (tp_tests_simple_account_get_type ())
39 #define TP_TESTS_SIMPLE_ACCOUNT(obj) \
40 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \
41 TpTestsSimpleAccount))
42 #define TP_TESTS_SIMPLE_ACCOUNT_CLASS(klass) \
43 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \
44 TpTestsSimpleAccountClass))
45 #define TP_TESTS_SIMPLE_IS_ACCOUNT(obj) \
46 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT))
47 #define TP_TESTS_SIMPLE_IS_ACCOUNT_CLASS(klass) \
48 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT))
49 #define TP_TESTS_SIMPLE_ACCOUNT_GET_CLASS(obj) \
50 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \
51 TpTestsSimpleAccountClass))
5252
5353 G_END_DECLS
5454
55 #endif /* #ifndef __SIMPLE_ACCOUNT_H__ */
55 #endif /* #ifndef __TP_TESTS_SIMPLE_ACCOUNT_H__ */
2222
2323 static void channel_dispatch_operation_iface_init (gpointer, gpointer);
2424
25 G_DEFINE_TYPE_WITH_CODE (SimpleChannelDispatchOperation,
26 simple_channel_dispatch_operation,
25 G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleChannelDispatchOperation,
26 tp_tests_simple_channel_dispatch_operation,
2727 G_TYPE_OBJECT,
2828 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_DISPATCH_OPERATION,
2929 channel_dispatch_operation_iface_init);
5656 };
5757
5858 static void
59 simple_channel_dispatch_operation_handle_with (
59 tp_tests_simple_channel_dispatch_operation_handle_with (
6060 TpSvcChannelDispatchOperation *iface,
6161 const gchar *handler,
6262 DBusGMethodInvocation *context)
7373 }
7474
7575 static void
76 simple_channel_dispatch_operation_claim (
76 tp_tests_simple_channel_dispatch_operation_claim (
7777 TpSvcChannelDispatchOperation *iface,
7878 DBusGMethodInvocation *context)
7979 {
8181 }
8282
8383 static void
84 tp_tests_simple_channel_dispatch_operation_handle_with_time (
85 TpSvcChannelDispatchOperation *iface,
86 const gchar *handler,
87 gint64 user_action_timestamp,
88 DBusGMethodInvocation *context)
89 {
90 dbus_g_method_return (context);
91 }
92
93 static void
8494 channel_dispatch_operation_iface_init (gpointer klass,
8595 gpointer unused G_GNUC_UNUSED)
8696 {
8797 #define IMPLEMENT(x) tp_svc_channel_dispatch_operation_implement_##x (\
88 klass, simple_channel_dispatch_operation_##x)
98 klass, tp_tests_simple_channel_dispatch_operation_##x)
8999 IMPLEMENT(handle_with);
90100 IMPLEMENT(claim);
101 IMPLEMENT(handle_with_time);
91102 #undef IMPLEMENT
92103 }
93104
94105
95106 static void
96 simple_channel_dispatch_operation_init (SimpleChannelDispatchOperation *self)
97 {
98 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION,
99 SimpleChannelDispatchOperationPrivate);
107 tp_tests_simple_channel_dispatch_operation_init (TpTestsSimpleChannelDispatchOperation *self)
108 {
109 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
110 TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION,
111 TpTestsSimpleChannelDispatchOperationPrivate);
100112
101113 self->priv->channels = g_ptr_array_new_with_free_func (
102114 (GDestroyNotify) g_object_unref);
103115 }
104116
105117 static void
106 simple_channel_dispatch_operation_get_property (GObject *object,
118 tp_tests_simple_channel_dispatch_operation_get_property (GObject *object,
107119 guint property_id,
108120 GValue *value,
109121 GParamSpec *spec)
110122 {
111 SimpleChannelDispatchOperation *self = SIMPLE_CHANNEL_DISPATCH_OPERATION (
112 object);
123 TpTestsSimpleChannelDispatchOperation *self =
124 TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION (object);
113125
114126 switch (property_id) {
115127 case PROP_INTERFACES:
156168 }
157169
158170 static void
159 simple_channel_dispatch_operation_finalize (GObject *object)
160 {
161 SimpleChannelDispatchOperation *self = SIMPLE_CHANNEL_DISPATCH_OPERATION (
162 object);
171 tp_tests_simple_channel_dispatch_operation_finalize (GObject *object)
172 {
173 TpTestsSimpleChannelDispatchOperation *self =
174 TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION (object);
163175 void (*finalize) (GObject *) =
164 G_OBJECT_CLASS (simple_channel_dispatch_operation_parent_class)->finalize;
176 G_OBJECT_CLASS (tp_tests_simple_channel_dispatch_operation_parent_class)->finalize;
165177
166178 g_free (self->priv->conn_path);
167179 g_free (self->priv->account_path);
177189 * Properties.GetAll().
178190 */
179191 static void
180 simple_channel_dispatch_operation_class_init (SimpleChannelDispatchOperationClass *klass)
192 tp_tests_simple_channel_dispatch_operation_class_init (TpTestsSimpleChannelDispatchOperationClass *klass)
181193 {
182194 GObjectClass *object_class = (GObjectClass *) klass;
183195 GParamSpec *param_spec;
200212 { NULL },
201213 };
202214
203 g_type_class_add_private (klass, sizeof (SimpleChannelDispatchOperationPrivate));
204 object_class->get_property = simple_channel_dispatch_operation_get_property;
205 object_class->finalize = simple_channel_dispatch_operation_finalize;
215 g_type_class_add_private (klass, sizeof (TpTestsSimpleChannelDispatchOperationPrivate));
216 object_class->get_property = tp_tests_simple_channel_dispatch_operation_get_property;
217 object_class->finalize = tp_tests_simple_channel_dispatch_operation_finalize;
206218
207219 param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces",
208220 "In this case we only implement ChannelDispatchOperation, so none.",
237249
238250 klass->dbus_props_class.interfaces = prop_interfaces;
239251 tp_dbus_properties_mixin_class_init (object_class,
240 G_STRUCT_OFFSET (SimpleChannelDispatchOperationClass, dbus_props_class));
241 }
242
243 void
244 simple_channel_dispatch_operation_set_conn_path (
245 SimpleChannelDispatchOperation *self,
252 G_STRUCT_OFFSET (TpTestsSimpleChannelDispatchOperationClass, dbus_props_class));
253 }
254
255 void
256 tp_tests_simple_channel_dispatch_operation_set_conn_path (
257 TpTestsSimpleChannelDispatchOperation *self,
246258 const gchar *conn_path)
247259 {
248260 self->priv->conn_path = g_strdup (conn_path);
249261 }
250262
251263 void
252 simple_channel_dispatch_operation_add_channel (
253 SimpleChannelDispatchOperation *self,
264 tp_tests_simple_channel_dispatch_operation_add_channel (
265 TpTestsSimpleChannelDispatchOperation *self,
254266 TpChannel *chan)
255267 {
256268 g_ptr_array_add (self->priv->channels, g_object_ref (chan));
257269 }
258270
259271 void
260 simple_channel_dispatch_operation_lost_channel (
261 SimpleChannelDispatchOperation *self,
272 tp_tests_simple_channel_dispatch_operation_lost_channel (
273 TpTestsSimpleChannelDispatchOperation *self,
262274 TpChannel *chan)
263275 {
264276 const gchar *path = tp_proxy_get_object_path (chan);
276288 }
277289
278290 void
279 simple_channel_dispatch_operation_set_account_path (
280 SimpleChannelDispatchOperation *self,
291 tp_tests_simple_channel_dispatch_operation_set_account_path (
292 TpTestsSimpleChannelDispatchOperation *self,
281293 const gchar *account_path)
282294 {
283295 self->priv->account_path = g_strdup (account_path);
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef __SIMPLE_CHANNEL_DISPATCH_OPERATION_H__
12 #define __SIMPLE_CHANNEL_DISPATCH_OPERATION_H__
11 #ifndef __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__
12 #define __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__
1313
1414 #include <glib-object.h>
1515
1818
1919 G_BEGIN_DECLS
2020
21 typedef struct _SimpleChannelDispatchOperation SimpleChannelDispatchOperation;
22 typedef struct _SimpleChannelDispatchOperationClass SimpleChannelDispatchOperationClass;
23 typedef struct _SimpleChannelDispatchOperationPrivate SimpleChannelDispatchOperationPrivate;
21 typedef struct _SimpleChannelDispatchOperation TpTestsSimpleChannelDispatchOperation;
22 typedef struct _SimpleChannelDispatchOperationClass TpTestsSimpleChannelDispatchOperationClass;
23 typedef struct _SimpleChannelDispatchOperationPrivate TpTestsSimpleChannelDispatchOperationPrivate;
2424
2525 struct _SimpleChannelDispatchOperationClass {
2626 GObjectClass parent_class;
3030 struct _SimpleChannelDispatchOperation {
3131 GObject parent;
3232
33 SimpleChannelDispatchOperationPrivate *priv;
33 TpTestsSimpleChannelDispatchOperationPrivate *priv;
3434 };
3535
36 GType simple_channel_dispatch_operation_get_type (void);
36 GType tp_tests_simple_channel_dispatch_operation_get_type (void);
3737
3838 /* TYPE MACROS */
39 #define SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION \
40 (simple_channel_dispatch_operation_get_type ())
41 #define SIMPLE_CHANNEL_DISPATCH_OPERATION(obj) \
42 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION, \
43 SimpleChannelDispatchOperation))
44 #define SIMPLE_CHANNEL_DISPATCH_OPERATION_CLASS(klass) \
45 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION, \
46 SimpleChannelDispatchOperationClass))
39 #define TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION \
40 (tp_tests_simple_channel_dispatch_operation_get_type ())
41 #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION(obj) \
42 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \
43 TpTestsSimpleChannelDispatchOperation))
44 #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_CLASS(klass) \
45 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \
46 TpTestsSimpleChannelDispatchOperationClass))
4747 #define SIMPLE_IS_CHANNEL_DISPATCH_OPERATION(obj) \
48 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION))
48 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION))
4949 #define SIMPLE_IS_CHANNEL_DISPATCH_OPERATION_CLASS(klass) \
50 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION))
51 #define SIMPLE_CHANNEL_DISPATCH_OPERATION_GET_CLASS(obj) \
52 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_CHANNEL_DISPATCH_OPERATION, \
53 SimpleChannelDispatchOperationClass))
50 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION))
51 #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_GET_CLASS(obj) \
52 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \
53 TpTestsSimpleChannelDispatchOperationClass))
5454
55 void simple_channel_dispatch_operation_set_conn_path (
56 SimpleChannelDispatchOperation *self,
55 void tp_tests_simple_channel_dispatch_operation_set_conn_path (
56 TpTestsSimpleChannelDispatchOperation *self,
5757 const gchar *conn_path);
5858
59 void simple_channel_dispatch_operation_add_channel (
60 SimpleChannelDispatchOperation *self,
59 void tp_tests_simple_channel_dispatch_operation_add_channel (
60 TpTestsSimpleChannelDispatchOperation *self,
6161 TpChannel *chan);
6262
63 void simple_channel_dispatch_operation_lost_channel (
64 SimpleChannelDispatchOperation *self,
63 void tp_tests_simple_channel_dispatch_operation_lost_channel (
64 TpTestsSimpleChannelDispatchOperation *self,
6565 TpChannel *chan);
6666
67 void simple_channel_dispatch_operation_set_account_path (
68 SimpleChannelDispatchOperation *self,
67 void tp_tests_simple_channel_dispatch_operation_set_account_path (
68 TpTestsSimpleChannelDispatchOperation *self,
6969 const gchar *account_path);
7070
7171 G_END_DECLS
7272
73 #endif /* #ifndef __SIMPLE_CHANNEL_DISPATCH_OPERATION_H__ */
73 #endif /* #ifndef __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__ */
2222
2323 #include "tests/lib/util.h"
2424
25 G_DEFINE_TYPE (SimpleClient, simple_client, TP_TYPE_BASE_CLIENT)
25 G_DEFINE_TYPE (TpTestsSimpleClient, tp_tests_simple_client, TP_TYPE_BASE_CLIENT)
2626
2727 static void
2828 simple_observe_channels (
3434 GList *requests,
3535 TpObserveChannelsContext *context)
3636 {
37 SimpleClient *self = SIMPLE_CLIENT (client);
37 TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client);
3838 GHashTable *info;
3939 gboolean fail;
4040 GList *l;
9898 TpChannelDispatchOperation *dispatch_operation,
9999 TpAddDispatchOperationContext *context)
100100 {
101 SimpleClient *self = SIMPLE_CLIENT (client);
101 TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client);
102102 GList *l;
103103
104104 g_assert (TP_IS_ACCOUNT (account));
141141 gint64 user_action_time,
142142 TpHandleChannelsContext *context)
143143 {
144 SimpleClient *self = SIMPLE_CLIENT (client);
144 TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client);
145145 GList *l;
146146
147147 if (self->handle_channels_ctx != NULL)
178178 }
179179
180180 static void
181 simple_client_init (SimpleClient *self)
182 {
183 }
184
185 static void
186 simple_client_dispose (GObject *object)
187 {
188 SimpleClient *self = SIMPLE_CLIENT (object);
181 tp_tests_simple_client_init (TpTestsSimpleClient *self)
182 {
183 }
184
185 static void
186 tp_tests_simple_client_dispose (GObject *object)
187 {
188 TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (object);
189189 void (*dispose) (GObject *) =
190 G_OBJECT_CLASS (simple_client_parent_class)->dispose;
190 G_OBJECT_CLASS (tp_tests_simple_client_parent_class)->dispose;
191191
192192 if (self->observe_ctx != NULL)
193193 {
212212 }
213213
214214 static void
215 simple_client_class_init (SimpleClientClass *klass)
215 tp_tests_simple_client_class_init (TpTestsSimpleClientClass *klass)
216216 {
217217 GObjectClass *object_class = G_OBJECT_CLASS (klass);
218218 TpBaseClientClass *base_class = TP_BASE_CLIENT_CLASS (klass);
219219
220 object_class->dispose = simple_client_dispose;
220 object_class->dispose = tp_tests_simple_client_dispose;
221221
222222 tp_base_client_implement_observe_channels (base_class,
223223 simple_observe_channels);
229229 simple_handle_channels);
230230 }
231231
232 SimpleClient *
233 simple_client_new (TpDBusDaemon *dbus_daemon,
232 TpTestsSimpleClient *
233 tp_tests_simple_client_new (TpDBusDaemon *dbus_daemon,
234234 const gchar *name,
235235 gboolean uniquify_name)
236236 {
237 return test_object_new_static_class (SIMPLE_TYPE_CLIENT,
237 return tp_tests_object_new_static_class (TP_TESTS_TYPE_SIMPLE_CLIENT,
238238 "dbus-daemon", dbus_daemon,
239239 "name", name,
240240 "uniquify-name", uniquify_name,
77 * notice and this notice are preserved.
88 */
99
10 #ifndef __SIMPLE_CLIENT_H__
11 #define __SIMPLE_CLIENT_H__
10 #ifndef __TP_TESTS_SIMPLE_CLIENT_H__
11 #define __TP_TESTS_SIMPLE_CLIENT_H__
1212
1313 #include <glib-object.h>
1414 #include <telepathy-glib/base-client.h>
1515
1616 G_BEGIN_DECLS
1717
18 typedef struct _SimpleClient SimpleClient;
19 typedef struct _SimpleClientClass SimpleClientClass;
18 typedef struct _TpTestsSimpleClient TpTestsSimpleClient;
19 typedef struct _TpTestsSimpleClientClass TpTestsSimpleClientClass;
2020
21 struct _SimpleClientClass {
21 struct _TpTestsSimpleClientClass {
2222 TpBaseClientClass parent_class;
2323 };
2424
25 struct _SimpleClient {
25 struct _TpTestsSimpleClient {
2626 TpBaseClient parent;
2727
2828 TpObserveChannelsContext *observe_ctx;
3030 TpHandleChannelsContext *handle_channels_ctx;
3131 };
3232
33 GType simple_client_get_type (void);
33 GType tp_tests_simple_client_get_type (void);
3434
3535 /* TYPE MACROS */
36 #define SIMPLE_TYPE_CLIENT \
37 (simple_client_get_type ())
38 #define SIMPLE_CLIENT(obj) \
39 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_CLIENT, \
40 SimpleClient))
41 #define SIMPLE_CLIENT_CLASS(klass) \
42 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_CLIENT, \
43 SimpleClientClass))
36 #define TP_TESTS_TYPE_SIMPLE_CLIENT \
37 (tp_tests_simple_client_get_type ())
38 #define TP_TESTS_SIMPLE_CLIENT(obj) \
39 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CLIENT, \
40 TpTestsSimpleClient))
41 #define TP_TESTS_SIMPLE_CLIENT_CLASS(klass) \
42 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CLIENT, \
43 TpTestsSimpleClientClass))
4444 #define SIMPLE_IS_CLIENT(obj) \
45 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_CLIENT))
45 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CLIENT))
4646 #define SIMPLE_IS_CLIENT_CLASS(klass) \
47 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_CLIENT))
48 #define SIMPLE_CLIENT_GET_CLASS(obj) \
49 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_CLIENT, \
50 SimpleClientClass))
47 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CLIENT))
48 #define TP_TESTS_SIMPLE_CLIENT_GET_CLASS(obj) \
49 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CLIENT, \
50 TpTestsSimpleClientClass))
5151
52 SimpleClient * simple_client_new (TpDBusDaemon *dbus_daemon,
52 TpTestsSimpleClient * tp_tests_simple_client_new (TpDBusDaemon *dbus_daemon,
5353 const gchar *name,
5454 gboolean uniquify_name);
5555
5656 G_END_DECLS
5757
58 #endif /* #ifndef __SIMPLE_CONN_H__ */
58 #endif /* #ifndef __TP_TESTS_SIMPLE_CONN_H__ */
2121 #include <telepathy-glib/interfaces.h>
2222 #include <telepathy-glib/util.h>
2323
24 G_DEFINE_TYPE_WITH_CODE (SimpleConnection,
25 simple_connection,
26 TP_TYPE_BASE_CONNECTION,
27 G_STMT_START { } G_STMT_END)
24 G_DEFINE_TYPE (TpTestsSimpleConnection, tp_tests_simple_connection,
25 TP_TYPE_BASE_CONNECTION);
2826
2927 /* type definition stuff */
3028
3432 N_PROPS
3533 };
3634
37 struct _SimpleConnectionPrivate
35 struct _TpTestsSimpleConnectionPrivate
3836 {
3937 gchar *account;
4038 guint connect_source;
4240 };
4341
4442 static void
45 simple_connection_init (SimpleConnection *self)
46 {
47 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SIMPLE_TYPE_CONNECTION,
48 SimpleConnectionPrivate);
43 tp_tests_simple_connection_init (TpTestsSimpleConnection *self)
44 {
45 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
46 TP_TESTS_TYPE_SIMPLE_CONNECTION, TpTestsSimpleConnectionPrivate);
4947 }
5048
5149 static void
5452 GValue *value,
5553 GParamSpec *spec)
5654 {
57 SimpleConnection *self = SIMPLE_CONNECTION (object);
55 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object);
5856
5957 switch (property_id) {
6058 case PROP_ACCOUNT:
7169 const GValue *value,
7270 GParamSpec *spec)
7371 {
74 SimpleConnection *self = SIMPLE_CONNECTION (object);
72 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object);
7573
7674 switch (property_id) {
7775 case PROP_ACCOUNT:
8684 static void
8785 finalize (GObject *object)
8886 {
89 SimpleConnection *self = SIMPLE_CONNECTION (object);
87 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object);
9088
9189 if (self->priv->connect_source != 0)
9290 {
10098
10199 g_free (self->priv->account);
102100
103 G_OBJECT_CLASS (simple_connection_parent_class)->finalize (object);
101 G_OBJECT_CLASS (tp_tests_simple_connection_parent_class)->finalize (object);
104102 }
105103
106104 static gchar *
107105 get_unique_connection_name (TpBaseConnection *conn)
108106 {
109 SimpleConnection *self = SIMPLE_CONNECTION (conn);
107 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn);
110108
111109 return g_strdup (self->priv->account);
112110 }
113111
114112 static gchar *
115 simple_normalize_contact (TpHandleRepoIface *repo,
113 tp_tests_simple_normalize_contact (TpHandleRepoIface *repo,
116114 const gchar *id,
117115 gpointer context,
118116 GError **error)
139137 TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES])
140138 {
141139 repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new
142 (TP_HANDLE_TYPE_CONTACT, simple_normalize_contact, NULL);
140 (TP_HANDLE_TYPE_CONTACT, tp_tests_simple_normalize_contact, NULL);
143141 }
144142
145143 static GPtrArray *
149147 }
150148
151149 void
152 simple_connection_inject_disconnect (SimpleConnection *self)
150 tp_tests_simple_connection_inject_disconnect (TpTestsSimpleConnection *self)
153151 {
154152 tp_base_connection_change_status ((TpBaseConnection *) self,
155153 TP_CONNECTION_STATUS_DISCONNECTED,
159157 static gboolean
160158 pretend_connected (gpointer data)
161159 {
162 SimpleConnection *self = SIMPLE_CONNECTION (data);
160 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (data);
163161 TpBaseConnection *conn = (TpBaseConnection *) self;
164162 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn,
165163 TP_HANDLE_TYPE_CONTACT);
181179 start_connecting (TpBaseConnection *conn,
182180 GError **error)
183181 {
184 SimpleConnection *self = SIMPLE_CONNECTION (conn);
182 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn);
185183
186184 tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTING,
187185 TP_CONNECTION_STATUS_REASON_REQUESTED);
189187 /* In a real connection manager we'd ask the underlying implementation to
190188 * start connecting, then go to state CONNECTED when finished. Here there
191189 * isn't actually a connection, so we'll fake a connection process that
192 * takes half a second. */
193 self->priv->connect_source = g_timeout_add (500, pretend_connected, self);
190 * takes time. */
191 self->priv->connect_source = g_timeout_add (0, pretend_connected, self);
194192
195193 return TRUE;
196194 }
198196 static gboolean
199197 pretend_disconnected (gpointer data)
200198 {
201 SimpleConnection *self = SIMPLE_CONNECTION (data);
199 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (data);
202200
203201 tp_base_connection_finish_shutdown (TP_BASE_CONNECTION (data));
204202 self->priv->disconnect_source = 0;
208206 static void
209207 shut_down (TpBaseConnection *conn)
210208 {
211 SimpleConnection *self = SIMPLE_CONNECTION (conn);
209 TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn);
212210
213211 /* In a real connection manager we'd ask the underlying implementation to
214212 * start shutting down, then call this function when finished. Here there
215213 * isn't actually a connection, so we'll fake a disconnection process that
216 * takes half a second. */
217 self->priv->disconnect_source = g_timeout_add (500, pretend_disconnected,
214 * takes time. */
215 self->priv->disconnect_source = g_timeout_add (0, pretend_disconnected,
218216 conn);
219217 }
220218
221219 static void
222 simple_connection_class_init (SimpleConnectionClass *klass)
220 tp_tests_simple_connection_class_init (TpTestsSimpleConnectionClass *klass)
223221 {
224222 TpBaseConnectionClass *base_class =
225223 (TpBaseConnectionClass *) klass;
231229 object_class->get_property = get_property;
232230 object_class->set_property = set_property;
233231 object_class->finalize = finalize;
234 g_type_class_add_private (klass, sizeof (SimpleConnectionPrivate));
232 g_type_class_add_private (klass, sizeof (TpTestsSimpleConnectionPrivate));
235233
236234 base_class->create_handle_repos = create_handle_repos;
237235 base_class->get_unique_connection_name = get_unique_connection_name;
249247 }
250248
251249 void
252 simple_connection_set_identifier (SimpleConnection *self,
250 tp_tests_simple_connection_set_identifier (TpTestsSimpleConnection *self,
253251 const gchar *identifier)
254252 {
255253 TpBaseConnection *conn = (TpBaseConnection *) self;
263261 tp_base_connection_set_self_handle (conn, handle);
264262 tp_handle_unref (contact_repo, handle);
265263 }
264
265 TpTestsSimpleConnection *
266 tp_tests_simple_connection_new (const gchar *account,
267 const gchar *protocol)
268 {
269 return TP_TESTS_SIMPLE_CONNECTION (g_object_new (
270 TP_TESTS_TYPE_SIMPLE_CONNECTION,
271 "account", account,
272 "protocol", protocol,
273 NULL));
274 }
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef __SIMPLE_CONN_H__
12 #define __SIMPLE_CONN_H__
11 #ifndef __TP_TESTS_SIMPLE_CONN_H__
12 #define __TP_TESTS_SIMPLE_CONN_H__
1313
1414 #include <glib-object.h>
1515 #include <telepathy-glib/base-connection.h>
1616
1717 G_BEGIN_DECLS
1818
19 typedef struct _SimpleConnection SimpleConnection;
20 typedef struct _SimpleConnectionClass SimpleConnectionClass;
21 typedef struct _SimpleConnectionPrivate SimpleConnectionPrivate;
19 typedef struct _TpTestsSimpleConnection TpTestsSimpleConnection;
20 typedef struct _TpTestsSimpleConnectionClass TpTestsSimpleConnectionClass;
21 typedef struct _TpTestsSimpleConnectionPrivate TpTestsSimpleConnectionPrivate;
2222
23 struct _SimpleConnectionClass {
23 struct _TpTestsSimpleConnectionClass {
2424 TpBaseConnectionClass parent_class;
2525 };
2626
27 struct _SimpleConnection {
27 struct _TpTestsSimpleConnection {
2828 TpBaseConnection parent;
2929
30 SimpleConnectionPrivate *priv;
30 TpTestsSimpleConnectionPrivate *priv;
3131 };
3232
33 GType simple_connection_get_type (void);
33 GType tp_tests_simple_connection_get_type (void);
3434
3535 /* TYPE MACROS */
36 #define SIMPLE_TYPE_CONNECTION \
37 (simple_connection_get_type ())
38 #define SIMPLE_CONNECTION(obj) \
39 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_CONNECTION, \
40 SimpleConnection))
41 #define SIMPLE_CONNECTION_CLASS(klass) \
42 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_CONNECTION, \
43 SimpleConnectionClass))
44 #define SIMPLE_IS_CONNECTION(obj) \
45 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_CONNECTION))
46 #define SIMPLE_IS_CONNECTION_CLASS(klass) \
47 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_CONNECTION))
48 #define SIMPLE_CONNECTION_GET_CLASS(obj) \
49 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_CONNECTION, \
50 SimpleConnectionClass))
36 #define TP_TESTS_TYPE_SIMPLE_CONNECTION \
37 (tp_tests_simple_connection_get_type ())
38 #define TP_TESTS_SIMPLE_CONNECTION(obj) \
39 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION, \
40 TpTestsSimpleConnection))
41 #define TP_TESTS_SIMPLE_CONNECTION_CLASS(klass) \
42 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION, \
43 TpTestsSimpleConnectionClass))
44 #define TP_TESTS_SIMPLE_IS_CONNECTION(obj) \
45 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION))
46 #define TP_TESTS_SIMPLE_IS_CONNECTION_CLASS(klass) \
47 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION))
48 #define TP_TESTS_SIMPLE_CONNECTION_GET_CLASS(obj) \
49 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION, \
50 TpTestsSimpleConnectionClass))
51
52 TpTestsSimpleConnection * tp_tests_simple_connection_new (const gchar *account,
53 const gchar *protocol);
5154
5255 /* Cause "network events", for debugging/testing */
5356
54 void simple_connection_inject_disconnect (SimpleConnection *self);
57 void tp_tests_simple_connection_inject_disconnect (
58 TpTestsSimpleConnection *self);
5559
56 void simple_connection_set_identifier (SimpleConnection *self,
60 void tp_tests_simple_connection_set_identifier (TpTestsSimpleConnection *self,
5761 const gchar *identifier);
5862
5963 G_END_DECLS
6064
61 #endif /* #ifndef __SIMPLE_CONN_H__ */
65 #endif /* #ifndef __TP_TESTS_SIMPLE_CONN_H__ */
1919 #include "simple-conn.h"
2020 #include "tests/lib/util.h"
2121
22 G_DEFINE_TYPE (SimpleConnectionManager,
23 simple_connection_manager,
22 G_DEFINE_TYPE (TpTestsSimpleConnectionManager,
23 tp_tests_simple_connection_manager,
2424 TP_TYPE_BASE_CONNECTION_MANAGER)
2525
2626 /* type definition stuff */
2727
2828 static void
29 simple_connection_manager_init (SimpleConnectionManager *self)
29 tp_tests_simple_connection_manager_init (TpTestsSimpleConnectionManager *self)
3030 {
3131 }
3232
3434
3535 typedef struct {
3636 gchar *account;
37 } SimpleParams;
37 } TpTestsSimpleParams;
3838
3939 static const TpCMParamSpec simple_params[] = {
4040 { "account", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING,
4141 TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL,
42 G_STRUCT_OFFSET (SimpleParams, account),
42 G_STRUCT_OFFSET (TpTestsSimpleParams, account),
4343 tp_cm_param_filter_string_nonempty, NULL },
4444
4545 { NULL }
4848 static gpointer
4949 alloc_params (void)
5050 {
51 return g_slice_new0 (SimpleParams);
51 return g_slice_new0 (TpTestsSimpleParams);
5252 }
5353
5454 static void
5555 free_params (gpointer p)
5656 {
57 SimpleParams *params = p;
57 TpTestsSimpleParams *params = p;
5858
5959 g_free (params->account);
6060
61 g_slice_free (SimpleParams, params);
61 g_slice_free (TpTestsSimpleParams, params);
6262 }
6363
6464 static const TpCMProtocolSpec simple_protocols[] = {
7373 gpointer parsed_params,
7474 GError **error)
7575 {
76 SimpleParams *params = parsed_params;
77 SimpleConnection *conn = SIMPLE_CONNECTION
78 (test_object_new_static_class (SIMPLE_TYPE_CONNECTION,
76 TpTestsSimpleParams *params = parsed_params;
77 TpTestsSimpleConnection *conn = TP_TESTS_SIMPLE_CONNECTION (
78 tp_tests_object_new_static_class (TP_TESTS_TYPE_SIMPLE_CONNECTION,
7979 "account", params->account,
8080 "protocol", proto,
8181 NULL));
8484 }
8585
8686 static void
87 simple_connection_manager_class_init (SimpleConnectionManagerClass *klass)
87 tp_tests_simple_connection_manager_class_init (
88 TpTestsSimpleConnectionManagerClass *klass)
8889 {
8990 TpBaseConnectionManagerClass *base_class =
9091 (TpBaseConnectionManagerClass *) klass;
77 * notice and this notice are preserved.
88 */
99
10 #ifndef __SIMPLE_CONNECTION_MANAGER_H__
11 #define __SIMPLE_CONNECTION_MANAGER_H__
10 #ifndef __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__
11 #define __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__
1212
1313 #include <glib-object.h>
1414 #include <telepathy-glib/base-connection-manager.h>
1515
1616 G_BEGIN_DECLS
1717
18 typedef struct _SimpleConnectionManager SimpleConnectionManager;
19 typedef struct _SimpleConnectionManagerPrivate SimpleConnectionManagerPrivate;
20 typedef struct _SimpleConnectionManagerClass SimpleConnectionManagerClass;
21 typedef struct _SimpleConnectionManagerClassPrivate
22 SimpleConnectionManagerClassPrivate;
18 typedef struct _TpTestsSimpleConnectionManager TpTestsSimpleConnectionManager;
19 typedef struct _TpTestsSimpleConnectionManagerPrivate TpTestsSimpleConnectionManagerPrivate;
20 typedef struct _TpTestsSimpleConnectionManagerClass TpTestsSimpleConnectionManagerClass;
21 typedef struct _TpTestsSimpleConnectionManagerClassPrivate
22 TpTestsSimpleConnectionManagerClassPrivate;
2323
24 struct _SimpleConnectionManagerClass {
24 struct _TpTestsSimpleConnectionManagerClass {
2525 TpBaseConnectionManagerClass parent_class;
2626
27 SimpleConnectionManagerClassPrivate *priv;
27 TpTestsSimpleConnectionManagerClassPrivate *priv;
2828 };
2929
30 struct _SimpleConnectionManager {
30 struct _TpTestsSimpleConnectionManager {
3131 TpBaseConnectionManager parent;
3232
33 SimpleConnectionManagerPrivate *priv;
33 TpTestsSimpleConnectionManagerPrivate *priv;
3434 };
3535
36 GType simple_connection_manager_get_type (void);
36 GType tp_tests_simple_connection_manager_get_type (void);
3737
3838 /* TYPE MACROS */
39 #define SIMPLE_TYPE_CONNECTION_MANAGER \
40 (simple_connection_manager_get_type ())
41 #define SIMPLE_CONNECTION_MANAGER(obj) \
42 (G_TYPE_CHECK_INSTANCE_CAST((obj), SIMPLE_TYPE_CONNECTION_MANAGER, \
39 #define TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER \
40 (tp_tests_simpleconnection_manager_get_type ())
41 #define TP_TESTS_SIMPLE_CONNECTION_MANAGER(obj) \
42 (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \
4343 simpleConnectionManager))
44 #define SIMPLE_CONNECTION_MANAGER_CLASS(klass) \
45 (G_TYPE_CHECK_CLASS_CAST((klass), SIMPLE_TYPE_CONNECTION_MANAGER, \
46 SimpleConnectionManagerClass))
47 #define SIMPLE_IS_CONNECTION_MANAGER(obj) \
48 (G_TYPE_CHECK_INSTANCE_TYPE((obj), SIMPLE_TYPE_CONNECTION_MANAGER))
49 #define SIMPLE_IS_CONNECTION_MANAGER_CLASS(klass) \
50 (G_TYPE_CHECK_CLASS_TYPE((klass), SIMPLE_TYPE_CONNECTION_MANAGER))
51 #define SIMPLE_CONNECTION_MANAGER_GET_CLASS(obj) \
52 (G_TYPE_INSTANCE_GET_CLASS ((obj), SIMPLE_TYPE_CONNECTION_MANAGER, \
53 SimpleConnectionManagerClass))
44 #define TP_TESTS_SIMPLE_CONNECTION_MANAGER_CLASS(klass) \
45 (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \
46 TpTestsSimpleConnectionManagerClass))
47 #define TP_TESTS_SIMPLE_IS_CONNECTION_MANAGER(obj) \
48 (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER))
49 #define TP_TESTS_SIMPLE_IS_CONNECTION_MANAGER_CLASS(klass) \
50 (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER))
51 #define TP_TESTS_SIMPLE_CONNECTION_MANAGER_GET_CLASS(obj) \
52 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \
53 TpTestsSimpleConnectionManagerClass))
5454
5555 G_END_DECLS
5656
57 #endif /* #ifndef __SIMPLE_CONNECTION_MANAGER_H__*/
57 #endif /* #ifndef __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__*/
00 #include "stub-object.h"
11
2 G_DEFINE_TYPE (StubObject, stub_object, G_TYPE_OBJECT)
2 G_DEFINE_TYPE (TpTestsStubObject, tp_tests_stub_object, G_TYPE_OBJECT)
33
44 enum {
55 PROP_0,
4444 }
4545
4646 static void
47 stub_object_class_init (StubObjectClass *klass)
47 tp_tests_stub_object_class_init (TpTestsStubObjectClass *klass)
4848 {
4949 GObjectClass *object_class = (GObjectClass *) klass;
5050
6060 }
6161
6262 static void
63 stub_object_init (StubObject *self)
63 tp_tests_stub_object_init (TpTestsStubObject *self)
6464 {
6565 }
0 #ifndef TESTS_STUB_OBJECT_H
1 #define TESTS_STUB_OBJECT_H
0 #ifndef __TP_TESTS_STUB_OBJECT_H__
1 #define __TP_TESTS_STUB_OBJECT_H__
22
33 #include <glib-object.h>
44
5 typedef struct { GObject p; } StubObject;
6 typedef struct { GObjectClass p; } StubObjectClass;
5 typedef struct { GObject p; } TpTestsStubObject;
6 typedef struct { GObjectClass p; } TpTestsStubObjectClass;
77
8 GType stub_object_get_type (void);
8 GType tp_tests_stub_object_get_type (void);
99
10 #endif
10 #endif /* #ifndef __TP_TESTS_STUB_OBJECT_H__ */
2121 static void text_iface_init (gpointer iface, gpointer data);
2222 static void channel_iface_init (gpointer iface, gpointer data);
2323
24 G_DEFINE_TYPE_WITH_CODE (TestTextChannelGroup,
25 test_text_channel_group,
24 G_DEFINE_TYPE_WITH_CODE (TpTestsTextChannelGroup,
25 tp_tests_text_channel_group,
2626 G_TYPE_OBJECT,
2727 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init);
2828 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init);
3232 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
3333 tp_dbus_properties_mixin_iface_init))
3434
35 static const char *test_text_channel_group_interfaces[] = {
35 static const char *text_channel_group_interfaces[] = {
3636 TP_IFACE_CHANNEL_INTERFACE_GROUP,
3737 NULL
3838 };
5656 N_PROPS
5757 };
5858
59 struct _TestTextChannelGroupPrivate
59 struct _TpTestsTextChannelGroupPrivate
6060 {
6161 gchar *object_path;
6262
7474 const gchar *message,
7575 GError **error)
7676 {
77 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (obj);
77 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (obj);
7878 TpIntSet *add = tp_intset_new ();
7979
8080 tp_intset_add (add, handle);
8686 }
8787
8888 static void
89 test_text_channel_group_init (TestTextChannelGroup *self)
90 {
91 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TEST_TYPE_TEXT_CHANNEL_GROUP,
92 TestTextChannelGroupPrivate);
89 tp_tests_text_channel_group_init (TpTestsTextChannelGroup *self)
90 {
91 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
92 TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, TpTestsTextChannelGroupPrivate);
9393 }
9494
9595 static GObject *
9898 GObjectConstructParam *props)
9999 {
100100 GObject *object =
101 G_OBJECT_CLASS (test_text_channel_group_parent_class)->constructor (type,
101 G_OBJECT_CLASS (tp_tests_text_channel_group_parent_class)->constructor (type,
102102 n_props, props);
103 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (object);
103 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object);
104104 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles
105105 (self->conn, TP_HANDLE_TYPE_CONTACT);
106106 TpChannelGroupFlags flags = 0;
109109 tp_base_connection_get_dbus_daemon (self->conn),
110110 self->priv->object_path, self);
111111
112 tp_text_mixin_init (object, G_STRUCT_OFFSET (TestTextChannelGroup, text),
112 tp_text_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelGroup, text),
113113 contact_repo);
114114
115115 tp_text_mixin_set_message_types (object,
124124 if (self->priv->properties)
125125 flags |= TP_CHANNEL_GROUP_FLAG_PROPERTIES;
126126
127 tp_group_mixin_init (object, G_STRUCT_OFFSET (TestTextChannelGroup, group),
127 tp_group_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelGroup, group),
128128 contact_repo, self->conn->self_handle);
129129 tp_group_mixin_change_flags (object, flags, 0);
130130
137137 GValue *value,
138138 GParamSpec *pspec)
139139 {
140 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (object);
140 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object);
141141
142142 switch (property_id)
143143 {
172172 }
173173 break;
174174 case PROP_INTERFACES:
175 g_value_set_boxed (value, test_text_channel_group_interfaces);
175 g_value_set_boxed (value, text_channel_group_interfaces);
176176 break;
177177 case PROP_CONNECTION:
178178 g_value_set_object (value, self->conn);
195195 const GValue *value,
196196 GParamSpec *pspec)
197197 {
198 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (object);
198 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object);
199199
200200 switch (property_id)
201201 {
227227 static void
228228 dispose (GObject *object)
229229 {
230 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (object);
230 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object);
231231
232232 if (self->priv->disposed)
233233 return;
239239 tp_svc_channel_emit_closed (self);
240240 }
241241
242 ((GObjectClass *) test_text_channel_group_parent_class)->dispose (object);
242 ((GObjectClass *) tp_tests_text_channel_group_parent_class)->dispose (object);
243243 }
244244
245245 static void
246246 finalize (GObject *object)
247247 {
248 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (object);
248 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object);
249249
250250 g_free (self->priv->object_path);
251251
252252 tp_text_mixin_finalize (object);
253253 tp_group_mixin_finalize (object);
254254
255 ((GObjectClass *) test_text_channel_group_parent_class)->finalize (object);
256 }
257
258 static void
259 test_text_channel_group_class_init (TestTextChannelGroupClass *klass)
255 ((GObjectClass *) tp_tests_text_channel_group_parent_class)->finalize (object);
256 }
257
258 static void
259 tp_tests_text_channel_group_class_init (TpTestsTextChannelGroupClass *klass)
260260 {
261261 GObjectClass *object_class = (GObjectClass *) klass;
262262 GParamSpec *param_spec;
281281 { NULL }
282282 };
283283
284 g_type_class_add_private (klass, sizeof (TestTextChannelGroupPrivate));
284 g_type_class_add_private (klass, sizeof (TpTestsTextChannelGroupPrivate));
285285
286286 object_class->constructor = constructor;
287287 object_class->set_property = set_property;
351351 g_object_class_install_property (object_class, PROP_PROPERTIES, param_spec);
352352
353353 tp_text_mixin_class_init (object_class,
354 G_STRUCT_OFFSET (TestTextChannelGroupClass, text_class));
354 G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, text_class));
355355 tp_group_mixin_class_init (object_class,
356 G_STRUCT_OFFSET (TestTextChannelGroupClass, group_class), add_member,
356 G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, group_class), add_member,
357357 NULL);
358358
359359 klass->dbus_properties_class.interfaces = prop_interfaces;
360360 tp_dbus_properties_mixin_class_init (object_class,
361 G_STRUCT_OFFSET (TestTextChannelGroupClass, dbus_properties_class));
361 G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, dbus_properties_class));
362362
363363 tp_group_mixin_init_dbus_properties (object_class);
364364 }
367367 channel_close (TpSvcChannel *iface,
368368 DBusGMethodInvocation *context)
369369 {
370 TestTextChannelGroup *self = TEST_TEXT_CHANNEL_GROUP (iface);
370 TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (iface);
371371
372372 if (!self->priv->closed)
373373 {
398398 DBusGMethodInvocation *context)
399399 {
400400 tp_svc_channel_return_from_get_interfaces (context,
401 test_text_channel_group_interfaces);
401 text_channel_group_interfaces);
402402 }
403403
404404 static void
1818
1919 G_BEGIN_DECLS
2020
21 typedef struct _TestTextChannelGroup TestTextChannelGroup;
22 typedef struct _TestTextChannelGroupClass TestTextChannelGroupClass;
23 typedef struct _TestTextChannelGroupPrivate TestTextChannelGroupPrivate;
21 typedef struct _TpTestsTextChannelGroup TpTestsTextChannelGroup;
22 typedef struct _TpTestsTextChannelGroupClass TpTestsTextChannelGroupClass;
23 typedef struct _TpTestsTextChannelGroupPrivate TpTestsTextChannelGroupPrivate;
2424
25 GType test_text_channel_group_get_type (void);
25 GType tp_tests_text_channel_group_get_type (void);
2626
27 #define TEST_TYPE_TEXT_CHANNEL_GROUP \
28 (test_text_channel_group_get_type ())
29 #define TEST_TEXT_CHANNEL_GROUP(obj) \
30 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_TEXT_CHANNEL_GROUP, \
31 TestTextChannelGroup))
32 #define TEST_TEXT_CHANNEL_GROUP_CLASS(klass) \
33 (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_TEXT_CHANNEL_GROUP, \
34 TestTextChannelGroupClass))
27 #define TP_TESTS_TYPE_TEXT_CHANNEL_GROUP \
28 (tp_tests_text_channel_group_get_type ())
29 #define TP_TESTS_TEXT_CHANNEL_GROUP(obj) \
30 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \
31 TpTestsTextChannelGroup))
32 #define TP_TESTS_TEXT_CHANNEL_GROUP_CLASS(klass) \
33 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \
34 TpTestsTextChannelGroupClass))
3535 #define TEST_IS_TEXT_CHANNEL_GROUP(obj) \
36 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_TEXT_CHANNEL_GROUP))
36 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP))
3737 #define TEST_IS_TEXT_CHANNEL_GROUP_CLASS(klass) \
38 (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_TEXT_CHANNEL_GROUP))
39 #define TEST_TEXT_CHANNEL_GROUP_GET_CLASS(obj) \
40 (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_TEXT_CHANNEL_GROUP, \
41 TestTextChannelGroupClass))
38 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP))
39 #define TP_TESTS_TEXT_CHANNEL_GROUP_GET_CLASS(obj) \
40 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \
41 TpTestsTextChannelGroupClass))
4242
43 struct _TestTextChannelGroupClass {
43 struct _TpTestsTextChannelGroupClass {
4444 GObjectClass parent_class;
4545
4646 TpTextMixinClass text_class;
4848 TpDBusPropertiesMixinClass dbus_properties_class;
4949 };
5050
51 struct _TestTextChannelGroup {
51 struct _TpTestsTextChannelGroup {
5252 GObject parent;
5353
5454 TpBaseConnection *conn;
5656 TpTextMixin text;
5757 TpGroupMixin group;
5858
59 TestTextChannelGroupPrivate *priv;
59 TpTestsTextChannelGroupPrivate *priv;
6060 };
6161
6262 G_END_DECLS
2121 static void text_iface_init (gpointer iface, gpointer data);
2222 static void channel_iface_init (gpointer iface, gpointer data);
2323
24 G_DEFINE_TYPE_WITH_CODE (TestTextChannelNull,
25 test_text_channel_null,
24 G_DEFINE_TYPE_WITH_CODE (TpTestsTextChannelNull,
25 tp_tests_text_channel_null,
2626 G_TYPE_OBJECT,
2727 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init);
2828 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init);
2929 G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL))
3030
31 G_DEFINE_TYPE_WITH_CODE (TestPropsTextChannel,
32 test_props_text_channel,
33 TEST_TYPE_TEXT_CHANNEL_NULL,
31 G_DEFINE_TYPE_WITH_CODE (TpTestsPropsTextChannel,
32 tp_tests_props_text_channel,
33 TP_TESTS_TYPE_TEXT_CHANNEL_NULL,
3434 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
3535 tp_dbus_properties_mixin_iface_init))
3636
37 G_DEFINE_TYPE_WITH_CODE (TestPropsGroupTextChannel,
38 test_props_group_text_channel,
39 TEST_TYPE_PROPS_TEXT_CHANNEL,
37 G_DEFINE_TYPE_WITH_CODE (TpTestsPropsGroupTextChannel,
38 tp_tests_props_group_text_channel,
39 TP_TESTS_TYPE_PROPS_TEXT_CHANNEL,
4040 G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP,
4141 tp_group_mixin_iface_init))
4242
43 static const char *test_text_channel_null_interfaces[] = { NULL };
43 static const char *tp_tests_text_channel_null_interfaces[] = { NULL };
4444
4545 /* type definition stuff */
4646
5959 N_PROPS
6060 };
6161
62 struct _TestTextChannelNullPrivate
62 struct _TpTestsTextChannelNullPrivate
6363 {
6464 TpBaseConnection *conn;
6565 gchar *object_path;
7070 };
7171
7272 static void
73 test_text_channel_null_init (TestTextChannelNull *self)
74 {
75 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TEST_TYPE_TEXT_CHANNEL_NULL,
76 TestTextChannelNullPrivate);
77 }
78
79 static void
80 test_props_text_channel_init (TestPropsTextChannel *self)
73 tp_tests_text_channel_null_init (TpTestsTextChannelNull *self)
74 {
75 self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
76 TP_TESTS_TYPE_TEXT_CHANNEL_NULL, TpTestsTextChannelNullPrivate);
77 }
78
79 static void
80 tp_tests_props_text_channel_init (TpTestsPropsTextChannel *self)
8181 {
8282 self->dbus_property_interfaces_retrieved = g_hash_table_new (NULL, NULL);
8383 }
8888 GObjectConstructParam *props)
8989 {
9090 GObject *object =
91 G_OBJECT_CLASS (test_text_channel_null_parent_class)->constructor (type,
91 G_OBJECT_CLASS (tp_tests_text_channel_null_parent_class)->constructor (type,
9292 n_props, props);
93 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (object);
93 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object);
9494 TpHandleRepoIface *contact_repo = tp_base_connection_get_handles
9595 (self->priv->conn, TP_HANDLE_TYPE_CONTACT);
9696
100100 tp_base_connection_get_dbus_daemon (self->priv->conn),
101101 self->priv->object_path, self);
102102
103 tp_text_mixin_init (object, G_STRUCT_OFFSET (TestTextChannelNull, text),
103 tp_text_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelNull, text),
104104 contact_repo);
105105
106106 tp_text_mixin_set_message_types (object,
118118 GValue *value,
119119 GParamSpec *pspec)
120120 {
121 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (object);
121 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object);
122122
123123 switch (property_id)
124124 {
159159 }
160160 break;
161161 case PROP_INTERFACES:
162 g_value_set_boxed (value, test_text_channel_null_interfaces);
162 g_value_set_boxed (value, tp_tests_text_channel_null_interfaces);
163163 break;
164164 case PROP_CONNECTION:
165165 g_value_set_object (value, self->priv->conn);
176176 const GValue *value,
177177 GParamSpec *pspec)
178178 {
179 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (object);
179 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object);
180180
181181 switch (property_id)
182182 {
205205 }
206206
207207 void
208 test_text_channel_null_close (TestTextChannelNull *self)
208 tp_tests_text_channel_null_close (TpTestsTextChannelNull *self)
209209 {
210210 if (!self->priv->closed)
211211 {
219219 static void
220220 dispose (GObject *object)
221221 {
222 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (object);
222 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object);
223223
224224 if (self->priv->disposed)
225225 return;
226226
227227 self->priv->disposed = TRUE;
228 test_text_channel_null_close (self);
229
230 ((GObjectClass *) test_text_channel_null_parent_class)->dispose (object);
228 tp_tests_text_channel_null_close (self);
229
230 ((GObjectClass *) tp_tests_text_channel_null_parent_class)->dispose (object);
231231 }
232232
233233 static void
234234 finalize (GObject *object)
235235 {
236 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (object);
236 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object);
237237 TpHandleRepoIface *contact_handles = tp_base_connection_get_handles
238238 (self->priv->conn, TP_HANDLE_TYPE_CONTACT);
239239
242242
243243 tp_text_mixin_finalize (object);
244244
245 ((GObjectClass *) test_text_channel_null_parent_class)->finalize (object);
246 }
247
248 static void
249 test_text_channel_null_class_init (TestTextChannelNullClass *klass)
245 ((GObjectClass *) tp_tests_text_channel_null_parent_class)->finalize (object);
246 }
247
248 static void
249 tp_tests_text_channel_null_class_init (TpTestsTextChannelNullClass *klass)
250250 {
251251 GObjectClass *object_class = (GObjectClass *) klass;
252252 GParamSpec *param_spec;
253253
254 g_type_class_add_private (klass, sizeof (TestTextChannelNullPrivate));
254 g_type_class_add_private (klass, sizeof (TpTestsTextChannelNullPrivate));
255255
256256 object_class->constructor = constructor;
257257 object_class->set_property = set_property;
307307 g_object_class_install_property (object_class, PROP_REQUESTED, param_spec);
308308
309309 tp_text_mixin_class_init (object_class,
310 G_STRUCT_OFFSET (TestTextChannelNullClass, text_class));
311 }
312
313 static void
314 test_props_text_channel_getter_gobject_properties (GObject *object,
310 G_STRUCT_OFFSET (TpTestsTextChannelNullClass, text_class));
311 }
312
313 static void
314 tp_tests_props_text_channel_getter_gobject_properties (GObject *object,
315315 GQuark interface,
316316 GQuark name,
317317 GValue *value,
318318 gpointer getter_data)
319319 {
320 TestPropsTextChannel *self = TEST_PROPS_TEXT_CHANNEL (object);
320 TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object);
321321
322322 g_hash_table_insert (self->dbus_property_interfaces_retrieved,
323323 GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface));
329329 static void
330330 props_finalize (GObject *object)
331331 {
332 TestPropsTextChannel *self = TEST_PROPS_TEXT_CHANNEL (object);
332 TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object);
333333
334334 g_hash_table_unref (self->dbus_property_interfaces_retrieved);
335335
336 ((GObjectClass *) test_text_channel_null_parent_class)->finalize (object);
337 }
338
339 static void
340 test_props_text_channel_class_init (TestPropsTextChannelClass *klass)
336 ((GObjectClass *) tp_tests_text_channel_null_parent_class)->finalize (object);
337 }
338
339 static void
340 tp_tests_props_text_channel_class_init (TpTestsPropsTextChannelClass *klass)
341341 {
342342 GObjectClass *object_class = (GObjectClass *) klass;
343343 static TpDBusPropertiesMixinPropImpl channel_props[] = {
353353 };
354354 static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
355355 { TP_IFACE_CHANNEL,
356 test_props_text_channel_getter_gobject_properties,
356 tp_tests_props_text_channel_getter_gobject_properties,
357357 NULL,
358358 channel_props,
359359 },
364364
365365 klass->dbus_properties_class.interfaces = prop_interfaces;
366366 tp_dbus_properties_mixin_class_init (object_class,
367 G_STRUCT_OFFSET (TestPropsTextChannelClass, dbus_properties_class));
368 }
369
370 static void
371 test_props_group_text_channel_init (TestPropsGroupTextChannel *self)
367 G_STRUCT_OFFSET (TpTestsPropsTextChannelClass, dbus_properties_class));
368 }
369
370 static void
371 tp_tests_props_group_text_channel_init (TpTestsPropsGroupTextChannel *self)
372372 {
373373 }
374374
375375 static void
376376 group_constructed (GObject *self)
377377 {
378 TpBaseConnection *conn = TEST_TEXT_CHANNEL_NULL (self)->priv->conn;
378 TpBaseConnection *conn = TP_TESTS_TEXT_CHANNEL_NULL (self)->priv->conn;
379379 void (*chain_up) (GObject *) =
380 ((GObjectClass *) test_props_group_text_channel_parent_class)->constructed;
380 ((GObjectClass *) tp_tests_props_group_text_channel_parent_class)->constructed;
381381
382382 if (chain_up != NULL)
383383 chain_up (self);
384384
385385 tp_group_mixin_init (self,
386 G_STRUCT_OFFSET (TestPropsGroupTextChannel, group),
386 G_STRUCT_OFFSET (TpTestsPropsGroupTextChannel, group),
387387 tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT),
388388 tp_base_connection_get_self_handle (conn));
389389 tp_group_mixin_change_flags (self, TP_CHANNEL_GROUP_FLAG_PROPERTIES, 0);
411411 GValue *value,
412412 gpointer getter_data)
413413 {
414 TestPropsTextChannel *self = TEST_PROPS_TEXT_CHANNEL (object);
414 TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object);
415415
416416 g_hash_table_insert (self->dbus_property_interfaces_retrieved,
417417 GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface));
420420 }
421421
422422 static void
423 test_props_group_text_channel_class_init (TestPropsGroupTextChannelClass *klass)
423 tp_tests_props_group_text_channel_class_init (TpTestsPropsGroupTextChannelClass *klass)
424424 {
425425 GObjectClass *object_class = (GObjectClass *) klass;
426426 static TpDBusPropertiesMixinPropImpl group_props[] = {
437437 object_class->finalize = group_finalize;
438438
439439 tp_group_mixin_class_init (object_class,
440 G_STRUCT_OFFSET (TestPropsGroupTextChannelClass, group_class),
440 G_STRUCT_OFFSET (TpTestsPropsGroupTextChannelClass, group_class),
441441 dummy_add_remove_member,
442442 dummy_add_remove_member);
443443 tp_dbus_properties_mixin_implement_interface (object_class,
449449 channel_close (TpSvcChannel *iface,
450450 DBusGMethodInvocation *context)
451451 {
452 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (iface);
453
454 test_text_channel_null_close (self);
452 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
453
454 tp_tests_text_channel_null_close (self);
455455 tp_svc_channel_return_from_close (context);
456456 }
457457
459459 channel_get_channel_type (TpSvcChannel *iface,
460460 DBusGMethodInvocation *context)
461461 {
462 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (iface);
462 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
463463
464464 self->get_channel_type_called++;
465465
471471 channel_get_handle (TpSvcChannel *iface,
472472 DBusGMethodInvocation *context)
473473 {
474 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (iface);
474 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
475475
476476 self->get_handle_called++;
477477
483483 channel_get_interfaces (TpSvcChannel *iface,
484484 DBusGMethodInvocation *context)
485485 {
486 TestTextChannelNull *self = TEST_TEXT_CHANNEL_NULL (iface);
486 TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface);
487487
488488 self->get_interfaces_called++;
489489
490490 tp_svc_channel_return_from_get_interfaces (context,
491 test_text_channel_null_interfaces);
491 tp_tests_text_channel_null_interfaces);
492492 }
493493
494494 static void
88 * notice and this notice are preserved.
99 */
1010
11 #ifndef __TEST_TEXT_CHANNEL_NULL_H__
12 #define __TEST_TEXT_CHANNEL_NULL_H__
11 #ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__
12 #define __TP_TESTS_TEXT_CHANNEL_NULL_H__
1313
1414 #include <glib-object.h>
1515 #include <telepathy-glib/base-connection.h>
1818
1919 G_BEGIN_DECLS
2020
21 typedef struct _TestTextChannelNull TestTextChannelNull;
22 typedef struct _TestTextChannelNullClass TestTextChannelNullClass;
23 typedef struct _TestTextChannelNullPrivate TestTextChannelNullPrivate;
21 typedef struct _TpTestsTextChannelNull TpTestsTextChannelNull;
22 typedef struct _TpTestsTextChannelNullClass TpTestsTextChannelNullClass;
23 typedef struct _TpTestsTextChannelNullPrivate TpTestsTextChannelNullPrivate;
2424
25 GType test_text_channel_null_get_type (void);
25 GType tp_tests_text_channel_null_get_type (void);
2626
27 #define TEST_TYPE_TEXT_CHANNEL_NULL \
28 (test_text_channel_null_get_type ())
29 #define TEST_TEXT_CHANNEL_NULL(obj) \
30 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_TEXT_CHANNEL_NULL, \
31 TestTextChannelNull))
32 #define TEST_TEXT_CHANNEL_NULL_CLASS(klass) \
33 (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_TEXT_CHANNEL_NULL, \
34 TestTextChannelNullClass))
35 #define TEST_IS_TEXT_CHANNEL_NULL(obj) \
36 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_TEXT_CHANNEL_NULL))
37 #define TEST_IS_TEXT_CHANNEL_NULL_CLASS(klass) \
38 (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_TEXT_CHANNEL_NULL))
39 #define TEST_TEXT_CHANNEL_NULL_GET_CLASS(obj) \
40 (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_TEXT_CHANNEL_NULL, \
41 TestTextChannelNullClass))
27 #define TP_TESTS_TYPE_TEXT_CHANNEL_NULL \
28 (tp_tests_text_channel_null_get_type ())
29 #define TP_TESTS_TEXT_CHANNEL_NULL(obj) \
30 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \
31 TpTestsTextChannelNull))
32 #define TP_TESTS_TEXT_CHANNEL_NULL_CLASS(klass) \
33 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \
34 TpTestsTextChannelNullClass))
35 #define TP_TESTS_IS_TEXT_CHANNEL_NULL(obj) \
36 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL))
37 #define TP_TESTS_IS_TEXT_CHANNEL_NULL_CLASS(klass) \
38 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL))
39 #define TP_TESTS_TEXT_CHANNEL_NULL_GET_CLASS(obj) \
40 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \
41 TpTestsTextChannelNullClass))
4242
43 struct _TestTextChannelNullClass {
43 struct _TpTestsTextChannelNullClass {
4444 GObjectClass parent_class;
4545
4646 TpTextMixinClass text_class;
4747 };
4848
49 struct _TestTextChannelNull {
49 struct _TpTestsTextChannelNull {
5050 GObject parent;
5151 TpTextMixin text;
5252
5454 guint get_interfaces_called;
5555 guint get_channel_type_called;
5656
57 TestTextChannelNullPrivate *priv;
57 TpTestsTextChannelNullPrivate *priv;
5858 };
5959
6060 /* Subclass with D-Bus properties */
6161
62 typedef struct _TestPropsTextChannel TestPropsTextChannel;
63 typedef struct _TestPropsTextChannelClass TestPropsTextChannelClass;
62 typedef struct _TestPropsTextChannel TpTestsPropsTextChannel;
63 typedef struct _TestPropsTextChannelClass TpTestsPropsTextChannelClass;
6464
6565 struct _TestPropsTextChannel {
66 TestTextChannelNull parent;
66 TpTestsTextChannelNull parent;
6767
6868 GHashTable *dbus_property_interfaces_retrieved;
6969 };
7070
7171 struct _TestPropsTextChannelClass {
72 TestTextChannelNullClass parent;
72 TpTestsTextChannelNullClass parent;
7373
7474 TpDBusPropertiesMixinClass dbus_properties_class;
7575 };
7676
77 GType test_props_text_channel_get_type (void);
77 GType tp_tests_props_text_channel_get_type (void);
7878
79 #define TEST_TYPE_PROPS_TEXT_CHANNEL \
80 (test_props_text_channel_get_type ())
81 #define TEST_PROPS_TEXT_CHANNEL(obj) \
82 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_PROPS_TEXT_CHANNEL, \
83 TestPropsTextChannel))
84 #define TEST_PROPS_TEXT_CHANNEL_CLASS(klass) \
85 (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_PROPS_TEXT_CHANNEL, \
86 TestPropsTextChannelClass))
87 #define TEST_IS_PROPS_TEXT_CHANNEL(obj) \
88 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_PROPS_TEXT_CHANNEL))
89 #define TEST_IS_PROPS_TEXT_CHANNEL_CLASS(klass) \
90 (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_PROPS_TEXT_CHANNEL))
91 #define TEST_PROPS_TEXT_CHANNEL_GET_CLASS(obj) \
92 (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_PROPS_TEXT_CHANNEL, \
93 TestPropsTextChannelClass))
79 #define TP_TESTS_TYPE_PROPS_TEXT_CHANNEL \
80 (tp_tests_props_text_channel_get_type ())
81 #define TP_TESTS_PROPS_TEXT_CHANNEL(obj) \
82 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \
83 TpTestsPropsTextChannel))
84 #define TP_TESTS_PROPS_TEXT_CHANNEL_CLASS(klass) \
85 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \
86 TpTestsPropsTextChannelClass))
87 #define TP_TESTS_IS_PROPS_TEXT_CHANNEL(obj) \
88 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL))
89 #define TP_TESTS_IS_PROPS_TEXT_CHANNEL_CLASS(klass) \
90 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL))
91 #define TP_TESTS_PROPS_TEXT_CHANNEL_GET_CLASS(obj) \
92 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \
93 TpTestsPropsTextChannelClass))
9494
9595 /* Subclass with D-Bus properties and Group */
9696
97 typedef struct _TestPropsGroupTextChannel TestPropsGroupTextChannel;
98 typedef struct _TestPropsGroupTextChannelClass TestPropsGroupTextChannelClass;
97 typedef struct _TestPropsGroupTextChannel TpTestsPropsGroupTextChannel;
98 typedef struct _TestPropsGroupTextChannelClass TpTestsPropsGroupTextChannelClass;
9999
100100 struct _TestPropsGroupTextChannel {
101 TestPropsTextChannel parent;
101 TpTestsPropsTextChannel parent;
102102
103103 TpGroupMixin group;
104104 };
105105
106106 struct _TestPropsGroupTextChannelClass {
107 TestPropsTextChannelClass parent;
107 TpTestsPropsTextChannelClass parent;
108108
109109 TpGroupMixinClass group_class;
110110 };
111111
112 GType test_props_group_text_channel_get_type (void);
112 GType tp_tests_props_group_text_channel_get_type (void);
113113
114 #define TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL \
115 (test_props_group_text_channel_get_type ())
116 #define TEST_PROPS_GROUP_TEXT_CHANNEL(obj) \
117 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
118 TestPropsGroupTextChannel))
119 #define TEST_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \
120 (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
121 TestPropsGroupTextChannelClass))
122 #define TEST_IS_PROPS_GROUP_TEXT_CHANNEL(obj) \
123 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL))
124 #define TEST_IS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \
125 (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL))
126 #define TEST_PROPS_GROUP_TEXT_CHANNEL_GET_CLASS(obj) \
127 (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
128 TestPropsGroupTextChannelClass))
114 #define TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL \
115 (tp_tests_props_group_text_channel_get_type ())
116 #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL(obj) \
117 (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
118 TpTestsPropsGroupTextChannel))
119 #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \
120 (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
121 TpTestsPropsGroupTextChannelClass))
122 #define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL(obj) \
123 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL))
124 #define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \
125 (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL))
126 #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_GET_CLASS(obj) \
127 (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \
128 TpTestsPropsGroupTextChannelClass))
129129
130 void test_text_channel_null_close (TestTextChannelNull *self);
130 void tp_tests_text_channel_null_close (TpTestsTextChannelNull *self);
131131
132132 G_END_DECLS
133133
134 #endif /* #ifndef __TEST_TEXT_CHANNEL_NULL_H__ */
134 #endif /* #ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__ */
1010 #include "tests/lib/util.h"
1111
1212 void
13 test_proxy_run_until_prepared (gpointer proxy,
13 tp_tests_proxy_run_until_prepared (gpointer proxy,
1414 const GQuark *features)
1515 {
1616 GError *error = NULL;
1717
18 test_proxy_run_until_prepared_or_failed (proxy, features, &error);
18 tp_tests_proxy_run_until_prepared_or_failed (proxy, features, &error);
1919 g_assert_no_error (error);
2020 }
2121
3030 }
3131
3232 gboolean
33 test_proxy_run_until_prepared_or_failed (gpointer proxy,
33 tp_tests_proxy_run_until_prepared_or_failed (gpointer proxy,
3434 const GQuark *features,
3535 GError **error)
3636 {
4646 return tp_proxy_prepare_finish (proxy, result, error);
4747 }
4848
49 static void
50 conn_ready_cb (TpConnection *conn G_GNUC_UNUSED,
51 const GError *error,
52 gpointer user_data)
53 {
54 GMainLoop *loop = user_data;
55
56 test_assert_no_error (error);
57 g_main_loop_quit (loop);
58 }
59
60 void
61 test_connection_run_until_ready (TpConnection *conn)
62 {
63 GMainLoop *loop = g_main_loop_new (NULL, FALSE);
64
65 if (tp_connection_is_ready (conn))
66 return;
67
68 tp_connection_call_when_ready (conn, conn_ready_cb, loop);
69 g_main_loop_run (loop);
70 g_main_loop_unref (loop);
71 }
72
73 typedef struct {
74 GMainLoop *loop;
75 GError **error;
76 } NotReadyCtx;
77
78 static void
79 cm_not_ready_cb (TpConnectionManager *cm G_GNUC_UNUSED,
80 const GError *error,
81 gpointer user_data,
82 GObject *weak_object G_GNUC_UNUSED)
83 {
84 NotReadyCtx *ctx = user_data;
85
86 g_assert (error != NULL);
87
88 if (ctx->error != NULL)
89 {
90 *(ctx->error) = g_error_copy (error);
91 }
92
93 g_main_loop_quit (ctx->loop);
94 }
95
96 void
97 test_connection_manager_run_until_readying_fails (TpConnectionManager *cm,
98 GError **error)
99 {
100 NotReadyCtx ctx = { NULL, error };
101 const GError *invalidated;
102
103 g_return_if_fail (error == NULL || *error == NULL);
104 g_return_if_fail (!tp_connection_manager_is_ready (cm));
105
106 invalidated = tp_proxy_get_invalidated (cm);
107
108 if (invalidated != NULL)
109 {
110 if (error != NULL)
111 *error = g_error_copy (invalidated);
112
113 return;
114 }
115
116 ctx.loop = g_main_loop_new (NULL, FALSE);
117
118 tp_connection_manager_call_when_ready (cm, cm_not_ready_cb, &ctx, NULL,
119 NULL);
120 g_main_loop_run (ctx.loop);
121 g_main_loop_unref (ctx.loop);
122 }
123
124 static void
125 cm_ready_cb (TpConnectionManager *cm G_GNUC_UNUSED,
126 const GError *error,
127 gpointer user_data,
128 GObject *weak_object G_GNUC_UNUSED)
129 {
130 GMainLoop *loop = user_data;
131
132 test_assert_no_error (error);
133 g_main_loop_quit (loop);
134 }
135
136 void
137 test_connection_manager_run_until_ready (TpConnectionManager *cm)
138 {
139 GMainLoop *loop = g_main_loop_new (NULL, FALSE);
140
141 if (tp_connection_manager_is_ready (cm))
142 return;
143
144 tp_connection_manager_call_when_ready (cm, cm_ready_cb, loop, NULL,
145 NULL);
146 g_main_loop_run (loop);
147 g_main_loop_unref (loop);
148 }
149
15049 TpDBusDaemon *
151 test_dbus_daemon_dup_or_die (void)
50 tp_tests_dbus_daemon_dup_or_die (void)
15251 {
15352 TpDBusDaemon *d = tp_dbus_daemon_dup (NULL);
15453
17473 }
17574
17675 void
177 test_proxy_run_until_dbus_queue_processed (gpointer proxy)
76 tp_tests_proxy_run_until_dbus_queue_processed (gpointer proxy)
17877 {
17978 GMainLoop *loop = g_main_loop_new (NULL, FALSE);
18079
201100 {
202101 HandleRequestResult *result = user_data;
203102
204 test_assert_no_error (error);
103 g_assert_no_error ((GError *) error);
205104 g_assert_cmpuint (n_handles, ==, 1);
206105 result->handle = handles[0];
207106 }
215114 }
216115
217116 TpHandle
218 test_connection_run_request_contact_handle (TpConnection *connection,
117 tp_tests_connection_run_request_contact_handle (TpConnection *connection,
219118 const gchar *id)
220119 {
221120 HandleRequestResult result = { g_main_loop_new (NULL, FALSE), 0 };
229128 }
230129
231130 void
232 _test_assert_no_error (const GError *error,
233 const char *file,
234 int line)
235 {
236 if (error != NULL)
237 {
238 g_error ("%s:%d:%s: code %u: %s",
239 file, line, g_quark_to_string (error->domain),
240 error->code, error->message);
241 }
242 }
243
244 void
245131 _test_assert_empty_strv (const char *file,
246132 int line,
247133 gconstpointer strv)
265151 }
266152
267153 void
268 _test_assert_strv_equals (const char *file,
154 _tp_tests_assert_strv_equals (const char *file,
269155 int line,
270156 const char *expected_desc,
271157 gconstpointer expected_strv,
303189 }
304190
305191 void
306 test_create_and_connect_conn (GType conn_type,
192 tp_tests_create_and_connect_conn (GType conn_type,
307193 const gchar *account,
308194 TpBaseConnection **service_conn,
309195 TpConnection **client_conn)
312198 gchar *name;
313199 gchar *conn_path;
314200 GError *error = NULL;
201 GQuark conn_features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
315202
316203 g_assert (service_conn != NULL);
317204 g_assert (client_conn != NULL);
318205
319 dbus = test_dbus_daemon_dup_or_die ();
320
321 *service_conn = test_object_new_static_class (
206 dbus = tp_tests_dbus_daemon_dup_or_die ();
207
208 *service_conn = tp_tests_object_new_static_class (
322209 conn_type,
323210 "account", account,
324211 "protocol", "simple",
327214
328215 g_assert (tp_base_connection_register (*service_conn, "simple",
329216 &name, &conn_path, &error));
330 test_assert_no_error (error);
217 g_assert_no_error (error);
331218
332219 *client_conn = tp_connection_new (dbus, name, conn_path,
333220 &error);
334221 g_assert (*client_conn != NULL);
335 test_assert_no_error (error);
222 g_assert_no_error (error);
336223
337224 tp_cli_connection_call_connect (*client_conn, -1, NULL, NULL, NULL, NULL);
338 test_connection_run_until_ready (*client_conn);
225 tp_tests_proxy_run_until_prepared (*client_conn, conn_features);
339226
340227 g_free (name);
341228 g_free (conn_path);
346233 /* This object exists solely so that tests/tests.supp can ignore "leaked"
347234 * classes. */
348235 gpointer
349 test_object_new_static_class (GType type,
236 tp_tests_object_new_static_class (GType type,
350237 ...)
351238 {
352239 va_list ap;
77 * notice and this notice are preserved.
88 */
99
10 #ifndef TEST_LIB_UTIL_H
11 #define TEST_LIB_UTIL_H
10 #ifndef __TP_TESTS_LIB_UTIL_H__
11 #define __TP_TESTS_LIB_UTIL_H__
1212
1313 #include <telepathy-glib/telepathy-glib.h>
1414 #include <telepathy-glib/base-connection.h>
1515
16 TpDBusDaemon *test_dbus_daemon_dup_or_die (void);
16 TpDBusDaemon *tp_tests_dbus_daemon_dup_or_die (void);
1717
18 void test_proxy_run_until_dbus_queue_processed (gpointer proxy);
18 void tp_tests_proxy_run_until_dbus_queue_processed (gpointer proxy);
1919
20 #define test_connection_run_until_dbus_queue_processed(c) \
21 (test_proxy_run_until_dbus_queue_processed (c))
22
23 TpHandle test_connection_run_request_contact_handle (TpConnection *connection,
20 TpHandle tp_tests_connection_run_request_contact_handle (
21 TpConnection *connection,
2422 const gchar *id);
2523
26 void test_proxy_run_until_prepared (gpointer proxy,
24 void tp_tests_proxy_run_until_prepared (gpointer proxy,
2725 const GQuark *features);
28 gboolean test_proxy_run_until_prepared_or_failed (gpointer proxy,
26 gboolean tp_tests_proxy_run_until_prepared_or_failed (gpointer proxy,
2927 const GQuark *features,
3028 GError **error);
31
32 void test_connection_run_until_ready (TpConnection *conn);
33 void test_connection_manager_run_until_ready (TpConnectionManager *cm);
34 void test_connection_manager_run_until_readying_fails (TpConnectionManager *cm,
35 GError **error);
36
37 #define test_assert_no_error(e) _test_assert_no_error (e, __FILE__, __LINE__)
38
39 void _test_assert_no_error (const GError *error, const char *file, int line);
4029
4130 #define test_assert_empty_strv(strv) \
4231 _test_assert_empty_strv (__FILE__, __LINE__, strv)
4332 void _test_assert_empty_strv (const char *file, int line, gconstpointer strv);
4433
45 #define test_assert_strv_equals(actual, expected) \
46 _test_assert_strv_equals (__FILE__, __LINE__, \
34 #define tp_tests_assert_strv_equals(actual, expected) \
35 _tp_tests_assert_strv_equals (__FILE__, __LINE__, \
4736 #actual, actual, \
4837 #expected, expected)
49 void _test_assert_strv_equals (const char *file, int line,
38 void _tp_tests_assert_strv_equals (const char *file, int line,
5039 const char *actual_desc, gconstpointer actual_strv,
5140 const char *expected_desc, gconstpointer expected_strv);
5241
53 #define test_clear_object(op) \
54 G_STMT_START \
55 { \
56 gpointer _test_clear_object_obj = *(op); \
57 \
58 *(op) = NULL; \
59 \
60 if (_test_clear_object_obj != NULL) \
61 g_object_unref (_test_clear_object_obj); \
62 } \
63 G_STMT_END
64
65
66 void test_create_and_connect_conn (GType conn_type,
42 void tp_tests_create_and_connect_conn (GType conn_type,
6743 const gchar *account,
6844 TpBaseConnection **service_conn,
6945 TpConnection **client_conn);
7046
71 gpointer test_object_new_static_class (GType type,
47 gpointer tp_tests_object_new_static_class (GType type,
7248 ...) G_GNUC_NULL_TERMINATED;
7349
74 #endif
50 #endif /* #ifndef __TP_TESTS_LIB_UTIL_H__ */
6161 tp_debug_set_flags ("all");
6262
6363 test->caught = 0;
64 test->observer = test_object_new_static_class (stub_object_get_type (),
65 NULL);
64 test->observer = tp_tests_object_new_static_class (
65 tp_tests_stub_object_get_type (), NULL);
6666 g_object_set_data (test->observer, DATA_KEY, test);
67 test->emitter = test_object_new_static_class (stub_object_get_type (),
68 NULL);
67 test->emitter = tp_tests_object_new_static_class (
68 tp_tests_stub_object_get_type (), NULL);
6969 }
7070
7171 static void
7272 teardown (Test *test,
7373 gconstpointer data)
7474 {
75 test_clear_object (&test->emitter);
76 test_clear_object (&test->observer);
75 tp_clear_object (&test->emitter);
76 tp_clear_object (&test->observer);
7777 }
7878
7979 static void
105105 G_CALLBACK (increment_caught), test->observer, 0);
106106 g_object_notify (test->emitter, "name");
107107 g_object_notify (test->emitter, "name");
108 test_clear_object (&test->observer);
108 tp_clear_object (&test->observer);
109109 g_object_notify (test->emitter, "name");
110110 g_assert_cmpuint (test->caught, ==, 2);
111111 }
118118 G_CALLBACK (increment_caught), test->observer, 0);
119119 g_object_notify (test->emitter, "name");
120120 g_object_notify (test->emitter, "name");
121 test_clear_object (&test->emitter);
121 tp_clear_object (&test->emitter);
122122 g_assert_cmpuint (test->caught, ==, 2);
123123 }
124124
148148 g_object_notify (test->emitter, "name");
149149 g_object_notify (test->emitter, "name");
150150 g_signal_handler_disconnect (test->emitter, id);
151 test_clear_object (&test->observer);
151 tp_clear_object (&test->observer);
152152 g_object_notify (test->emitter, "name");
153153 g_assert_cmpuint (test->caught, ==, 2);
154154 }
7777 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
7878 CPP = @CPP@
7979 CPPFLAGS = @CPPFLAGS@
80 CXX = @CXX@
81 CXXCPP = @CXXCPP@
82 CXXDEPMODE = @CXXDEPMODE@
83 CXXFLAGS = @CXXFLAGS@
8084 CYGPATH_W = @CYGPATH_W@
8185 DBUS_CFLAGS = @DBUS_CFLAGS@
8286 DBUS_LIBS = @DBUS_LIBS@
164168 abs_top_builddir = @abs_top_builddir@
165169 abs_top_srcdir = @abs_top_srcdir@
166170 ac_ct_CC = @ac_ct_CC@
171 ac_ct_CXX = @ac_ct_CXX@
167172 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
168173 am__include = @am__include@
169174 am__leading_dot = @am__leading_dot@
0 /* Test that tp_clear_pointer is syntactically OK in C++
1 *
2 * Copyright © 2010 Collabora Ltd. <http://www.collabora.co.uk/>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 #include <glib.h>
20 #include <gio/gio.h>
21 #include <telepathy-glib/util.h>
22
23 int main (int argc, char **argv)
24 {
25 GObject *o;
26 GHashTable *h;
27
28 g_type_init ();
29
30 o = (GObject *) g_file_new_for_path ("/");
31 tp_clear_object (&o);
32
33 h = g_hash_table_new (NULL, NULL);
34 tp_clear_pointer (&h, (GDestroyNotify) g_hash_table_unref);
35
36 h = g_hash_table_new (NULL, NULL);
37 tp_clear_boxed (G_TYPE_HASH_TABLE, &h);
38
39 return 0;
40 }
7474 COVERAGE_CFLAGS = @COVERAGE_CFLAGS@
7575 CPP = @CPP@
7676 CPPFLAGS = @CPPFLAGS@
77 CXX = @CXX@
78 CXXCPP = @CXXCPP@
79 CXXDEPMODE = @CXXDEPMODE@
80 CXXFLAGS = @CXXFLAGS@
7781 CYGPATH_W = @CYGPATH_W@
7882 DBUS_CFLAGS = @DBUS_CFLAGS@
7983 DBUS_LIBS = @DBUS_LIBS@
161165 abs_top_builddir = @abs_top_builddir@
162166 abs_top_srcdir = @abs_top_srcdir@
163167 ac_ct_CC = @ac_ct_CC@
168 ac_ct_CXX = @ac_ct_CXX@
164169 ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
165170 am__include = @am__include@
166171 am__leading_dot = @am__leading_dot@