Tue, 09 Oct 2007 13:32:58 +0000
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
reasons into jabber_parse_error in a slightly dubious fashion. I'd appreciate
someone sanity-checking this rev.
| 7014 | 1 | /** |
| 2 | * @file jabber.h | |
| 3 | * | |
| 15884 | 4 | * purple |
| 7014 | 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 | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18449
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 2086 | 21 | */ |
| 15884 | 22 | #ifndef _PURPLE_JABBER_H_ |
| 23 | #define _PURPLE_JABBER_H_ | |
| 2086 | 24 | |
| 7014 | 25 | typedef enum { |
| 8312 | 26 | JABBER_CAP_NONE = 0, |
| 27 | JABBER_CAP_XHTML = 1 << 0, | |
| 28 | JABBER_CAP_COMPOSING = 1 << 1, | |
| 29 | JABBER_CAP_SI = 1 << 2, | |
| 30 | JABBER_CAP_SI_FILE_XFER = 1 << 3, | |
| 31 | JABBER_CAP_BYTESTREAMS = 1 << 4, | |
| 32 | JABBER_CAP_IBB = 1 << 5, | |
| 11393 | 33 | JABBER_CAP_CHAT_STATES = 1 << 6, |
| 11675 | 34 | JABBER_CAP_IQ_SEARCH = 1 << 7, |
| 35 | JABBER_CAP_IQ_REGISTER = 1 << 8, | |
| 15225 | 36 | |
|
19898
218e4bb04853
Fix mingw build of xmpp prpl
Daniel Atallah <datallah@pidgin.im>
parents:
19897
diff
changeset
|
37 | /* Google Talk extensions: |
| 15225 | 38 | * http://code.google.com/apis/talk/jep_extensions/extensions.html |
| 39 | */ | |
| 40 | JABBER_CAP_GMAIL_NOTIFY = 1 << 9, | |
| 15265 | 41 | JABBER_CAP_GOOGLE_ROSTER = 1 << 10, |
| 15225 | 42 | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17773
diff
changeset
|
43 | JABBER_CAP_PING = 1 << 11, |
|
17816
1b7362b4a7a2
Implemented ad-hoc commands for the buddy action menu (untested), implemented the receiving end of XEP-0115: Entity Capabilities. Note that this seems not to be reliable right now, since some clients seem to have a very broken [read: completely non-functional] implementation (most notably Gajim and the py-transports).
Andreas Monitzer <am@adiumx.com>
parents:
17815
diff
changeset
|
44 | JABBER_CAP_ADHOC = 1 << 12, |
|
17800
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
45 | |
| 8312 | 46 | JABBER_CAP_RETRIEVED = 1 << 31 |
| 47 | } JabberCapabilities; | |
| 48 | ||
|
17800
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
49 | typedef struct _JabberStream JabberStream; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
50 | |
| 13808 | 51 | #include <libxml/parser.h> |
| 7014 | 52 | #include <glib.h> |
|
14013
86dac5633bd9
[gaim-migrate @ 16496]
Mark Doliner <markdoliner@pidgin.im>
parents:
13808
diff
changeset
|
53 | #include "circbuffer.h" |
| 7014 | 54 | #include "connection.h" |
|
14370
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
55 | #include "dnssrv.h" |
| 8113 | 56 | #include "roomlist.h" |
| 7014 | 57 | #include "sslconn.h" |
| 2086 | 58 | |
| 7014 | 59 | #include "jutil.h" |
| 60 | #include "xmlnode.h" | |
|
17800
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
61 | #include "buddy.h" |
| 2086 | 62 | |
| 12508 | 63 | #ifdef HAVE_CYRUS_SASL |
| 64 | #include <sasl/sasl.h> | |
| 65 | #endif | |
| 66 | ||
| 16066 | 67 | #define CAPS0115_NODE "http://pidgin.im/caps" |
| 13385 | 68 | |
|
20401
8aaa593a6269
Comment a partial implementation of the libpurple attention API for
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19898
diff
changeset
|
69 | /* Index into attention_types list */ |
|
8aaa593a6269
Comment a partial implementation of the libpurple attention API for
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19898
diff
changeset
|
70 | #define JABBER_BUZZ 0 |
|
8aaa593a6269
Comment a partial implementation of the libpurple attention API for
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19898
diff
changeset
|
71 | |
| 8312 | 72 | typedef enum { |
| 7014 | 73 | JABBER_STREAM_OFFLINE, |
| 74 | JABBER_STREAM_CONNECTING, | |
| 75 | JABBER_STREAM_INITIALIZING, | |
|
17813
c5cc8ebf62c0
Introduced an additional connection stage to the jabber connection progress in order to be able to tell in the application, whether SSL/TLS is enabled, so it can display a lock icon next to the connection.
Andreas Monitzer <am@adiumx.com>
parents:
17806
diff
changeset
|
76 | JABBER_STREAM_INITIALIZING_ENCRYPTION, |
| 7014 | 77 | JABBER_STREAM_AUTHENTICATING, |
| 78 | JABBER_STREAM_REINITIALIZING, | |
| 79 | JABBER_STREAM_CONNECTED | |
| 80 | } JabberStreamState; | |
| 2086 | 81 | |
|
17800
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
82 | struct _JabberStream |
| 2086 | 83 | { |
| 7014 | 84 | int fd; |
| 2086 | 85 | |
| 15884 | 86 | PurpleSrvQueryData *srv_query_data; |
|
14175
2bc5a80c5071
[gaim-migrate @ 16747]
Mark Doliner <markdoliner@pidgin.im>
parents:
14062
diff
changeset
|
87 | |
| 13808 | 88 | xmlParserCtxt *context; |
| 7014 | 89 | xmlnode *current; |
| 2086 | 90 | |
| 7014 | 91 | enum { |
| 92 | JABBER_PROTO_0_9, | |
| 93 | JABBER_PROTO_1_0 | |
| 94 | } protocol_version; | |
| 7291 | 95 | enum { |
| 8296 | 96 | JABBER_AUTH_UNKNOWN, |
| 7291 | 97 | JABBER_AUTH_DIGEST_MD5, |
| 8296 | 98 | JABBER_AUTH_PLAIN, |
| 12508 | 99 | JABBER_AUTH_IQ_AUTH, |
| 100 | JABBER_AUTH_CYRUS | |
| 7291 | 101 | } auth_type; |
| 7014 | 102 | char *stream_id; |
| 103 | JabberStreamState state; | |
| 2086 | 104 | |
| 7014 | 105 | /* SASL authentication */ |
| 106 | char *expected_rspauth; | |
| 2086 | 107 | |
| 7014 | 108 | GHashTable *buddies; |
| 109 | gboolean roster_parsed; | |
| 2086 | 110 | |
| 7014 | 111 | GHashTable *chats; |
| 8043 | 112 | GList *chat_servers; |
| 15884 | 113 | PurpleRoomlist *roomlist; |
| 11675 | 114 | GList *user_directories; |
| 2086 | 115 | |
| 8312 | 116 | GHashTable *iq_callbacks; |
| 117 | GHashTable *disco_callbacks; | |
| 7014 | 118 | int next_id; |
| 2086 | 119 | |
| 8312 | 120 | |
| 7395 | 121 | GList *oob_file_transfers; |
| 7170 | 122 | GList *file_transfers; |
| 123 | ||
|
14453
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
124 | time_t idle; |
|
1cc75906700c
[gaim-migrate @ 17098]
Mark Doliner <markdoliner@pidgin.im>
parents:
14375
diff
changeset
|
125 | |
| 7014 | 126 | JabberID *user; |
| 15884 | 127 | PurpleConnection *gc; |
| 128 | PurpleSslConnection *gsc; | |
| 7072 | 129 | |
| 130 | gboolean registration; | |
| 10189 | 131 | |
| 132 | char *avatar_hash; | |
| 10941 | 133 | GSList *pending_avatar_requests; |
| 12508 | 134 | |
|
15363
f6b9d1e3d0cb
[gaim-migrate @ 18092]
Evan Schoenberg <evands@pidgin.im>
parents:
15265
diff
changeset
|
135 | GSList *pending_buddy_info_requests; |
|
15800
2d0ec4fe2681
pass the correct domain to cyrus sasl (sf patch 1663064)
Nathan Walp <nwalp@pidgin.im>
parents:
15435
diff
changeset
|
136 | |
| 15884 | 137 | PurpleCircBuffer *write_buffer; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12508
diff
changeset
|
138 | guint writeh; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12508
diff
changeset
|
139 | |
| 14062 | 140 | gboolean reinit; |
| 141 | ||
| 15225 | 142 | JabberCapabilities server_caps; |
| 15197 | 143 | gboolean googletalk; |
| 144 | char *server_name; | |
|
15800
2d0ec4fe2681
pass the correct domain to cyrus sasl (sf patch 1663064)
Nathan Walp <nwalp@pidgin.im>
parents:
15435
diff
changeset
|
145 | |
| 15225 | 146 | char *gmail_last_time; |
| 147 | char *gmail_last_tid; | |
| 15197 | 148 | |
|
18449
2d2df64f4303
applied changes from f9186fabb483b56a9d7e8fb7241b2520e9930413
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18235
diff
changeset
|
149 | char *serverFQDN; |
|
2d2df64f4303
applied changes from f9186fabb483b56a9d7e8fb7241b2520e9930413
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18235
diff
changeset
|
150 | |
| 12508 | 151 | /* OK, this stays at the end of the struct, so plugins can depend |
| 152 | * on the rest of the stuff being in the right place | |
| 153 | */ | |
| 154 | #ifdef HAVE_CYRUS_SASL | |
| 155 | sasl_conn_t *sasl; | |
| 156 | sasl_callback_t *sasl_cb; | |
|
18235
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
157 | #else /* keep the struct the same size */ |
|
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
158 | void *sasl; |
|
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
159 | void *sasl_cb; |
|
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
160 | #endif |
|
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
161 | |
| 12508 | 162 | int sasl_state; |
| 163 | int sasl_maxbuf; | |
| 164 | GString *sasl_mechs; | |
|
18235
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
165 | |
|
18912
606597744812
Added unregistering XMPP accounts. This requires a new prpl-struct entry, but I got an ok for that on the mailing list.
Andreas Monitzer <am@adiumx.com>
parents:
18719
diff
changeset
|
166 | gboolean unregistration; |
|
18994
310e9d853e2b
Implemented a callback for unregistering, mirroring the registration callback. Since this is a new API, I can do it properly by passing it right in the unregister function call, instead of having a separate function for setting it.
Andreas Monitzer <am@adiumx.com>
parents:
18912
diff
changeset
|
167 | PurpleAccountUnregistrationCb unregistration_cb; |
|
310e9d853e2b
Implemented a callback for unregistering, mirroring the registration callback. Since this is a new API, I can do it properly by passing it right in the unregister function call, instead of having a separate function for setting it.
Andreas Monitzer <am@adiumx.com>
parents:
18912
diff
changeset
|
168 | void *unregistration_user_data; |
|
18912
606597744812
Added unregistering XMPP accounts. This requires a new prpl-struct entry, but I got an ok for that on the mailing list.
Andreas Monitzer <am@adiumx.com>
parents:
18719
diff
changeset
|
169 | |
|
18235
60a9bd99f035
server-side jabber vcards now take precedence over local vcards, so
Nathan Walp <nwalp@pidgin.im>
parents:
16302
diff
changeset
|
170 | gboolean vcard_fetched; |
| 12508 | 171 | |
|
17779
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17773
diff
changeset
|
172 | /* does the local server support PEP? */ |
|
773326802e26
Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <am@adiumx.com>
parents:
17773
diff
changeset
|
173 | gboolean pep; |
| 2086 | 174 | |
|
17824
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17817
diff
changeset
|
175 | /* Is Buzz enabled? */ |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17817
diff
changeset
|
176 | gboolean allowBuzz; |
|
52683dfc1f7d
Added the option to enable/disable buzz via a status setting. It's default off for the pidgin folks.
Andreas Monitzer <am@adiumx.com>
parents:
17817
diff
changeset
|
177 | |
|
17817
8e0f271aab78
The server's ad-hoc commands are now listed in the account's action menu. Note that this requires an additional field in the _PurplePluginAction struct. There's no other way, since there was no way to supply user_data, and dynamically created functions are not supported by C. This should be fine, since that struct is only malloced in purple_plugin_action_new, which is part of the core. Applications have to either pass the struct unmodified, or restore the user_data pointer if the action is recreated when necessary (as is the case in Adium).
Andreas Monitzer <am@adiumx.com>
parents:
17816
diff
changeset
|
178 | /* A list of JabberAdHocCommands supported by the server */ |
|
8e0f271aab78
The server's ad-hoc commands are now listed in the account's action menu. Note that this requires an additional field in the _PurplePluginAction struct. There's no other way, since there was no way to supply user_data, and dynamically created functions are not supported by C. This should be fine, since that struct is only malloced in purple_plugin_action_new, which is part of the core. Applications have to either pass the struct unmodified, or restore the user_data pointer if the action is recreated when necessary (as is the case in Adium).
Andreas Monitzer <am@adiumx.com>
parents:
17816
diff
changeset
|
179 | GList *commands; |
|
8e0f271aab78
The server's ad-hoc commands are now listed in the account's action menu. Note that this requires an additional field in the _PurplePluginAction struct. There's no other way, since there was no way to supply user_data, and dynamically created functions are not supported by C. This should be fine, since that struct is only malloced in purple_plugin_action_new, which is part of the core. Applications have to either pass the struct unmodified, or restore the user_data pointer if the action is recreated when necessary (as is the case in Adium).
Andreas Monitzer <am@adiumx.com>
parents:
17816
diff
changeset
|
180 | |
|
17800
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
181 | /* last presence update to check for differences */ |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
182 | JabberBuddyState old_state; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
183 | char *old_msg; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
184 | int old_priority; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
185 | char *old_avatarhash; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
186 | |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
187 | /* same for user tune */ |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
188 | char *old_artist; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
189 | char *old_title; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
190 | char *old_source; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
191 | char *old_uri; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
192 | int old_length; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
193 | char *old_track; |
|
39a0f9ed0e26
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
Andreas Monitzer <am@adiumx.com>
parents:
17783
diff
changeset
|
194 | }; |
| 12508 | 195 | |
|
17783
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
196 | typedef gboolean (JabberFeatureEnabled)(JabberStream *js, const gchar *shortname, const gchar *namespace); |
| 2086 | 197 | |
|
17783
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
198 | typedef struct _JabberFeature |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
199 | { |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
200 | gchar *shortname; |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
201 | gchar *namespace; |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
202 | JabberFeatureEnabled *is_enabled; |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
203 | } JabberFeature; |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
204 | |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
205 | /* what kind of additional features as returned from disco#info are supported? */ |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
206 | extern GList *jabber_features; |
|
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
207 | |
|
17828
6957bf9d7330
Fixed a bug in the XMPP parser involving event handlers that replace the xmlnode packet. This caused double frees in this situation. The replacing function must free the xmlnode, since multiple event handlers could do this, and the intermediate xml trees would leak otherwise.
Andreas Monitzer <am@adiumx.com>
parents:
17824
diff
changeset
|
208 | void jabber_process_packet(JabberStream *js, xmlnode **packet); |
| 7014 | 209 | void jabber_send(JabberStream *js, xmlnode *data); |
| 7642 | 210 | void jabber_send_raw(JabberStream *js, const char *data, int len); |
| 2086 | 211 | |
| 7014 | 212 | void jabber_stream_set_state(JabberStream *js, JabberStreamState state); |
| 2086 | 213 | |
| 7077 | 214 | void jabber_register_parse(JabberStream *js, xmlnode *packet); |
| 8016 | 215 | void jabber_register_start(JabberStream *js); |
| 7077 | 216 | |
| 7014 | 217 | char *jabber_get_next_id(JabberStream *js); |
| 2086 | 218 | |
|
21150
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
219 | /** Parse an error into a human-readable string and optionally a disconnect |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
220 | * reason. |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
221 | * @param js the stream on which the error occurred. |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
222 | * @param packet the error packet |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
223 | * @param reason where to store the disconnection reason, or @c NULL if you |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
224 | * don't care or you don't intend to close the connection. |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
225 | */ |
|
bedd1215fb5e
Stop jabber setting wants_to_die itself. This involved plumbing disconnection
Will Thompson <resiak@pidgin.im>
parents:
20401
diff
changeset
|
226 | char *jabber_parse_error(JabberStream *js, xmlnode *packet, PurpleDisconnectReason *reason); |
| 8401 | 227 | |
|
17783
2687df1ca202
PEP publishing features are now only announced in disco#info when PEP is supported by the server.
Andreas Monitzer <am@adiumx.com>
parents:
17779
diff
changeset
|
228 | void jabber_add_feature(const gchar *shortname, const gchar *namespace, JabberFeatureEnabled cb); /* cb may be NULL */ |
|
17773
6956b763b3d1
Implemented adding callbacks for PEP events. Moved the feature list to be application-global instead of per-connection (makes more sense).
Andreas Monitzer <am@adiumx.com>
parents:
17770
diff
changeset
|
229 | void jabber_remove_feature(const gchar *shortname); |
|
17770
e67998927a3c
Added the ability to define extensions to caps
Andreas Monitzer <am@adiumx.com>
parents:
17769
diff
changeset
|
230 | |
|
16302
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
231 | /** PRPL functions */ |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
232 | const char *jabber_list_icon(PurpleAccount *a, PurpleBuddy *b); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
233 | const char* jabber_list_emblem(PurpleBuddy *b); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
234 | char *jabber_status_text(PurpleBuddy *b); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
235 | void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
236 | GList *jabber_status_types(PurpleAccount *account); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
237 | void jabber_login(PurpleAccount *account); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
238 | void jabber_close(PurpleConnection *gc); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
239 | void jabber_idle_set(PurpleConnection *gc, int idle); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
240 | void jabber_keepalive(PurpleConnection *gc); |
|
17806
ed4647f0915d
Added the ability to register gateways, re-using most of the account registration code for this.
Andreas Monitzer <am@adiumx.com>
parents:
17800
diff
changeset
|
241 | void jabber_register_gateway(JabberStream *js, const char *gateway); |
|
16302
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
242 | void jabber_register_account(PurpleAccount *account); |
|
18994
310e9d853e2b
Implemented a callback for unregistering, mirroring the registration callback. Since this is a new API, I can do it properly by passing it right in the unregister function call, instead of having a separate function for setting it.
Andreas Monitzer <am@adiumx.com>
parents:
18912
diff
changeset
|
243 | void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data); |
|
20401
8aaa593a6269
Comment a partial implementation of the libpurple attention API for
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19898
diff
changeset
|
244 | gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code); |
|
8aaa593a6269
Comment a partial implementation of the libpurple attention API for
Jeff Connelly <jeff2@soc.pidgin.im>
parents:
19898
diff
changeset
|
245 | GList *jabber_attention_types(PurpleAccount *account); |
|
16302
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
246 | void jabber_convo_closed(PurpleConnection *gc, const char *who); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
247 | PurpleChat *jabber_find_blist_chat(PurpleAccount *account, const char *name); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
248 | gboolean jabber_offline_message(const PurpleBuddy *buddy); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
249 | int jabber_prpl_send_raw(PurpleConnection *gc, const char *buf, int len); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
250 | GList *jabber_actions(PurplePlugin *plugin, gpointer context); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
251 | void jabber_register_commands(void); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
252 | void jabber_init_plugin(PurplePlugin *plugin); |
|
eb633ebf84f2
This does the ol' AIM/ICQ split trick on Jabber, creating an XMPP prpl. This can be used, later, to create a Bonjour plugin that reuses libjabber
Sean Egan <seanegan@pidgin.im>
parents:
16066
diff
changeset
|
253 | |
| 15884 | 254 | #endif /* _PURPLE_JABBER_H_ */ |