Mercurial > pidgin
annotate libpurple/protocols/jabber/libxmpp.c @ 17882:f88b3a093cba
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).
author | Andreas Monitzer <pidgin@monitzer.com> |
---|---|
date | Sat, 23 Jun 2007 02:57:21 +0000 |
parents | 759cd72bd2ff |
children | b8de63d3bf89 |
rev | line source |
---|---|
16241 | 1 /* purple |
2 * | |
3 * Purple is the legal property of its developers, whose names are too numerous | |
4 * to list here. Please refer to the COPYRIGHT file distributed with this | |
5 * source distribution. | |
6 * | |
7 * This program is free software; you can redistribute it and/or modify | |
8 * it under the terms of the GNU General Public License as published by | |
9 * the Free Software Foundation; either version 2 of the License, or | |
10 * (at your option) any later version. | |
11 * | |
12 * This program is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 * GNU General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU General Public License | |
18 * along with this program; if not, write to the Free Software | |
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
20 * | |
21 */ | |
22 | |
23 /* libxmpp is the XMPP protocol plugin. It is linked against libjabbercommon, | |
24 * which may be used to support other protocols (Bonjour) which may need to | |
25 * share code. | |
26 */ | |
27 | |
28 #include "accountopt.h" | |
29 #include "internal.h" | |
30 #include "version.h" | |
31 | |
32 #include "iq.h" | |
33 #include "jabber.h" | |
34 #include "chat.h" | |
35 #include "message.h" | |
36 #include "roster.h" | |
37 #include "si.h" | |
38 #include "message.h" | |
39 #include "presence.h" | |
40 #include "google.h" | |
17839
0370da969e8a
Implemented adding callbacks for PEP events. Moved the feature list to be application-global instead of per-connection (makes more sense).
Andreas Monitzer <pidgin@monitzer.com>
parents:
16962
diff
changeset
|
41 #include "pep.h" |
17857
3e437e86bd6e
Implemented user tune, currently untested.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17854
diff
changeset
|
42 #include "usertune.h" |
17882
f88b3a093cba
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 <pidgin@monitzer.com>
parents:
17866
diff
changeset
|
43 #include "caps.h" |
16241 | 44 |
45 static PurplePluginProtocolInfo prpl_info = | |
46 { | |
47 #ifdef HAVE_CYRUS_SASL | |
48 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | | |
49 OPT_PROTO_MAIL_CHECK | OPT_PROTO_PASSWORD_OPTIONAL, | |
50 #else | |
51 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | OPT_PROTO_MAIL_CHECK, | |
52 #endif | |
53 NULL, /* user_splits */ | |
54 NULL, /* protocol_options */ | |
17853
7754d39d70c5
Added support for setting the avatar via XEP-0084. Receiving other people's avatar is up next.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17839
diff
changeset
|
55 {"png", 32, 32, 96, 96, 8191, PURPLE_ICON_SCALE_SEND | PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ |
16241 | 56 jabber_list_icon, /* list_icon */ |
57 jabber_list_emblem, /* list_emblems */ | |
58 jabber_status_text, /* status_text */ | |
59 jabber_tooltip_text, /* tooltip_text */ | |
60 jabber_status_types, /* status_types */ | |
61 jabber_blist_node_menu, /* blist_node_menu */ | |
62 jabber_chat_info, /* chat_info */ | |
63 jabber_chat_info_defaults, /* chat_info_defaults */ | |
64 jabber_login, /* login */ | |
65 jabber_close, /* close */ | |
66 jabber_message_send_im, /* send_im */ | |
67 jabber_set_info, /* set_info */ | |
68 jabber_send_typing, /* send_typing */ | |
69 jabber_buddy_get_info, /* get_info */ | |
70 jabber_presence_send, /* set_away */ | |
71 jabber_idle_set, /* set_idle */ | |
72 NULL, /* change_passwd */ | |
73 jabber_roster_add_buddy, /* add_buddy */ | |
74 NULL, /* add_buddies */ | |
75 jabber_roster_remove_buddy, /* remove_buddy */ | |
76 NULL, /* remove_buddies */ | |
77 NULL, /* add_permit */ | |
78 jabber_google_roster_add_deny, /* add_deny */ | |
79 NULL, /* rem_permit */ | |
80 jabber_google_roster_rem_deny, /* rem_deny */ | |
81 NULL, /* set_permit_deny */ | |
82 jabber_chat_join, /* join_chat */ | |
83 NULL, /* reject_chat */ | |
84 jabber_get_chat_name, /* get_chat_name */ | |
85 jabber_chat_invite, /* chat_invite */ | |
86 jabber_chat_leave, /* chat_leave */ | |
87 NULL, /* chat_whisper */ | |
88 jabber_message_send_chat, /* chat_send */ | |
89 jabber_keepalive, /* keepalive */ | |
90 jabber_register_account, /* register_user */ | |
91 jabber_buddy_get_info_chat, /* get_cb_info */ | |
92 NULL, /* get_cb_away */ | |
93 jabber_roster_alias_change, /* alias_buddy */ | |
94 jabber_roster_group_change, /* group_buddy */ | |
95 jabber_roster_group_rename, /* rename_group */ | |
96 NULL, /* buddy_free */ | |
97 jabber_convo_closed, /* convo_closed */ | |
98 jabber_normalize, /* normalize */ | |
99 jabber_set_buddy_icon, /* set_buddy_icon */ | |
100 NULL, /* remove_group */ | |
101 jabber_chat_buddy_real_name, /* get_cb_real_name */ | |
102 jabber_chat_set_topic, /* set_chat_topic */ | |
103 jabber_find_blist_chat, /* find_blist_chat */ | |
104 jabber_roomlist_get_list, /* roomlist_get_list */ | |
105 jabber_roomlist_cancel, /* roomlist_cancel */ | |
106 NULL, /* roomlist_expand_category */ | |
107 NULL, /* can_receive_file */ | |
108 jabber_si_xfer_send, /* send_file */ | |
109 jabber_si_new_xfer, /* new_xfer */ | |
110 jabber_offline_message, /* offline_message */ | |
111 NULL, /* whiteboard_prpl_ops */ | |
112 jabber_prpl_send_raw, /* send_raw */ | |
113 jabber_roomlist_room_serialize, /* roomlist_room_serialize */ | |
16667
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
114 |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
115 /* padding */ |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
116 NULL, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
117 NULL, |
17866
759cd72bd2ff
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 <pidgin@monitzer.com>
parents:
17865
diff
changeset
|
118 NULL, |
16667
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
119 NULL |
16241 | 120 }; |
121 | |
122 static gboolean load_plugin(PurplePlugin *plugin) | |
123 { | |
124 purple_signal_register(plugin, "jabber-receiving-xmlnode", | |
125 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
126 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
127 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); | |
128 | |
129 purple_signal_register(plugin, "jabber-sending-xmlnode", | |
130 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
131 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
132 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); | |
133 | |
134 purple_signal_register(plugin, "jabber-sending-text", | |
135 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
136 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
137 purple_value_new_outgoing(PURPLE_TYPE_STRING)); | |
138 | |
139 | |
140 return TRUE; | |
141 } | |
142 | |
143 static gboolean unload_plugin(PurplePlugin *plugin) | |
144 { | |
145 purple_signal_unregister(plugin, "jabber-receiving-xmlnode"); | |
146 | |
147 purple_signal_unregister(plugin, "jabber-sending-xmlnode"); | |
148 | |
149 purple_signal_unregister(plugin, "jabber-sending-text"); | |
150 | |
151 return TRUE; | |
152 } | |
153 | |
154 static PurplePluginInfo info = | |
155 { | |
156 PURPLE_PLUGIN_MAGIC, | |
157 PURPLE_MAJOR_VERSION, | |
158 PURPLE_MINOR_VERSION, | |
159 PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
160 NULL, /**< ui_requirement */ | |
161 0, /**< flags */ | |
162 NULL, /**< dependencies */ | |
163 PURPLE_PRIORITY_DEFAULT, /**< priority */ | |
164 | |
165 "prpl-jabber", /**< id */ | |
166 "XMPP", /**< name */ | |
167 VERSION, /**< version */ | |
168 /** summary */ | |
16904
56042b2f8b64
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@wiktel.com>
parents:
16719
diff
changeset
|
169 N_("XMPP Protocol Plugin"), |
16241 | 170 /** description */ |
16904
56042b2f8b64
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@wiktel.com>
parents:
16719
diff
changeset
|
171 N_("XMPP Protocol Plugin"), |
16241 | 172 NULL, /**< author */ |
173 PURPLE_WEBSITE, /**< homepage */ | |
174 | |
175 load_plugin, /**< load */ | |
176 unload_plugin, /**< unload */ | |
177 NULL, /**< destroy */ | |
178 | |
179 NULL, /**< ui_info */ | |
180 &prpl_info, /**< extra_info */ | |
181 NULL, /**< prefs_info */ | |
16667
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
182 jabber_actions, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
183 |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
184 /* padding */ |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
185 NULL, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
186 NULL, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
187 NULL, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
188 NULL |
16241 | 189 }; |
190 | |
191 static void | |
192 init_plugin(PurplePlugin *plugin) | |
193 { | |
194 PurpleAccountUserSplit *split; | |
195 PurpleAccountOption *option; | |
196 | |
16952
919515748253
Handle people forgetting to enter a domain. Also, change 'server,' in the account options to 'domain,' which is its proper name, and hopefully less confusion
Sean Egan <seanegan@gmail.com>
parents:
16951
diff
changeset
|
197 /* Translators: 'domain' is used here in the context of Internet domains, e.g. pidgin.im */ |
16962
b08636a33721
disapproval of revision 'b53a835bb1f153bec412cb4b7b18e9b93829c4d3'
Richard Laager <rlaager@wiktel.com>
parents:
16961
diff
changeset
|
198 split = purple_account_user_split_new(_("Domain"), NULL, '@'); |
16241 | 199 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
200 | |
201 split = purple_account_user_split_new(_("Resource"), "Home", '/'); | |
202 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); | |
203 | |
204 option = purple_account_option_bool_new(_("Force old (port 5223) SSL"), "old_ssl", FALSE); | |
205 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
206 option); | |
207 | |
208 option = purple_account_option_bool_new( | |
209 _("Allow plaintext auth over unencrypted streams"), | |
210 "auth_plain_in_clear", FALSE); | |
211 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
212 option); | |
213 | |
214 option = purple_account_option_int_new(_("Connect port"), "port", 5222); | |
215 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
216 option); | |
217 | |
218 option = purple_account_option_string_new(_("Connect server"), | |
219 "connect_server", NULL); | |
220 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
221 option); | |
222 | |
223 | |
224 jabber_init_plugin(plugin); | |
225 | |
226 purple_prefs_remove("/plugins/prpl/jabber"); | |
227 | |
228 /* XXX - If any other plugin wants SASL this won't be good ... */ | |
229 #ifdef HAVE_CYRUS_SASL | |
230 sasl_client_init(NULL); | |
231 #endif | |
232 jabber_register_commands(); | |
233 | |
234 jabber_iq_init(); | |
17839
0370da969e8a
Implemented adding callbacks for PEP events. Moved the feature list to be application-global instead of per-connection (makes more sense).
Andreas Monitzer <pidgin@monitzer.com>
parents:
16962
diff
changeset
|
235 jabber_pep_init(); |
17862
248d2d0c606e
Forgot to initialize the user tune
Andreas Monitzer <pidgin@monitzer.com>
parents:
17861
diff
changeset
|
236 |
248d2d0c606e
Forgot to initialize the user tune
Andreas Monitzer <pidgin@monitzer.com>
parents:
17861
diff
changeset
|
237 jabber_tune_init(); |
17882
f88b3a093cba
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 <pidgin@monitzer.com>
parents:
17866
diff
changeset
|
238 jabber_caps_init(); |
17854
5ab3c6bb95b4
Implemented receiving other people's avatars via XEP-0084. Note that this code now includes a workaround for a non-spec incompatibility for the current ejabberd PEP implementation, and doesn't use the correct namespace due to Psi using the wrong one (outdated?). Works fine though, and the vcard-based approach is retained.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17853
diff
changeset
|
239 |
17861
91cbd18fee06
svn revision 728 of Psi fixes the avatar namespace issue, so I can remove this workaround.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17857
diff
changeset
|
240 jabber_add_feature("avatarmeta", AVATARNAMESPACEMETA, jabber_pep_namespace_only_when_pep_enabled_cb); |
91cbd18fee06
svn revision 728 of Psi fixes the avatar namespace issue, so I can remove this workaround.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17857
diff
changeset
|
241 jabber_add_feature("avatardata", AVATARNAMESPACEDATA, jabber_pep_namespace_only_when_pep_enabled_cb); |
17854
5ab3c6bb95b4
Implemented receiving other people's avatars via XEP-0084. Note that this code now includes a workaround for a non-spec incompatibility for the current ejabberd PEP implementation, and doesn't use the correct namespace due to Psi using the wrong one (outdated?). Works fine though, and the vcard-based approach is retained.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17853
diff
changeset
|
242 |
17861
91cbd18fee06
svn revision 728 of Psi fixes the avatar namespace issue, so I can remove this workaround.
Andreas Monitzer <pidgin@monitzer.com>
parents:
17857
diff
changeset
|
243 jabber_pep_register_handler("avatar", AVATARNAMESPACEMETA, jabber_buddy_avatar_update_metadata); |
16241 | 244 } |
245 | |
246 | |
247 PURPLE_INIT_PLUGIN(jabber, init_plugin, info); |