Mercurial > pidgin
annotate libpurple/protocols/jabber/libxmpp.c @ 18037:e3e42a99070e
jabber can contain @ symbols and / in the resource, so we have to look for
the split characters from the beginning of the username
I'm not particularly happy with the name 'reverse' for this, but I'm
not feeling creative enough at the moment to come up with something better.
If someone comes up with something better before 2.1.0, feel free to change it.
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Mon, 04 Jun 2007 04:37:07 +0000 |
parents | 62a71bb085ef |
children | 40d51793f2d7 |
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" | |
41 | |
42 static PurplePluginProtocolInfo prpl_info = | |
43 { | |
44 #ifdef HAVE_CYRUS_SASL | |
45 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | | |
18030
62a71bb085ef
Mostly taken from the patch on ticket #410, don't send unknown slash
Stu Tomlinson <stu@nosnilmot.com>
parents:
16962
diff
changeset
|
46 OPT_PROTO_MAIL_CHECK | OPT_PROTO_PASSWORD_OPTIONAL | |
62a71bb085ef
Mostly taken from the patch on ticket #410, don't send unknown slash
Stu Tomlinson <stu@nosnilmot.com>
parents:
16962
diff
changeset
|
47 OPT_PROTO_SLASH_COMMANDS_NATIVE, |
16241 | 48 #else |
18030
62a71bb085ef
Mostly taken from the patch on ticket #410, don't send unknown slash
Stu Tomlinson <stu@nosnilmot.com>
parents:
16962
diff
changeset
|
49 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | OPT_PROTO_MAIL_CHECK | |
62a71bb085ef
Mostly taken from the patch on ticket #410, don't send unknown slash
Stu Tomlinson <stu@nosnilmot.com>
parents:
16962
diff
changeset
|
50 OPT_PROTO_SLASH_COMMANDS_NATIVE, |
16241 | 51 #endif |
52 NULL, /* user_splits */ | |
53 NULL, /* protocol_options */ | |
54 {"png,gif,jpeg", 32, 32, 96, 96, 8191, PURPLE_ICON_SCALE_SEND | PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ | |
55 jabber_list_icon, /* list_icon */ | |
56 jabber_list_emblem, /* list_emblems */ | |
57 jabber_status_text, /* status_text */ | |
58 jabber_tooltip_text, /* tooltip_text */ | |
59 jabber_status_types, /* status_types */ | |
60 jabber_blist_node_menu, /* blist_node_menu */ | |
61 jabber_chat_info, /* chat_info */ | |
62 jabber_chat_info_defaults, /* chat_info_defaults */ | |
63 jabber_login, /* login */ | |
64 jabber_close, /* close */ | |
65 jabber_message_send_im, /* send_im */ | |
66 jabber_set_info, /* set_info */ | |
67 jabber_send_typing, /* send_typing */ | |
68 jabber_buddy_get_info, /* get_info */ | |
69 jabber_presence_send, /* set_away */ | |
70 jabber_idle_set, /* set_idle */ | |
71 NULL, /* change_passwd */ | |
72 jabber_roster_add_buddy, /* add_buddy */ | |
73 NULL, /* add_buddies */ | |
74 jabber_roster_remove_buddy, /* remove_buddy */ | |
75 NULL, /* remove_buddies */ | |
76 NULL, /* add_permit */ | |
77 jabber_google_roster_add_deny, /* add_deny */ | |
78 NULL, /* rem_permit */ | |
79 jabber_google_roster_rem_deny, /* rem_deny */ | |
80 NULL, /* set_permit_deny */ | |
81 jabber_chat_join, /* join_chat */ | |
82 NULL, /* reject_chat */ | |
83 jabber_get_chat_name, /* get_chat_name */ | |
84 jabber_chat_invite, /* chat_invite */ | |
85 jabber_chat_leave, /* chat_leave */ | |
86 NULL, /* chat_whisper */ | |
87 jabber_message_send_chat, /* chat_send */ | |
88 jabber_keepalive, /* keepalive */ | |
89 jabber_register_account, /* register_user */ | |
90 jabber_buddy_get_info_chat, /* get_cb_info */ | |
91 NULL, /* get_cb_away */ | |
92 jabber_roster_alias_change, /* alias_buddy */ | |
93 jabber_roster_group_change, /* group_buddy */ | |
94 jabber_roster_group_rename, /* rename_group */ | |
95 NULL, /* buddy_free */ | |
96 jabber_convo_closed, /* convo_closed */ | |
97 jabber_normalize, /* normalize */ | |
98 jabber_set_buddy_icon, /* set_buddy_icon */ | |
99 NULL, /* remove_group */ | |
100 jabber_chat_buddy_real_name, /* get_cb_real_name */ | |
101 jabber_chat_set_topic, /* set_chat_topic */ | |
102 jabber_find_blist_chat, /* find_blist_chat */ | |
103 jabber_roomlist_get_list, /* roomlist_get_list */ | |
104 jabber_roomlist_cancel, /* roomlist_cancel */ | |
105 NULL, /* roomlist_expand_category */ | |
106 NULL, /* can_receive_file */ | |
107 jabber_si_xfer_send, /* send_file */ | |
108 jabber_si_new_xfer, /* new_xfer */ | |
109 jabber_offline_message, /* offline_message */ | |
110 NULL, /* whiteboard_prpl_ops */ | |
111 jabber_prpl_send_raw, /* send_raw */ | |
112 jabber_roomlist_room_serialize, /* roomlist_room_serialize */ | |
16667
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
113 |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
114 /* padding */ |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
115 NULL, |
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, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
118 NULL |
16241 | 119 }; |
120 | |
121 static gboolean load_plugin(PurplePlugin *plugin) | |
122 { | |
123 purple_signal_register(plugin, "jabber-receiving-xmlnode", | |
124 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
125 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
126 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); | |
127 | |
128 purple_signal_register(plugin, "jabber-sending-xmlnode", | |
129 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
130 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
131 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); | |
132 | |
133 purple_signal_register(plugin, "jabber-sending-text", | |
134 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | |
135 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION), | |
136 purple_value_new_outgoing(PURPLE_TYPE_STRING)); | |
137 | |
138 | |
139 return TRUE; | |
140 } | |
141 | |
142 static gboolean unload_plugin(PurplePlugin *plugin) | |
143 { | |
144 purple_signal_unregister(plugin, "jabber-receiving-xmlnode"); | |
145 | |
146 purple_signal_unregister(plugin, "jabber-sending-xmlnode"); | |
147 | |
148 purple_signal_unregister(plugin, "jabber-sending-text"); | |
149 | |
150 return TRUE; | |
151 } | |
152 | |
153 static PurplePluginInfo info = | |
154 { | |
155 PURPLE_PLUGIN_MAGIC, | |
156 PURPLE_MAJOR_VERSION, | |
157 PURPLE_MINOR_VERSION, | |
158 PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
159 NULL, /**< ui_requirement */ | |
160 0, /**< flags */ | |
161 NULL, /**< dependencies */ | |
162 PURPLE_PRIORITY_DEFAULT, /**< priority */ | |
163 | |
164 "prpl-jabber", /**< id */ | |
165 "XMPP", /**< name */ | |
166 VERSION, /**< version */ | |
167 /** summary */ | |
16904
56042b2f8b64
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@wiktel.com>
parents:
16719
diff
changeset
|
168 N_("XMPP Protocol Plugin"), |
16241 | 169 /** description */ |
16904
56042b2f8b64
s/Jabber/XMPP in user-visible places.
Richard Laager <rlaager@wiktel.com>
parents:
16719
diff
changeset
|
170 N_("XMPP Protocol Plugin"), |
16241 | 171 NULL, /**< author */ |
172 PURPLE_WEBSITE, /**< homepage */ | |
173 | |
174 load_plugin, /**< load */ | |
175 unload_plugin, /**< unload */ | |
176 NULL, /**< destroy */ | |
177 | |
178 NULL, /**< ui_info */ | |
179 &prpl_info, /**< extra_info */ | |
180 NULL, /**< prefs_info */ | |
16667
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
181 jabber_actions, |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
182 |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
183 /* padding */ |
a338acd14365
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16241
diff
changeset
|
184 NULL, |
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 |
16241 | 188 }; |
189 | |
190 static void | |
191 init_plugin(PurplePlugin *plugin) | |
192 { | |
193 PurpleAccountUserSplit *split; | |
194 PurpleAccountOption *option; | |
195 | |
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
|
196 /* 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
|
197 split = purple_account_user_split_new(_("Domain"), NULL, '@'); |
18037
e3e42a99070e
jabber can contain @ symbols and / in the resource, so we have to look for
Nathan Walp <nwalp@pidgin.im>
parents:
18030
diff
changeset
|
198 purple_account_user_split_set_reverse(split, FALSE); |
16241 | 199 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
200 | |
201 split = purple_account_user_split_new(_("Resource"), "Home", '/'); | |
18037
e3e42a99070e
jabber can contain @ symbols and / in the resource, so we have to look for
Nathan Walp <nwalp@pidgin.im>
parents:
18030
diff
changeset
|
202 purple_account_user_split_set_reverse(split, FALSE); |
16241 | 203 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
204 | |
205 option = purple_account_option_bool_new(_("Force old (port 5223) SSL"), "old_ssl", FALSE); | |
206 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
207 option); | |
208 | |
209 option = purple_account_option_bool_new( | |
210 _("Allow plaintext auth over unencrypted streams"), | |
211 "auth_plain_in_clear", FALSE); | |
212 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
213 option); | |
214 | |
215 option = purple_account_option_int_new(_("Connect port"), "port", 5222); | |
216 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
217 option); | |
218 | |
219 option = purple_account_option_string_new(_("Connect server"), | |
220 "connect_server", NULL); | |
221 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, | |
222 option); | |
223 | |
224 | |
225 jabber_init_plugin(plugin); | |
226 | |
227 purple_prefs_remove("/plugins/prpl/jabber"); | |
228 | |
229 /* XXX - If any other plugin wants SASL this won't be good ... */ | |
230 #ifdef HAVE_CYRUS_SASL | |
231 sasl_client_init(NULL); | |
232 #endif | |
233 jabber_register_commands(); | |
234 | |
235 jabber_iq_init(); | |
236 } | |
237 | |
238 | |
239 PURPLE_INIT_PLUGIN(jabber, init_plugin, info); |