Mercurial > pidgin.yaz
annotate src/connection.c @ 12233:02833a0ae716
[gaim-migrate @ 14535]
SF Patch #1367116 from Michael Carlson
"In profiling gaim, I noticed that on simply starting
CVS gaim, xmlnode_insert_child is using up by far the
most CPU time. After some testing, I realized the
reason why: xmlnode_insert_child is called some 18,000
times on startup, and it is inserting the child at the
end of the list each time, simply by traversing through
the entire linked list. Sometimes this list can have as
many as 800 elements.
This patch adds a variable to the _xmlnode struct,
lastchild, which simply keeps track of the last node in
the list of children. This is then used by
xmlnode_insert_child to insert at the end of the list,
instead of traversing through the whole list each time.
The two relevant functions in xmlnode.c that need to be
updated to keep track of this function appropriately
have been updated.
Running 3 times with and without the change, the
results from oprofile say it all. Here are the measured
number of clock cycles / % of total clock cycles /
function used to simply start and close gaim before the
change:
204 60.7143 xmlnode_insert_child
210 61.4035 xmlnode_insert_child
230 61.8280 xmlnode_insert_child
And after (note that one time no clock cycles were
caught at all)
3 2.5862 xmlnode_insert_child
3 2.5641 xmlnode_insert_child
This affects other areas of the program than just
starting up, but this seems to be the most noticeable
place."
Speed is good. As I was verifying this patch, I added some g_return_val_if_fail() checks.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 27 Nov 2005 03:42:39 +0000 |
parents | 312efb43c49a |
children | 3ef381cdc47e |
rev | line source |
---|---|
5563 | 1 /** |
2 * @file connection.c Connection API | |
3 * @ingroup core | |
4 * | |
5 * gaim | |
6 * | |
8046 | 7 * Gaim is the legal property of its developers, whose names are too numerous |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
5631 | 10 * |
5563 | 11 * This program is free software; you can redistribute it and/or modify |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
25 #include "internal.h" |
10740 | 26 #include "account.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
27 #include "blist.h" |
5563 | 28 #include "connection.h" |
11146 | 29 #include "dbus-maybe.h" |
5717 | 30 #include "debug.h" |
10751 | 31 #include "gaim.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
32 #include "log.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
33 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
34 #include "prefs.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
35 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
36 #include "server.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
37 #include "signals.h" |
6106 | 38 #include "util.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
39 |
5563 | 40 static GList *connections = NULL; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
41 static GList *connections_connecting = NULL; |
5563 | 42 static GaimConnectionUiOps *connection_ui_ops = NULL; |
43 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
44 static int connections_handle; |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
45 |
10745 | 46 static gboolean |
47 send_keepalive(gpointer data) | |
48 { | |
49 GaimConnection *gc = data; | |
50 GaimPluginProtocolInfo *prpl_info = NULL; | |
51 | |
52 if (gc != NULL && gc->prpl != NULL) | |
53 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
54 | |
55 if (prpl_info && prpl_info->keepalive) | |
56 prpl_info->keepalive(gc); | |
57 | |
58 return TRUE; | |
59 } | |
60 | |
61 static void | |
62 update_keepalive(GaimConnection *gc, gboolean on) | |
63 { | |
64 if (on && !gc->keepalive) | |
65 { | |
66 gaim_debug_info("connection", "Activating keepalive.\n"); | |
67 gc->keepalive = gaim_timeout_add(30000, send_keepalive, gc); | |
68 } | |
69 else if (!on && gc->keepalive > 0) | |
70 { | |
71 gaim_debug_info("connection", "Deactivating keepalive.\n"); | |
72 gaim_timeout_remove(gc->keepalive); | |
73 gc->keepalive = 0; | |
74 } | |
75 } | |
76 | |
10740 | 77 void |
78 gaim_connection_new(GaimAccount *account, gboolean regist, const char *password) | |
5563 | 79 { |
80 GaimConnection *gc; | |
10740 | 81 GaimPlugin *prpl; |
82 GaimPluginProtocolInfo *prpl_info; | |
5563 | 83 |
10740 | 84 g_return_if_fail(account != NULL); |
85 | |
11251 | 86 if (!gaim_account_is_disconnected(account)) |
10755 | 87 return; |
88 | |
10740 | 89 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); |
90 | |
91 if (prpl != NULL) | |
92 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
93 else { | |
94 gchar *message; | |
95 | |
96 message = g_strdup_printf(_("Missing protocol plugin for %s"), | |
97 gaim_account_get_username(account)); | |
98 gaim_notify_error(NULL, regist ? _("Registration Error") : | |
99 _("Connection Error"), message, NULL); | |
100 g_free(message); | |
101 return; | |
102 } | |
103 | |
104 if (regist) | |
105 { | |
106 if (prpl_info->register_user == NULL) | |
107 return; | |
108 } | |
109 else | |
110 { | |
10751 | 111 if (((password == NULL) || (*password == '\0')) && |
10740 | 112 !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && |
113 !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) | |
114 { | |
115 gaim_debug_error("connection", "Can not connect to account %s without " | |
116 "a password.\n", gaim_account_get_username(account)); | |
117 return; | |
118 } | |
119 } | |
5563 | 120 |
121 gc = g_new0(GaimConnection, 1); | |
11146 | 122 GAIM_DBUS_REGISTER_POINTER(gc, GaimConnection); |
123 | |
10740 | 124 gc->prpl = prpl; |
10751 | 125 if ((password != NULL) && (*password != '\0')) |
126 gc->password = g_strdup(password); | |
5563 | 127 gaim_connection_set_account(gc, account); |
10740 | 128 gaim_connection_set_state(gc, GAIM_CONNECTING); |
129 connections = g_list_append(connections, gc); | |
5563 | 130 gaim_account_set_connection(account, gc); |
131 | |
10740 | 132 gaim_signal_emit(gaim_connections_get_handle(), "signing-on", gc); |
133 | |
134 if (regist) | |
135 { | |
10816
c94f40ffcafb
[gaim-migrate @ 12471]
Luke Schierer <lschiere@pidgin.im>
parents:
10812
diff
changeset
|
136 gaim_debug_info("connection", "Registering. gc = %p\n", gc); |
10740 | 137 |
138 /* set this so we don't auto-reconnect after registering */ | |
139 gc->wants_to_die = TRUE; | |
140 | |
141 prpl_info->register_user(account); | |
142 } | |
143 else | |
144 { | |
145 gaim_debug_info("connection", "Connecting. gc = %p\n", gc); | |
146 | |
147 gaim_signal_emit(gaim_accounts_get_handle(), "account-connecting", account); | |
11837 | 148 prpl_info->login(account); |
10740 | 149 } |
5563 | 150 } |
151 | |
152 void | |
153 gaim_connection_destroy(GaimConnection *gc) | |
154 { | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
155 GaimAccount *account; |
10840 | 156 #if 0 |
10754 | 157 GList *wins; |
10840 | 158 #endif |
10754 | 159 GaimPluginProtocolInfo *prpl_info = NULL; |
11507 | 160 gboolean remove = FALSE; |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
161 |
5563 | 162 g_return_if_fail(gc != NULL); |
163 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
164 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
165 |
10754 | 166 gaim_debug_info("connection", "Disconnecting connection %p\n", gc); |
167 | |
168 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) | |
11507 | 169 remove = TRUE; |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
170 |
10754 | 171 gaim_signal_emit(gaim_connections_get_handle(), "signing-off", gc); |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
172 |
10754 | 173 while (gc->buddy_chats) |
174 { | |
175 GaimConversation *b = gc->buddy_chats->data; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
176 |
10754 | 177 gc->buddy_chats = g_slist_remove(gc->buddy_chats, b); |
178 gaim_conv_chat_left(GAIM_CONV_CHAT(b)); | |
179 } | |
10745 | 180 |
10754 | 181 update_keepalive(gc, FALSE); |
10745 | 182 |
10754 | 183 if (gc->prpl != NULL) |
184 { | |
185 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
10745 | 186 |
10754 | 187 if (prpl_info->close) |
188 (prpl_info->close)(gc); | |
189 } | |
5563 | 190 |
10754 | 191 connections = g_list_remove(connections, gc); |
5563 | 192 |
10754 | 193 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
194 |
11507 | 195 if (remove) |
196 gaim_blist_remove_account(account); | |
197 | |
10754 | 198 gaim_signal_emit(gaim_connections_get_handle(), "signed-off", gc); |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
199 |
10827 | 200 #if 0 |
10840 | 201 /* see comment later in file on if 0'd same code */ |
10754 | 202 /* |
203 * XXX This is a hack! Remove this and replace it with a better event | |
204 * notification system. | |
205 */ | |
206 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
207 GaimConvWindow *win = (GaimConvWindow *)wins->data; | |
208 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), | |
209 GAIM_CONV_ACCOUNT_OFFLINE); | |
210 } | |
10827 | 211 #endif |
10742 | 212 |
10754 | 213 gaim_request_close_with_handle(gc); |
214 gaim_notify_close_with_handle(gc); | |
5563 | 215 |
10742 | 216 gaim_debug_info("connection", "Destroying connection %p\n", gc); |
217 | |
218 gaim_account_set_connection(account, NULL); | |
219 | |
220 if (gc->password != NULL) | |
221 g_free(gc->password); | |
5563 | 222 |
10742 | 223 if (gc->display_name != NULL) |
224 g_free(gc->display_name); | |
9848 | 225 |
10742 | 226 if (gc->disconnect_timeout) |
227 gaim_timeout_remove(gc->disconnect_timeout); | |
6029 | 228 |
11146 | 229 GAIM_DBUS_UNREGISTER_POINTER(gc); |
10742 | 230 g_free(gc); |
6029 | 231 } |
232 | |
5563 | 233 /* |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
234 * d:)->-< |
5563 | 235 * |
236 * d:O-\-< | |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
237 * |
5563 | 238 * d:D-/-< |
239 * | |
240 * d8D->-< DANCE! | |
241 */ | |
242 | |
243 void | |
244 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
245 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
246 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
247 |
5563 | 248 g_return_if_fail(gc != NULL); |
249 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
250 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
251 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
252 |
5563 | 253 gc->state = state; |
254 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
255 ops = gaim_connections_get_ui_ops(); |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
256 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
257 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
258 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
259 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
260 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
261 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
262 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
263 |
5563 | 264 if (gc->state == GAIM_CONNECTED) { |
10840 | 265 #if 0 |
5563 | 266 GList *wins; |
10840 | 267 #endif |
10052 | 268 GaimAccount *account; |
269 GaimPresence *presence; | |
270 | |
271 account = gaim_connection_get_account(gc); | |
272 presence = gaim_account_get_presence(account); | |
5563 | 273 |
274 /* Set the time the account came online */ | |
11973 | 275 gaim_presence_set_login_time(presence, time(NULL)); |
5563 | 276 |
11698 | 277 if (gaim_prefs_get_bool("/core/logging/log_system")) |
278 { | |
10301 | 279 GaimLog *log = gaim_account_get_log(account); |
11975 | 280 char *msg = g_strdup_printf(_("+++ %s signed on"), |
10301 | 281 gaim_account_get_username(account)); |
282 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
11973 | 283 gaim_account_get_username(account), |
284 gaim_presence_get_login_time(presence), | |
10301 | 285 msg); |
286 g_free(msg); | |
287 } | |
288 | |
5563 | 289 if (ops != NULL && ops->connected != NULL) |
290 ops->connected(gc); | |
291 | |
8573 | 292 gaim_blist_add_account(account); |
5563 | 293 |
294 /* | |
295 * XXX This is a hack! Remove this and replace it with a better event | |
296 * notification system. | |
297 */ | |
10827 | 298 #if 0 |
299 /* This looks like it was horribly broken before I got here... */ | |
300 /* Why is it updating the first tab of each window? */ | |
5563 | 301 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
302 GaimConvWindow *win = (GaimConvWindow *)wins->data; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
303 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), |
5563 | 304 GAIM_CONV_ACCOUNT_ONLINE); |
305 } | |
10827 | 306 #endif |
12089 | 307 time(&gc->last_sent_time); /* Start the idle count from here */ |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
308 gaim_signal_emit(gaim_connections_get_handle(), "signed-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
309 |
5563 | 310 serv_set_permit_deny(gc); |
10745 | 311 |
312 update_keepalive(gc, TRUE); | |
10751 | 313 |
314 if (gaim_account_get_user_info(account) != NULL) | |
315 serv_set_info(gc, gaim_account_get_user_info(account)); | |
5563 | 316 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
317 else if (gc->state == GAIM_DISCONNECTED) { |
8573 | 318 GaimAccount *account = gaim_connection_get_account(gc); |
319 | |
11698 | 320 if (gaim_prefs_get_bool("/core/logging/log_system")) |
321 { | |
8573 | 322 GaimLog *log = gaim_account_get_log(account); |
11975 | 323 char *msg = g_strdup_printf(_("+++ %s signed off"), |
8573 | 324 gaim_account_get_username(account)); |
325 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
326 gaim_account_get_username(account), time(NULL), | |
327 msg); | |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
328 g_free(msg); |
8573 | 329 } |
330 | |
331 gaim_account_destroy_log(account); | |
332 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
333 if (ops != NULL && ops->disconnected != NULL) |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
334 ops->disconnected(gc); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
335 } |
5563 | 336 } |
337 | |
338 void | |
339 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
340 { | |
341 g_return_if_fail(gc != NULL); | |
342 g_return_if_fail(account != NULL); | |
343 | |
344 gc->account = account; | |
345 } | |
346 | |
347 void | |
348 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
349 { | |
350 g_return_if_fail(gc != NULL); | |
351 | |
352 if (gc->display_name != NULL) | |
353 g_free(gc->display_name); | |
354 | |
355 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
356 } | |
357 | |
358 GaimConnectionState | |
359 gaim_connection_get_state(const GaimConnection *gc) | |
360 { | |
361 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
362 | |
363 return gc->state; | |
364 } | |
365 | |
366 GaimAccount * | |
367 gaim_connection_get_account(const GaimConnection *gc) | |
368 { | |
369 g_return_val_if_fail(gc != NULL, NULL); | |
370 | |
371 return gc->account; | |
372 } | |
373 | |
374 const char * | |
10740 | 375 gaim_connection_get_password(const GaimConnection *gc) |
376 { | |
377 g_return_val_if_fail(gc != NULL, NULL); | |
378 | |
379 return gc->password; | |
380 } | |
381 | |
382 const char * | |
5563 | 383 gaim_connection_get_display_name(const GaimConnection *gc) |
384 { | |
385 g_return_val_if_fail(gc != NULL, NULL); | |
386 | |
387 return gc->display_name; | |
388 } | |
389 | |
390 void | |
391 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
392 size_t step, size_t count) | |
393 { | |
394 GaimConnectionUiOps *ops; | |
395 | |
396 g_return_if_fail(gc != NULL); | |
397 g_return_if_fail(text != NULL); | |
398 g_return_if_fail(step < count); | |
399 g_return_if_fail(count > 1); | |
400 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
401 ops = gaim_connections_get_ui_ops(); |
5563 | 402 |
403 if (ops != NULL && ops->connect_progress != NULL) | |
404 ops->connect_progress(gc, text, step, count); | |
405 } | |
406 | |
407 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
408 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
409 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
410 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
411 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
412 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
413 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
414 |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
415 ops = gaim_connections_get_ui_ops(); |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
416 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
417 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
418 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
419 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
420 |
10742 | 421 gboolean |
422 gaim_connection_disconnect_cb(gpointer data) | |
423 { | |
424 GaimAccount *account = data; | |
11562 | 425 char *password = g_strdup(gaim_account_get_password(account)); |
10742 | 426 gaim_account_disconnect(account); |
11562 | 427 gaim_account_set_password(account, password); |
428 g_free(password); | |
10742 | 429 return FALSE; |
430 } | |
431 | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
432 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
433 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
434 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
435 GaimConnectionUiOps *ops; |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
436 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
437 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
438 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
439 |
6393 | 440 /* If we've already got one error, we don't need any more */ |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
441 if (gc->disconnect_timeout) |
6393 | 442 return; |
443 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
444 ops = gaim_connections_get_ui_ops(); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
445 |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
446 if (ops != NULL) { |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
447 if (ops->report_disconnect != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
448 ops->report_disconnect(gc, text); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
449 } |
5727 | 450 |
8273
f24172f53650
[gaim-migrate @ 8997]
Christian Hammond <chipx86@chipx86.com>
parents:
8131
diff
changeset
|
451 gc->disconnect_timeout = gaim_timeout_add(0, gaim_connection_disconnect_cb, |
6076 | 452 gaim_connection_get_account(gc)); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
453 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
454 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
455 void |
5563 | 456 gaim_connections_disconnect_all(void) |
457 { | |
458 GList *l; | |
6113 | 459 GaimConnection *gc; |
5563 | 460 |
6113 | 461 while ((l = gaim_connections_get_all()) != NULL) { |
462 gc = l->data; | |
463 gc->wants_to_die = TRUE; | |
10742 | 464 gaim_account_disconnect(gc->account); |
6113 | 465 } |
5563 | 466 } |
467 | |
468 GList * | |
469 gaim_connections_get_all(void) | |
470 { | |
471 return connections; | |
472 } | |
473 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
474 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
475 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
476 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
477 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
478 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
479 |
5563 | 480 void |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
481 gaim_connections_set_ui_ops(GaimConnectionUiOps *ops) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
482 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
483 connection_ui_ops = ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
484 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
485 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
486 GaimConnectionUiOps * |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
487 gaim_connections_get_ui_ops(void) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
488 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
489 return connection_ui_ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
490 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
491 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
492 void |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
493 gaim_connections_init(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
494 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
495 void *handle = gaim_connections_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
496 |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
497 gaim_signal_register(handle, "signing-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
498 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
499 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
500 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
501 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
502 gaim_signal_register(handle, "signed-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
503 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
504 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
505 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
506 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
507 gaim_signal_register(handle, "signing-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
508 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
509 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
510 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
511 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
512 gaim_signal_register(handle, "signed-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
513 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
514 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
515 GAIM_SUBTYPE_CONNECTION)); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
516 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
517 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
518 void |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
519 gaim_connections_uninit(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
520 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
521 gaim_signals_unregister_by_instance(gaim_connections_get_handle()); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
522 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
523 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
524 void * |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
525 gaim_connections_get_handle(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
526 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
527 return &connections_handle; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
528 } |