| |
1 /** |
| |
2 * @file jabber.h |
| |
3 * |
| |
4 * gaim |
| |
5 * |
| |
6 * Copyright (C) 2003 Nathan Walp <faceprint@faceprint.com> |
| |
7 * |
| |
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. |
| |
12 * |
| |
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. |
| |
17 * |
| |
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 |
| |
21 */ |
| |
22 #ifndef _GAIM_JABBER_H_ |
| |
23 #define _GAIM_JABBER_H_ |
| |
24 |
| |
25 #include <libxml/parser.h> |
| |
26 #include <glib.h> |
| |
27 #include "circbuffer.h" |
| |
28 #include "connection.h" |
| |
29 #include "dnssrv.h" |
| |
30 #include "roomlist.h" |
| |
31 #include "sslconn.h" |
| |
32 |
| |
33 #include "jutil.h" |
| |
34 #include "xmlnode.h" |
| |
35 |
| |
36 #ifdef HAVE_CYRUS_SASL |
| |
37 #include <sasl/sasl.h> |
| |
38 #endif |
| |
39 |
| |
40 #define CAPS0115_NODE "http://gaim.sf.net/caps" |
| |
41 |
| |
42 typedef enum { |
| |
43 JABBER_CAP_NONE = 0, |
| |
44 JABBER_CAP_XHTML = 1 << 0, |
| |
45 JABBER_CAP_COMPOSING = 1 << 1, |
| |
46 JABBER_CAP_SI = 1 << 2, |
| |
47 JABBER_CAP_SI_FILE_XFER = 1 << 3, |
| |
48 JABBER_CAP_BYTESTREAMS = 1 << 4, |
| |
49 JABBER_CAP_IBB = 1 << 5, |
| |
50 JABBER_CAP_CHAT_STATES = 1 << 6, |
| |
51 JABBER_CAP_IQ_SEARCH = 1 << 7, |
| |
52 JABBER_CAP_IQ_REGISTER = 1 << 8, |
| |
53 |
| |
54 /* Google Talk extensions: |
| |
55 * http://code.google.com/apis/talk/jep_extensions/extensions.html |
| |
56 */ |
| |
57 JABBER_CAP_GMAIL_NOTIFY = 1 << 9, |
| |
58 JABBER_CAP_GOOGLE_ROSTER = 1 << 10, |
| |
59 |
| |
60 JABBER_CAP_RETRIEVED = 1 << 31 |
| |
61 } JabberCapabilities; |
| |
62 |
| |
63 typedef enum { |
| |
64 JABBER_STREAM_OFFLINE, |
| |
65 JABBER_STREAM_CONNECTING, |
| |
66 JABBER_STREAM_INITIALIZING, |
| |
67 JABBER_STREAM_AUTHENTICATING, |
| |
68 JABBER_STREAM_REINITIALIZING, |
| |
69 JABBER_STREAM_CONNECTED |
| |
70 } JabberStreamState; |
| |
71 |
| |
72 typedef struct _JabberStream |
| |
73 { |
| |
74 int fd; |
| |
75 |
| |
76 GaimSrvQueryData *srv_query_data; |
| |
77 |
| |
78 xmlParserCtxt *context; |
| |
79 xmlnode *current; |
| |
80 |
| |
81 enum { |
| |
82 JABBER_PROTO_0_9, |
| |
83 JABBER_PROTO_1_0 |
| |
84 } protocol_version; |
| |
85 enum { |
| |
86 JABBER_AUTH_UNKNOWN, |
| |
87 JABBER_AUTH_DIGEST_MD5, |
| |
88 JABBER_AUTH_PLAIN, |
| |
89 JABBER_AUTH_IQ_AUTH, |
| |
90 JABBER_AUTH_CYRUS |
| |
91 } auth_type; |
| |
92 char *stream_id; |
| |
93 JabberStreamState state; |
| |
94 |
| |
95 /* SASL authentication */ |
| |
96 char *expected_rspauth; |
| |
97 |
| |
98 GHashTable *buddies; |
| |
99 gboolean roster_parsed; |
| |
100 |
| |
101 GHashTable *chats; |
| |
102 GList *chat_servers; |
| |
103 GaimRoomlist *roomlist; |
| |
104 GList *user_directories; |
| |
105 |
| |
106 GHashTable *iq_callbacks; |
| |
107 GHashTable *disco_callbacks; |
| |
108 int next_id; |
| |
109 |
| |
110 |
| |
111 GList *oob_file_transfers; |
| |
112 GList *file_transfers; |
| |
113 |
| |
114 time_t idle; |
| |
115 |
| |
116 JabberID *user; |
| |
117 GaimConnection *gc; |
| |
118 GaimSslConnection *gsc; |
| |
119 |
| |
120 gboolean registration; |
| |
121 |
| |
122 char *avatar_hash; |
| |
123 GSList *pending_avatar_requests; |
| |
124 |
| |
125 GSList *pending_buddy_info_requests; |
| |
126 |
| |
127 GaimCircBuffer *write_buffer; |
| |
128 guint writeh; |
| |
129 |
| |
130 gboolean reinit; |
| |
131 |
| |
132 JabberCapabilities server_caps; |
| |
133 gboolean googletalk; |
| |
134 char *server_name; |
| |
135 |
| |
136 char *gmail_last_time; |
| |
137 char *gmail_last_tid; |
| |
138 |
| |
139 /* OK, this stays at the end of the struct, so plugins can depend |
| |
140 * on the rest of the stuff being in the right place |
| |
141 */ |
| |
142 #ifdef HAVE_CYRUS_SASL |
| |
143 sasl_conn_t *sasl; |
| |
144 sasl_callback_t *sasl_cb; |
| |
145 int sasl_state; |
| |
146 int sasl_maxbuf; |
| |
147 GString *sasl_mechs; |
| |
148 #endif |
| |
149 |
| |
150 } JabberStream; |
| |
151 |
| |
152 void jabber_process_packet(JabberStream *js, xmlnode *packet); |
| |
153 void jabber_send(JabberStream *js, xmlnode *data); |
| |
154 void jabber_send_raw(JabberStream *js, const char *data, int len); |
| |
155 |
| |
156 void jabber_stream_set_state(JabberStream *js, JabberStreamState state); |
| |
157 |
| |
158 void jabber_register_parse(JabberStream *js, xmlnode *packet); |
| |
159 void jabber_register_start(JabberStream *js); |
| |
160 |
| |
161 char *jabber_get_next_id(JabberStream *js); |
| |
162 |
| |
163 char *jabber_parse_error(JabberStream *js, xmlnode *packet); |
| |
164 |
| |
165 #endif /* _GAIM_JABBER_H_ */ |