|
Evan@653
|
1 |
/** |
|
Evan@653
|
2 |
* @file jabber.h |
|
Evan@653
|
3 |
* |
|
Evan@653
|
4 |
* purple |
|
Evan@653
|
5 |
* |
|
Evan@653
|
6 |
* Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com> |
|
Evan@653
|
7 |
* |
|
Evan@653
|
8 |
* This program is free software; you can redistribute it and/or modify |
|
Evan@653
|
9 |
* it under the terms of the GNU General Public License as published by |
|
Evan@653
|
10 |
* the Free Software Foundation; either version 2 of the License, or |
|
Evan@653
|
11 |
* (at your option) any later version. |
|
Evan@653
|
12 |
* |
|
Evan@653
|
13 |
* This program is distributed in the hope that it will be useful, |
|
Evan@653
|
14 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
Evan@653
|
15 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
Evan@653
|
16 |
* GNU General Public License for more details. |
|
Evan@653
|
17 |
* |
|
Evan@653
|
18 |
* You should have received a copy of the GNU General Public License |
|
Evan@653
|
19 |
* along with this program; if not, write to the Free Software |
|
Evan@653
|
20 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
Evan@653
|
21 |
*/ |
|
zacw@1759
|
22 |
#ifndef PURPLE_JABBER_H_ |
|
zacw@1759
|
23 |
#define PURPLE_JABBER_H_ |
|
Evan@653
|
24 |
|
|
Evan@653
|
25 |
typedef enum { |
|
Evan@653
|
26 |
JABBER_CAP_NONE = 0, |
|
zacw@2536
|
27 |
/* JABBER_CAP_XHTML = 1 << 0, */ |
|
zacw@2536
|
28 |
/* JABBER_CAP_COMPOSING = 1 << 1, */ |
|
Evan@653
|
29 |
JABBER_CAP_SI = 1 << 2, |
|
Evan@653
|
30 |
JABBER_CAP_SI_FILE_XFER = 1 << 3, |
|
Evan@653
|
31 |
JABBER_CAP_BYTESTREAMS = 1 << 4, |
|
Evan@653
|
32 |
JABBER_CAP_IBB = 1 << 5, |
|
Evan@653
|
33 |
JABBER_CAP_CHAT_STATES = 1 << 6, |
|
Evan@653
|
34 |
JABBER_CAP_IQ_SEARCH = 1 << 7, |
|
Evan@653
|
35 |
JABBER_CAP_IQ_REGISTER = 1 << 8, |
|
Evan@653
|
36 |
|
|
Evan@653
|
37 |
/* Google Talk extensions: |
|
Evan@653
|
38 |
* http://code.google.com/apis/talk/jep_extensions/extensions.html |
|
Evan@653
|
39 |
*/ |
|
Evan@653
|
40 |
JABBER_CAP_GMAIL_NOTIFY = 1 << 9, |
|
Evan@653
|
41 |
JABBER_CAP_GOOGLE_ROSTER = 1 << 10, |
|
Evan@653
|
42 |
|
|
Evan@653
|
43 |
JABBER_CAP_PING = 1 << 11, |
|
Evan@653
|
44 |
JABBER_CAP_ADHOC = 1 << 12, |
|
Evan@653
|
45 |
JABBER_CAP_BLOCKING = 1 << 13, |
|
Evan@653
|
46 |
|
|
zacw@2489
|
47 |
JABBER_CAP_ITEMS = 1 << 14, |
|
zacw@2489
|
48 |
|
|
Evan@653
|
49 |
JABBER_CAP_RETRIEVED = 1 << 31 |
|
Evan@653
|
50 |
} JabberCapabilities; |
|
Evan@653
|
51 |
|
|
Evan@653
|
52 |
typedef struct _JabberStream JabberStream; |
|
Evan@653
|
53 |
|
|
Evan@653
|
54 |
#include <libxml/parser.h> |
|
Evan@653
|
55 |
#include <glib.h> |
|
Evan@653
|
56 |
#include "circbuffer.h" |
|
Evan@653
|
57 |
#include "connection.h" |
|
zacw@2489
|
58 |
#include "dnsquery.h" |
|
Evan@653
|
59 |
#include "dnssrv.h" |
|
zacw@1759
|
60 |
#include "media.h" |
|
zacw@1759
|
61 |
#include "mediamanager.h" |
|
Evan@653
|
62 |
#include "roomlist.h" |
|
Evan@653
|
63 |
#include "sslconn.h" |
|
Evan@653
|
64 |
|
|
zacw@1759
|
65 |
#include "iq.h" |
|
Evan@653
|
66 |
#include "jutil.h" |
|
Evan@653
|
67 |
#include "xmlnode.h" |
|
Evan@653
|
68 |
#include "buddy.h" |
|
zacw@2069
|
69 |
#include "bosh.h" |
|
Evan@653
|
70 |
|
|
Evan@653
|
71 |
#ifdef HAVE_CYRUS_SASL |
|
Evan@653
|
72 |
#include <sasl/sasl.h> |
|
Evan@653
|
73 |
#endif |
|
Evan@653
|
74 |
|
|
zacw@2069
|
75 |
#define CAPS0115_NODE "http://pidgin.im/" |
|
Evan@653
|
76 |
|
|
Evan@653
|
77 |
/* Index into attention_types list */ |
|
Evan@653
|
78 |
#define JABBER_BUZZ 0 |
|
Evan@653
|
79 |
|
|
zacw@2250
|
80 |
extern PurplePlugin *jabber_plugin; |
|
zacw@2250
|
81 |
|
|
Evan@653
|
82 |
typedef enum { |
|
Evan@653
|
83 |
JABBER_STREAM_OFFLINE, |
|
Evan@653
|
84 |
JABBER_STREAM_CONNECTING, |
|
Evan@653
|
85 |
JABBER_STREAM_INITIALIZING, |
|
Evan@653
|
86 |
JABBER_STREAM_INITIALIZING_ENCRYPTION, |
|
Evan@653
|
87 |
JABBER_STREAM_AUTHENTICATING, |
|
Evan@653
|
88 |
JABBER_STREAM_REINITIALIZING, |
|
Evan@653
|
89 |
JABBER_STREAM_CONNECTED |
|
Evan@653
|
90 |
} JabberStreamState; |
|
Evan@653
|
91 |
|
|
Evan@653
|
92 |
struct _JabberStream |
|
Evan@653
|
93 |
{ |
|
Evan@653
|
94 |
int fd; |
|
Evan@653
|
95 |
|
|
Evan@653
|
96 |
PurpleSrvQueryData *srv_query_data; |
|
Evan@653
|
97 |
|
|
Evan@653
|
98 |
xmlParserCtxt *context; |
|
Evan@653
|
99 |
xmlnode *current; |
|
Evan@653
|
100 |
|
|
Evan@653
|
101 |
enum { |
|
Evan@653
|
102 |
JABBER_PROTO_0_9, |
|
Evan@653
|
103 |
JABBER_PROTO_1_0 |
|
Evan@653
|
104 |
} protocol_version; |
|
Evan@653
|
105 |
enum { |
|
Evan@653
|
106 |
JABBER_AUTH_UNKNOWN, |
|
Evan@653
|
107 |
JABBER_AUTH_DIGEST_MD5, |
|
Evan@653
|
108 |
JABBER_AUTH_PLAIN, |
|
Evan@653
|
109 |
JABBER_AUTH_IQ_AUTH, |
|
Evan@653
|
110 |
JABBER_AUTH_CYRUS |
|
Evan@653
|
111 |
} auth_type; |
|
Evan@653
|
112 |
char *stream_id; |
|
Evan@653
|
113 |
JabberStreamState state; |
|
Evan@653
|
114 |
|
|
Evan@653
|
115 |
/* SASL authentication */ |
|
Evan@653
|
116 |
char *expected_rspauth; |
|
Evan@653
|
117 |
|
|
Evan@653
|
118 |
GHashTable *buddies; |
|
Evan@653
|
119 |
|
|
Evan@653
|
120 |
/* |
|
Evan@653
|
121 |
* This boolean was added to eliminate a heinous bug where we would |
|
Evan@653
|
122 |
* get into a loop with the server and move a buddy back and forth |
|
Evan@653
|
123 |
* from one group to another. |
|
Evan@653
|
124 |
* |
|
Evan@653
|
125 |
* The sequence goes something like this: |
|
Evan@653
|
126 |
* 1. Our resource and another resource both approve an authorization |
|
Evan@653
|
127 |
* request at the exact same time. We put the buddy in group A and |
|
Evan@653
|
128 |
* the other resource put the buddy in group B. |
|
Evan@653
|
129 |
* 2. The server receives the roster add for group B and sends us a |
|
Evan@653
|
130 |
* roster push. |
|
Evan@653
|
131 |
* 3. We receive this roster push and modify our local blist. This |
|
Evan@653
|
132 |
* triggers us to send a roster add for group B. |
|
Evan@653
|
133 |
* 4. The server recieves our earlier roster add for group A and sends |
|
Evan@653
|
134 |
* us a roster push. |
|
Evan@653
|
135 |
* 5. We receive this roster push and modify our local blist. This |
|
Evan@653
|
136 |
* triggers us to send a roster add for group A. |
|
Evan@653
|
137 |
* 6. The server receives our earlier roster add for group B and sends |
|
Evan@653
|
138 |
* us a roster push. |
|
Evan@653
|
139 |
* (repeat steps 3 through 6 ad infinitum) |
|
Evan@653
|
140 |
* |
|
Evan@653
|
141 |
* This boolean is used to short-circuit the sending of a roster add |
|
Evan@653
|
142 |
* when we receive a roster push. |
|
Evan@653
|
143 |
* |
|
Evan@653
|
144 |
* See these bug reports: |
|
Evan@653
|
145 |
* http://trac.adiumx.com/ticket/8834 |
|
Evan@653
|
146 |
* http://developer.pidgin.im/ticket/5484 |
|
Evan@653
|
147 |
* http://developer.pidgin.im/ticket/6188 |
|
Evan@653
|
148 |
*/ |
|
Evan@653
|
149 |
gboolean currently_parsing_roster_push; |
|
Evan@653
|
150 |
|
|
Evan@653
|
151 |
GHashTable *chats; |
|
Evan@653
|
152 |
GList *chat_servers; |
|
Evan@653
|
153 |
PurpleRoomlist *roomlist; |
|
Evan@653
|
154 |
GList *user_directories; |
|
Evan@653
|
155 |
|
|
Evan@653
|
156 |
GHashTable *iq_callbacks; |
|
Evan@653
|
157 |
int next_id; |
|
Evan@653
|
158 |
|
|
Evan@653
|
159 |
GList *bs_proxies; |
|
Evan@653
|
160 |
GList *oob_file_transfers; |
|
Evan@653
|
161 |
GList *file_transfers; |
|
Evan@653
|
162 |
|
|
Evan@653
|
163 |
time_t idle; |
|
zacw@2069
|
164 |
time_t old_idle; |
|
Evan@653
|
165 |
|
|
Evan@653
|
166 |
JabberID *user; |
|
Evan@2571
|
167 |
JabberBuddy *user_jb; |
|
Evan@2571
|
168 |
|
|
Evan@653
|
169 |
PurpleConnection *gc; |
|
Evan@653
|
170 |
PurpleSslConnection *gsc; |
|
Evan@653
|
171 |
|
|
Evan@653
|
172 |
gboolean registration; |
|
Evan@653
|
173 |
|
|
zacw@2069
|
174 |
char *initial_avatar_hash; |
|
Evan@653
|
175 |
char *avatar_hash; |
|
Evan@653
|
176 |
GSList *pending_avatar_requests; |
|
Evan@653
|
177 |
|
|
Evan@653
|
178 |
GSList *pending_buddy_info_requests; |
|
Evan@653
|
179 |
|
|
Evan@653
|
180 |
PurpleCircBuffer *write_buffer; |
|
Evan@653
|
181 |
guint writeh; |
|
Evan@653
|
182 |
|
|
Evan@653
|
183 |
gboolean reinit; |
|
Evan@653
|
184 |
|
|
Evan@653
|
185 |
JabberCapabilities server_caps; |
|
Evan@653
|
186 |
gboolean googletalk; |
|
Evan@653
|
187 |
char *server_name; |
|
Evan@653
|
188 |
|
|
Evan@653
|
189 |
char *gmail_last_time; |
|
Evan@653
|
190 |
char *gmail_last_tid; |
|
Evan@653
|
191 |
|
|
Evan@653
|
192 |
char *serverFQDN; |
|
Evan@653
|
193 |
|
|
Evan@653
|
194 |
/* OK, this stays at the end of the struct, so plugins can depend |
|
Evan@653
|
195 |
* on the rest of the stuff being in the right place |
|
Evan@653
|
196 |
*/ |
|
Evan@653
|
197 |
#ifdef HAVE_CYRUS_SASL |
|
Evan@653
|
198 |
sasl_conn_t *sasl; |
|
Evan@653
|
199 |
sasl_callback_t *sasl_cb; |
|
Evan@653
|
200 |
#else /* keep the struct the same size */ |
|
Evan@653
|
201 |
void *sasl; |
|
Evan@653
|
202 |
void *sasl_cb; |
|
Evan@653
|
203 |
#endif |
|
Evan@653
|
204 |
/* did someone say something about the end of the struct? */ |
|
Evan@653
|
205 |
#ifdef HAVE_CYRUS_SASL |
|
Evan@653
|
206 |
const char *current_mech; |
|
Evan@653
|
207 |
int auth_fail_count; |
|
Evan@653
|
208 |
#endif |
|
Evan@653
|
209 |
|
|
Evan@653
|
210 |
int sasl_state; |
|
Evan@653
|
211 |
int sasl_maxbuf; |
|
Evan@653
|
212 |
GString *sasl_mechs; |
|
Evan@653
|
213 |
|
|
Evan@653
|
214 |
gboolean unregistration; |
|
Evan@653
|
215 |
PurpleAccountUnregistrationCb unregistration_cb; |
|
Evan@653
|
216 |
void *unregistration_user_data; |
|
Evan@1427
|
217 |
|
|
Evan@653
|
218 |
gboolean vcard_fetched; |
|
Evan@2571
|
219 |
/* Timer at login to push updated avatar */ |
|
Evan@2571
|
220 |
guint vcard_timer; |
|
Evan@653
|
221 |
|
|
zacw@2069
|
222 |
/* Entity Capabilities hash */ |
|
zacw@2069
|
223 |
char *caps_hash; |
|
zacw@2069
|
224 |
|
|
Evan@653
|
225 |
/* does the local server support PEP? */ |
|
Evan@653
|
226 |
gboolean pep; |
|
Evan@653
|
227 |
|
|
Evan@653
|
228 |
/* Is Buzz enabled? */ |
|
Evan@653
|
229 |
gboolean allowBuzz; |
|
Evan@1427
|
230 |
|
|
Evan@653
|
231 |
/* A list of JabberAdHocCommands supported by the server */ |
|
Evan@653
|
232 |
GList *commands; |
|
Evan@1427
|
233 |
|
|
Evan@653
|
234 |
/* last presence update to check for differences */ |
|
Evan@653
|
235 |
JabberBuddyState old_state; |
|
Evan@653
|
236 |
char *old_msg; |
|
Evan@653
|
237 |
int old_priority; |
|
Evan@653
|
238 |
char *old_avatarhash; |
|
Evan@1427
|
239 |
|
|
Evan@653
|
240 |
/* same for user tune */ |
|
Evan@653
|
241 |
char *old_artist; |
|
Evan@653
|
242 |
char *old_title; |
|
Evan@653
|
243 |
char *old_source; |
|
Evan@653
|
244 |
char *old_uri; |
|
Evan@653
|
245 |
int old_length; |
|
Evan@653
|
246 |
char *old_track; |
|
Evan@1427
|
247 |
|
|
Evan@653
|
248 |
char *certificate_CN; |
|
Evan@1427
|
249 |
|
|
Evan@653
|
250 |
/* A purple timeout tag for the keepalive */ |
|
zacw@2489
|
251 |
guint keepalive_timeout; |
|
zacw@2279
|
252 |
|
|
Evan@653
|
253 |
PurpleSrvResponse *srv_rec; |
|
Evan@653
|
254 |
guint srv_rec_idx; |
|
Evan@653
|
255 |
guint max_srv_rec_idx; |
|
zacw@2069
|
256 |
|
|
zacw@2069
|
257 |
/* BOSH stuff */ |
|
zacw@2069
|
258 |
PurpleBOSHConnection *bosh; |
|
zacw@2069
|
259 |
|
|
Evan@653
|
260 |
/** |
|
Evan@653
|
261 |
* This linked list contains PurpleUtilFetchUrlData structs |
|
Evan@653
|
262 |
* for when we lookup buddy icons from a url |
|
Evan@653
|
263 |
*/ |
|
Evan@653
|
264 |
GSList *url_datas; |
|
zacw@1759
|
265 |
|
|
zacw@1759
|
266 |
/* keep a hash table of JingleSessions */ |
|
zacw@1759
|
267 |
GHashTable *sessions; |
|
zacw@1759
|
268 |
|
|
zacw@1759
|
269 |
/* maybe this should only be present when USE_VV? */ |
|
zacw@1759
|
270 |
gchar *stun_ip; |
|
zacw@1759
|
271 |
int stun_port; |
|
zacw@1759
|
272 |
PurpleDnsQueryData *stun_query; |
|
zacw@1759
|
273 |
/* later add stuff to handle TURN relays... */ |
|
Evan@653
|
274 |
}; |
|
Evan@653
|
275 |
|
|
zacw@2069
|
276 |
typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *namespace); |
|
Evan@653
|
277 |
|
|
Evan@653
|
278 |
typedef struct _JabberFeature |
|
Evan@653
|
279 |
{ |
|
Evan@653
|
280 |
gchar *namespace; |
|
Evan@653
|
281 |
JabberFeatureEnabled *is_enabled; |
|
Evan@653
|
282 |
} JabberFeature; |
|
Evan@653
|
283 |
|
|
zacw@2069
|
284 |
typedef struct _JabberIdentity |
|
zacw@2069
|
285 |
{ |
|
zacw@2069
|
286 |
gchar *category; |
|
zacw@2069
|
287 |
gchar *type; |
|
zacw@2069
|
288 |
gchar *name; |
|
zacw@2069
|
289 |
gchar *lang; |
|
zacw@2069
|
290 |
} JabberIdentity; |
|
zacw@2069
|
291 |
|
|
Evan@653
|
292 |
typedef struct _JabberBytestreamsStreamhost { |
|
Evan@653
|
293 |
char *jid; |
|
Evan@653
|
294 |
char *host; |
|
Evan@653
|
295 |
int port; |
|
Evan@653
|
296 |
char *zeroconf; |
|
Evan@653
|
297 |
} JabberBytestreamsStreamhost; |
|
Evan@653
|
298 |
|
|
Evan@653
|
299 |
/* what kind of additional features as returned from disco#info are supported? */ |
|
Evan@653
|
300 |
extern GList *jabber_features; |
|
zacw@2069
|
301 |
extern GList *jabber_identities; |
|
Evan@653
|
302 |
|
|
zacw@2069
|
303 |
void jabber_stream_features_parse(JabberStream *js, xmlnode *packet); |
|
Evan@653
|
304 |
void jabber_process_packet(JabberStream *js, xmlnode **packet); |
|
Evan@653
|
305 |
void jabber_send(JabberStream *js, xmlnode *data); |
|
Evan@653
|
306 |
void jabber_send_raw(JabberStream *js, const char *data, int len); |
|
zacw@2489
|
307 |
void jabber_send_signal_cb(PurpleConnection *pc, xmlnode **packet, |
|
zacw@2489
|
308 |
gpointer unused); |
|
Evan@653
|
309 |
|
|
Evan@653
|
310 |
void jabber_stream_set_state(JabberStream *js, JabberStreamState state); |
|
Evan@653
|
311 |
|
|
zacw@1759
|
312 |
void jabber_register_parse(JabberStream *js, const char *from, |
|
zacw@1759
|
313 |
JabberIqType type, const char *id, xmlnode *query); |
|
Evan@653
|
314 |
void jabber_register_start(JabberStream *js); |
|
Evan@653
|
315 |
|
|
Evan@653
|
316 |
char *jabber_get_next_id(JabberStream *js); |
|
Evan@653
|
317 |
|
|
Evan@653
|
318 |
/** Parse an error into a human-readable string and optionally a disconnect |
|
Evan@653
|
319 |
* reason. |
|
Evan@653
|
320 |
* @param js the stream on which the error occurred. |
|
Evan@653
|
321 |
* @param packet the error packet |
|
Evan@653
|
322 |
* @param reason where to store the disconnection reason, or @c NULL if you |
|
Evan@653
|
323 |
* don't care or you don't intend to close the connection. |
|
Evan@653
|
324 |
*/ |
|
Evan@653
|
325 |
char *jabber_parse_error(JabberStream *js, xmlnode *packet, PurpleConnectionError *reason); |
|
Evan@653
|
326 |
|
|
zacw@2069
|
327 |
void jabber_add_feature(const gchar *namespace, JabberFeatureEnabled cb); /* cb may be NULL */ |
|
zacw@2069
|
328 |
void jabber_remove_feature(const gchar *namespace); |
|
zacw@2069
|
329 |
|
|
zacw@2504
|
330 |
/** Adds an identity to this jabber library instance. For list of valid values visit the |
|
zacw@2504
|
331 |
* website of the XMPP Registrar ( http://www.xmpp.org/registrar/disco-categories.html#client ). |
|
zacw@2069
|
332 |
* @param category the category of the identity. |
|
zacw@2069
|
333 |
* @param type the type of the identity. |
|
zacw@2069
|
334 |
* @param language the language localization of the name. Can be NULL. |
|
zacw@2069
|
335 |
* @param name the name of the identity. |
|
zacw@2069
|
336 |
*/ |
|
zacw@2069
|
337 |
void jabber_add_identity(const gchar *category, const gchar *type, const gchar *lang, const gchar *name); |
|
zacw@2069
|
338 |
|
|
zacw@2069
|
339 |
/** |
|
zacw@2069
|
340 |
* Returns true if this connection is over a secure (SSL) stream. Use this |
|
zacw@2069
|
341 |
* instead of checking js->gsc because BOSH stores its PurpleSslConnection |
|
zacw@2069
|
342 |
* members in its own data structure. |
|
zacw@2069
|
343 |
*/ |
|
zacw@2069
|
344 |
gboolean jabber_stream_is_ssl(JabberStream *js); |
|
Evan@653
|
345 |
|
|
Evan@653
|
346 |
/** PRPL functions */ |
|
Evan@653
|
347 |
const char *jabber_list_icon(PurpleAccount *a, PurpleBuddy *b); |
|
Evan@653
|
348 |
const char* jabber_list_emblem(PurpleBuddy *b); |
|
Evan@653
|
349 |
char *jabber_status_text(PurpleBuddy *b); |
|
Evan@653
|
350 |
void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full); |
|
Evan@653
|
351 |
GList *jabber_status_types(PurpleAccount *account); |
|
Evan@653
|
352 |
void jabber_login(PurpleAccount *account); |
|
Evan@653
|
353 |
void jabber_close(PurpleConnection *gc); |
|
Evan@653
|
354 |
void jabber_idle_set(PurpleConnection *gc, int idle); |
|
zacw@2397
|
355 |
void jabber_blocklist_parse_push(JabberStream *js, const char *from, |
|
zacw@2397
|
356 |
JabberIqType type, const char *id, |
|
zacw@2397
|
357 |
xmlnode *child); |
|
Evan@653
|
358 |
void jabber_request_block_list(JabberStream *js); |
|
Evan@653
|
359 |
void jabber_add_deny(PurpleConnection *gc, const char *who); |
|
Evan@653
|
360 |
void jabber_rem_deny(PurpleConnection *gc, const char *who); |
|
Evan@653
|
361 |
void jabber_keepalive(PurpleConnection *gc); |
|
Evan@653
|
362 |
void jabber_register_gateway(JabberStream *js, const char *gateway); |
|
Evan@653
|
363 |
void jabber_register_account(PurpleAccount *account); |
|
Evan@653
|
364 |
void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data); |
|
Evan@653
|
365 |
gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code); |
|
Evan@653
|
366 |
GList *jabber_attention_types(PurpleAccount *account); |
|
Evan@653
|
367 |
void jabber_convo_closed(PurpleConnection *gc, const char *who); |
|
Evan@653
|
368 |
PurpleChat *jabber_find_blist_chat(PurpleAccount *account, const char *name); |
|
Evan@653
|
369 |
gboolean jabber_offline_message(const PurpleBuddy *buddy); |
|
Evan@653
|
370 |
int jabber_prpl_send_raw(PurpleConnection *gc, const char *buf, int len); |
|
Evan@653
|
371 |
GList *jabber_actions(PurplePlugin *plugin, gpointer context); |
|
zacw@2069
|
372 |
|
|
zacw@2069
|
373 |
gboolean jabber_audio_enabled(JabberStream *js, const char *unused); |
|
zacw@2489
|
374 |
gboolean jabber_video_enabled(JabberStream *js, const char *unused); |
|
zacw@1759
|
375 |
gboolean jabber_initiate_media(PurpleAccount *account, const char *who, |
|
zacw@1759
|
376 |
PurpleMediaSessionType type); |
|
zacw@1759
|
377 |
PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who); |
|
zacw@2069
|
378 |
|
|
Evan@653
|
379 |
void jabber_register_commands(void); |
|
zacw@2151
|
380 |
void jabber_unregister_commands(void); |
|
zacw@2069
|
381 |
|
|
Evan@653
|
382 |
void jabber_init_plugin(PurplePlugin *plugin); |
|
zacw@2069
|
383 |
void jabber_uninit_plugin(void); |
|
Evan@653
|
384 |
|
|
zacw@1759
|
385 |
#endif /* PURPLE_JABBER_H_ */ |