comparison libpurple/protocols/jabber/libxmpp.c @ 29957:a694731e8b3f

jabber: Move the initialization into the jabber plugin, and only initialize some things once. This would allow multiple plugins to use the jabber plugin /properly/ (and ref-counted!). Commands still need to be fixed.
author Paul Aurich <paul@darkrain42.org>
date Tue, 09 Mar 2010 18:59:08 +0000
parents 185677f47825
children 93d32ecf3186
comparison
equal deleted inserted replaced
29956:342ed5917f56 29957:a694731e8b3f
130 jabber_get_moods /* get_moods */ 130 jabber_get_moods /* get_moods */
131 }; 131 };
132 132
133 static gboolean load_plugin(PurplePlugin *plugin) 133 static gboolean load_plugin(PurplePlugin *plugin)
134 { 134 {
135 purple_signal_register(plugin, "jabber-receiving-xmlnode", 135 jabber_plugin_init(plugin);
136 purple_marshal_VOID__POINTER_POINTER, NULL, 2,
137 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
138 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));
139
140 purple_signal_register(plugin, "jabber-sending-xmlnode",
141 purple_marshal_VOID__POINTER_POINTER, NULL, 2,
142 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
143 purple_value_new_outgoing(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));
144
145 /*
146 * Do not remove this or the plugin will fail. Completely. You have been
147 * warned!
148 */
149 purple_signal_connect_priority(plugin, "jabber-sending-xmlnode",
150 plugin, PURPLE_CALLBACK(jabber_send_signal_cb),
151 NULL, PURPLE_SIGNAL_PRIORITY_HIGHEST);
152
153 purple_signal_register(plugin, "jabber-sending-text",
154 purple_marshal_VOID__POINTER_POINTER, NULL, 2,
155 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
156 purple_value_new_outgoing(PURPLE_TYPE_STRING));
157
158 purple_signal_register(plugin, "jabber-receiving-message",
159 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER_POINTER,
160 purple_value_new(PURPLE_TYPE_BOOLEAN), 6,
161 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
162 purple_value_new(PURPLE_TYPE_STRING), /* type */
163 purple_value_new(PURPLE_TYPE_STRING), /* id */
164 purple_value_new(PURPLE_TYPE_STRING), /* from */
165 purple_value_new(PURPLE_TYPE_STRING), /* to */
166 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));
167
168 purple_signal_register(plugin, "jabber-receiving-iq",
169 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
170 purple_value_new(PURPLE_TYPE_BOOLEAN), 5,
171 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
172 purple_value_new(PURPLE_TYPE_STRING), /* type */
173 purple_value_new(PURPLE_TYPE_STRING), /* id */
174 purple_value_new(PURPLE_TYPE_STRING), /* from */
175 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));
176
177 purple_signal_register(plugin, "jabber-watched-iq",
178 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
179 purple_value_new(PURPLE_TYPE_BOOLEAN), 5,
180 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
181 purple_value_new(PURPLE_TYPE_STRING), /* type */
182 purple_value_new(PURPLE_TYPE_STRING), /* id */
183 purple_value_new(PURPLE_TYPE_STRING), /* from */
184 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE)); /* child */
185
186 /* Modifying these? Look at jabber_init_plugin for the ipc versions */
187 purple_signal_register(plugin, "jabber-register-namespace-watcher",
188 purple_marshal_VOID__POINTER_POINTER,
189 NULL, 2,
190 purple_value_new(PURPLE_TYPE_STRING), /* node */
191 purple_value_new(PURPLE_TYPE_STRING)); /* namespace */
192
193 purple_signal_register(plugin, "jabber-unregister-namespace-watcher",
194 purple_marshal_VOID__POINTER_POINTER,
195 NULL, 2,
196 purple_value_new(PURPLE_TYPE_STRING), /* node */
197 purple_value_new(PURPLE_TYPE_STRING)); /* namespace */
198
199 purple_signal_connect(plugin, "jabber-register-namespace-watcher",
200 plugin, PURPLE_CALLBACK(jabber_iq_signal_register), NULL);
201 purple_signal_connect(plugin, "jabber-unregister-namespace-watcher",
202 plugin, PURPLE_CALLBACK(jabber_iq_signal_unregister), NULL);
203
204 purple_signal_register(plugin, "jabber-receiving-presence",
205 purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER,
206 purple_value_new(PURPLE_TYPE_BOOLEAN), 4,
207 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_CONNECTION),
208 purple_value_new(PURPLE_TYPE_STRING), /* type */
209 purple_value_new(PURPLE_TYPE_STRING), /* from */
210 purple_value_new(PURPLE_TYPE_SUBTYPE, PURPLE_SUBTYPE_XMLNODE));
211 136
212 return TRUE; 137 return TRUE;
213 } 138 }
214 139
215 static gboolean unload_plugin(PurplePlugin *plugin) 140 static gboolean unload_plugin(PurplePlugin *plugin)
216 { 141 {
217 purple_signals_unregister_by_instance(plugin); 142 jabber_plugin_uninit(plugin);
218
219 /* reverse order of init_plugin */
220 jabber_bosh_uninit();
221 jabber_data_uninit();
222 jabber_si_uninit();
223 jabber_ibb_uninit();
224 /* PEP things should be uninit via jabber_pep_uninit, not here */
225 jabber_pep_uninit();
226 jabber_caps_uninit();
227 jabber_iq_uninit();
228
229 jabber_unregister_commands();
230
231 /* Stay on target...stay on target... Almost there... */
232 jabber_uninit_plugin(plugin);
233 143
234 return TRUE; 144 return TRUE;
235 } 145 }
236 146
237 static PurplePluginInfo info = 147 static PurplePluginInfo info =
400 "custom_smileys", TRUE); 310 "custom_smileys", TRUE);
401 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, 311 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
402 option); 312 option);
403 313
404 my_protocol = plugin; 314 my_protocol = plugin;
405 jabber_init_plugin(plugin);
406 315
407 purple_prefs_remove("/plugins/prpl/jabber"); 316 purple_prefs_remove("/plugins/prpl/jabber");
408 317
409 /* XXX - If any other plugin wants SASL this won't be good ... */ 318 /* XXX - If any other plugin wants SASL this won't be good ... */
410 #ifdef HAVE_CYRUS_SASL 319 #ifdef HAVE_CYRUS_SASL
421 #ifdef _WIN32 330 #ifdef _WIN32
422 /* Restore the original error mode */ 331 /* Restore the original error mode */
423 SetErrorMode(old_error_mode); 332 SetErrorMode(old_error_mode);
424 #endif 333 #endif
425 #endif 334 #endif
426 jabber_register_commands();
427
428 /* reverse order of unload_plugin */
429 jabber_iq_init();
430 jabber_caps_init();
431 /* PEP things should be init via jabber_pep_init, not here */
432 jabber_pep_init();
433 jabber_data_init();
434 jabber_bosh_init();
435
436 /* TODO: Implement adding and retrieving own features via IPC API */
437
438 jabber_ibb_init();
439 jabber_si_init();
440 335
441 purple_signal_connect(purple_get_core(), "uri-handler", plugin, 336 purple_signal_connect(purple_get_core(), "uri-handler", plugin,
442 PURPLE_CALLBACK(xmpp_uri_handler), NULL); 337 PURPLE_CALLBACK(xmpp_uri_handler), NULL);
443 } 338 }
444 339