comparison libgaim/protocols/jabber/jabber.h @ 14192:60b1bc8dbf37

[gaim-migrate @ 16863] Renamed 'core' to 'libgaim' committer: Tailor Script <tailor@pidgin.im>
author Evan Schoenberg <evan.s@dreskin.net>
date Sat, 19 Aug 2006 01:50:10 +0000
parents
children baff095b146c
comparison
equal deleted inserted replaced
14191:009db0b357b5 14192:60b1bc8dbf37
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 #ifdef HAVE_LIBXML
26 #include <libxml/parser.h>
27 #endif
28 #include <glib.h>
29 #include "circbuffer.h"
30 #include "connection.h"
31 #include "roomlist.h"
32 #include "sslconn.h"
33
34 #include "jutil.h"
35 #include "xmlnode.h"
36
37 #ifdef HAVE_CYRUS_SASL
38 #include <sasl/sasl.h>
39 #endif
40
41 #define CAPS0115_NODE "http://gaim.sf.net/caps"
42
43 typedef enum {
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,
51 JABBER_CAP_CHAT_STATES = 1 << 6,
52 JABBER_CAP_IQ_SEARCH = 1 << 7,
53 JABBER_CAP_IQ_REGISTER = 1 << 8,
54 JABBER_CAP_RETRIEVED = 1 << 31
55 } JabberCapabilities;
56
57 typedef enum {
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;
65
66 typedef struct _JabberStream
67 {
68 int fd;
69
70 GaimProxyConnectInfo *connect_info;
71
72 #ifdef HAVE_LIBXML
73 xmlParserCtxt *context;
74 #else
75 GMarkupParseContext *context;
76 #endif
77 xmlnode *current;
78
79 enum {
80 JABBER_PROTO_0_9,
81 JABBER_PROTO_1_0
82 } protocol_version;
83 enum {
84 JABBER_AUTH_UNKNOWN,
85 JABBER_AUTH_DIGEST_MD5,
86 JABBER_AUTH_PLAIN,
87 JABBER_AUTH_IQ_AUTH,
88 JABBER_AUTH_CYRUS
89 } auth_type;
90 char *stream_id;
91 JabberStreamState state;
92
93 /* SASL authentication */
94 char *expected_rspauth;
95
96 GHashTable *buddies;
97 gboolean roster_parsed;
98
99 GHashTable *chats;
100 GList *chat_servers;
101 GaimRoomlist *roomlist;
102 GList *user_directories;
103
104 GHashTable *iq_callbacks;
105 GHashTable *disco_callbacks;
106 int next_id;
107
108
109 GList *oob_file_transfers;
110 GList *file_transfers;
111
112 time_t idle;
113
114 JabberID *user;
115 GaimConnection *gc;
116 GaimSslConnection *gsc;
117
118 gboolean registration;
119
120 char *avatar_hash;
121 GSList *pending_avatar_requests;
122
123 GaimCircBuffer *write_buffer;
124 guint writeh;
125
126 gboolean reinit;
127
128 /* OK, this stays at the end of the struct, so plugins can depend
129 * on the rest of the stuff being in the right place
130 */
131 #ifdef HAVE_CYRUS_SASL
132 sasl_conn_t *sasl;
133 sasl_callback_t *sasl_cb;
134 int sasl_state;
135 int sasl_maxbuf;
136 GString *sasl_mechs;
137 #endif
138
139 } JabberStream;
140
141 void jabber_process_packet(JabberStream *js, xmlnode *packet);
142 void jabber_send(JabberStream *js, xmlnode *data);
143 void jabber_send_raw(JabberStream *js, const char *data, int len);
144
145 void jabber_stream_set_state(JabberStream *js, JabberStreamState state);
146
147 void jabber_register_parse(JabberStream *js, xmlnode *packet);
148 void jabber_register_start(JabberStream *js);
149
150 char *jabber_get_next_id(JabberStream *js);
151
152 char *jabber_parse_error(JabberStream *js, xmlnode *packet);
153
154 #endif /* _GAIM_JABBER_H_ */