Mercurial > pidgin
annotate src/protocols/jabber/jabber.h @ 13967:99b9b58b19dd
[gaim-migrate @ 16523]
Fix a crazy MSN crash. Basically it's possible to have more than one
slplink associated with a given switchboard, but our code did not
allow for that. I think it happens when you're in a multi-user
chat and you do stuff with multiple users that involves slplinks.
Like maybe file transfer and buddy icon related stuff.
Tracking this down took an ungodly amount of time, but thanks to
Meebo for letting me do it :-)
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 20 Jul 2006 07:31:15 +0000 |
parents | 614c56622453 |
children | f327a27f7f07 |
rev | line source |
---|---|
7014 | 1 /** |
2 * @file jabber.h | |
3 * | |
4 * gaim | |
5 * | |
6 * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com> | |
2086 | 7 * |
7014 | 8 * This program is free software; you can redistribute it and/or modify |
9 * it under the terms of the GNU General Public License as published by | |
10 * the Free Software Foundation; either version 2 of the License, or | |
11 * (at your option) any later version. | |
2086 | 12 * |
7014 | 13 * This program is distributed in the hope that it will be useful, |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 * GNU General Public License for more details. | |
2086 | 17 * |
7014 | 18 * You should have received a copy of the GNU General Public License |
19 * along with this program; if not, write to the Free Software | |
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
2086 | 21 */ |
7014 | 22 #ifndef _GAIM_JABBER_H_ |
23 #define _GAIM_JABBER_H_ | |
2086 | 24 |
13806 | 25 #ifdef HAVE_LIBXML |
26 #include <libxml/parser.h> | |
27 #endif | |
7014 | 28 #include <glib.h> |
13951 | 29 #include "circbuffer.h" |
7014 | 30 #include "connection.h" |
8113 | 31 #include "roomlist.h" |
7014 | 32 #include "sslconn.h" |
2086 | 33 |
7014 | 34 #include "jutil.h" |
35 #include "xmlnode.h" | |
2086 | 36 |
12508 | 37 #ifdef HAVE_CYRUS_SASL |
38 #include <sasl/sasl.h> | |
39 #endif | |
40 | |
13384 | 41 #define CAPS0115_NODE "http://gaim.sf.net/caps" |
42 | |
7014 | 43 typedef enum { |
8312 | 44 JABBER_CAP_NONE = 0, |
45 JABBER_CAP_XHTML = 1 << 0, | |
46 JABBER_CAP_COMPOSING = 1 << 1, | |
47 JABBER_CAP_SI = 1 << 2, | |
48 JABBER_CAP_SI_FILE_XFER = 1 << 3, | |
49 JABBER_CAP_BYTESTREAMS = 1 << 4, | |
50 JABBER_CAP_IBB = 1 << 5, | |
11393 | 51 JABBER_CAP_CHAT_STATES = 1 << 6, |
11675 | 52 JABBER_CAP_IQ_SEARCH = 1 << 7, |
53 JABBER_CAP_IQ_REGISTER = 1 << 8, | |
8312 | 54 JABBER_CAP_RETRIEVED = 1 << 31 |
55 } JabberCapabilities; | |
56 | |
57 typedef enum { | |
7014 | 58 JABBER_STREAM_OFFLINE, |
59 JABBER_STREAM_CONNECTING, | |
60 JABBER_STREAM_INITIALIZING, | |
61 JABBER_STREAM_AUTHENTICATING, | |
62 JABBER_STREAM_REINITIALIZING, | |
63 JABBER_STREAM_CONNECTED | |
64 } JabberStreamState; | |
2086 | 65 |
7014 | 66 typedef struct _JabberStream |
2086 | 67 { |
7014 | 68 int fd; |
2086 | 69 |
13806 | 70 #ifdef HAVE_LIBXML |
71 xmlParserCtxt *context; | |
72 #else | |
7014 | 73 GMarkupParseContext *context; |
13806 | 74 #endif |
7014 | 75 xmlnode *current; |
2086 | 76 |
7014 | 77 enum { |
78 JABBER_PROTO_0_9, | |
79 JABBER_PROTO_1_0 | |
80 } protocol_version; | |
7291 | 81 enum { |
8296 | 82 JABBER_AUTH_UNKNOWN, |
7291 | 83 JABBER_AUTH_DIGEST_MD5, |
8296 | 84 JABBER_AUTH_PLAIN, |
12508 | 85 JABBER_AUTH_IQ_AUTH, |
86 JABBER_AUTH_CYRUS | |
7291 | 87 } auth_type; |
7014 | 88 char *stream_id; |
89 JabberStreamState state; | |
2086 | 90 |
7014 | 91 /* SASL authentication */ |
92 char *expected_rspauth; | |
2086 | 93 |
7014 | 94 GHashTable *buddies; |
95 gboolean roster_parsed; | |
2086 | 96 |
7014 | 97 GHashTable *chats; |
8043 | 98 GList *chat_servers; |
8113 | 99 GaimRoomlist *roomlist; |
11675 | 100 GList *user_directories; |
2086 | 101 |
8312 | 102 GHashTable *iq_callbacks; |
103 GHashTable *disco_callbacks; | |
7014 | 104 int next_id; |
2086 | 105 |
8312 | 106 |
7395 | 107 GList *oob_file_transfers; |
7170 | 108 GList *file_transfers; |
109 | |
7014 | 110 time_t idle; |
2086 | 111 |
7014 | 112 JabberID *user; |
113 GaimConnection *gc; | |
114 GaimSslConnection *gsc; | |
7072 | 115 |
116 gboolean registration; | |
10189 | 117 |
118 char *avatar_hash; | |
10941 | 119 GSList *pending_avatar_requests; |
12508 | 120 |
13200
33bef17125c2
[gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12508
diff
changeset
|
121 GaimCircBuffer *write_buffer; |
33bef17125c2
[gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12508
diff
changeset
|
122 guint writeh; |
33bef17125c2
[gaim-migrate @ 15563]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12508
diff
changeset
|
123 |
12508 | 124 /* OK, this stays at the end of the struct, so plugins can depend |
125 * on the rest of the stuff being in the right place | |
126 */ | |
127 #ifdef HAVE_CYRUS_SASL | |
128 sasl_conn_t *sasl; | |
129 sasl_callback_t *sasl_cb; | |
130 int sasl_state; | |
131 int sasl_maxbuf; | |
132 GString *sasl_mechs; | |
133 #endif | |
134 | |
7014 | 135 } JabberStream; |
2086 | 136 |
7014 | 137 void jabber_process_packet(JabberStream *js, xmlnode *packet); |
138 void jabber_send(JabberStream *js, xmlnode *data); | |
7642 | 139 void jabber_send_raw(JabberStream *js, const char *data, int len); |
2086 | 140 |
7014 | 141 void jabber_stream_set_state(JabberStream *js, JabberStreamState state); |
2086 | 142 |
7077 | 143 void jabber_register_parse(JabberStream *js, xmlnode *packet); |
8016 | 144 void jabber_register_start(JabberStream *js); |
7077 | 145 |
7014 | 146 char *jabber_get_next_id(JabberStream *js); |
2086 | 147 |
8401 | 148 char *jabber_parse_error(JabberStream *js, xmlnode *packet); |
149 | |
7014 | 150 #endif /* _GAIM_JABBER_H_ */ |