1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/*
* TpChannel - proxy for a Telepathy channel (internals)
*
* Copyright (C) 2007-2008 Collabora Ltd. <http://www.collabora.co.uk/>
* Copyright (C) 2007-2008 Nokia Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef TP_CHANNEL_INTERNAL_H
#define TP_CHANNEL_INTERNAL_H
#include <telepathy-glib/channel.h>
G_BEGIN_DECLS
typedef void (*TpChannelProc) (TpChannel *self);
typedef struct {
TpHandle actor;
TpChannelGroupChangeReason reason;
gchar *message;
} LocalPendingInfo;
struct _TpChannelPrivate {
gulong conn_invalidated_id;
TpConnection *connection;
/* GQueue of TpChannelProc */
GQueue *introspect_needed;
GQuark channel_type;
TpHandleType handle_type;
TpHandle handle;
gchar *identifier;
/* owned string (iface + "." + prop) => slice-allocated GValue */
GHashTable *channel_properties;
/* Set until introspection discovers which to use; both NULL after one has
* been disconnected.
*/
TpProxySignalConnection *members_changed_sig;
TpProxySignalConnection *members_changed_detailed_sig;
TpHandle group_self_handle;
TpChannelGroupFlags group_flags;
/* NULL if members not discovered yet */
TpIntset *group_members;
TpIntset *group_local_pending;
TpIntset *group_remote_pending;
/* (TpHandle => LocalPendingInfo), or NULL if members not discovered yet */
GHashTable *group_local_pending_info;
/* reason the self-handle left */
GError *group_remove_error /* implicitly zero-initialized */ ;
/* guint => guint, NULL if not discovered yet */
GHashTable *group_handle_owners;
/* NULL, or TpHandle => TpChannelChatState;
* if non-NULL, we're watching for ChatStateChanged */
GHashTable *chat_states;
/* These are really booleans, but gboolean is signed. Thanks, GLib */
/* channel-ready */
unsigned ready:1;
/* Enough method calls have succeeded that we believe that the channel
* exists (implied by ready) */
unsigned exists:1;
/* GetGroupFlags has returned */
unsigned have_group_flags:1;
};
/* channel.c internals */
void _tp_channel_continue_introspection (TpChannel *self);
void _tp_channel_abort_introspection (TpChannel *self,
const gchar *debug,
const GError *error);
/* channel-group.c internals */
void _tp_channel_get_group_properties (TpChannel *self);
G_END_DECLS
#endif
|