Mercurial > pidgin.yaz
annotate src/connection.c @ 10812:d087e928ffd1
[gaim-migrate @ 12465]
" A variety of spacing normalization I've done as I've
navigated the source making other changes. The specific
changes should be uncontroversial. I'm submitting these to
shrink the deltas between my local tree and the CVS
source. If spacing changes are unwelcome as a general
rule, let me know." --rlaager
I said not to do this sort of patch often.
also a spelling fix.
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Mon, 11 Apr 2005 04:32:26 +0000 |
parents | fffc664d5294 |
children | c94f40ffcafb |
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" |
5717 | 29 #include "debug.h" |
10751 | 30 #include "gaim.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
31 #include "log.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
32 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
33 #include "prefs.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
34 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
35 #include "server.h" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
36 #include "signals.h" |
6106 | 37 #include "util.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
38 |
5563 | 39 static GList *connections = NULL; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
40 static GList *connections_connecting = NULL; |
5563 | 41 static GaimConnectionUiOps *connection_ui_ops = NULL; |
42 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
43 static int connections_handle; |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
44 |
10745 | 45 static gboolean |
46 send_keepalive(gpointer data) | |
47 { | |
48 GaimConnection *gc = data; | |
49 GaimPluginProtocolInfo *prpl_info = NULL; | |
50 | |
51 if (gc != NULL && gc->prpl != NULL) | |
52 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
53 | |
54 if (prpl_info && prpl_info->keepalive) | |
55 prpl_info->keepalive(gc); | |
56 | |
57 return TRUE; | |
58 } | |
59 | |
60 static void | |
61 update_keepalive(GaimConnection *gc, gboolean on) | |
62 { | |
63 if (on && !gc->keepalive) | |
64 { | |
65 gaim_debug_info("connection", "Activating keepalive.\n"); | |
66 gc->keepalive = gaim_timeout_add(30000, send_keepalive, gc); | |
67 } | |
68 else if (!on && gc->keepalive > 0) | |
69 { | |
70 gaim_debug_info("connection", "Deactivating keepalive.\n"); | |
71 gaim_timeout_remove(gc->keepalive); | |
72 gc->keepalive = 0; | |
73 } | |
74 } | |
75 | |
10740 | 76 void |
77 gaim_connection_new(GaimAccount *account, gboolean regist, const char *password) | |
5563 | 78 { |
79 GaimConnection *gc; | |
10740 | 80 GaimPlugin *prpl; |
81 GaimPluginProtocolInfo *prpl_info; | |
5563 | 82 |
10740 | 83 g_return_if_fail(account != NULL); |
84 | |
10755 | 85 if (gaim_account_is_connected(account)) |
86 return; | |
87 | |
10740 | 88 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); |
89 | |
90 if (prpl != NULL) | |
91 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
92 else { | |
93 gchar *message; | |
94 | |
95 message = g_strdup_printf(_("Missing protocol plugin for %s"), | |
96 gaim_account_get_username(account)); | |
97 gaim_notify_error(NULL, regist ? _("Registration Error") : | |
98 _("Connection Error"), message, NULL); | |
99 g_free(message); | |
100 return; | |
101 } | |
102 | |
103 if (regist) | |
104 { | |
105 if (prpl_info->register_user == NULL) | |
106 return; | |
107 } | |
108 else | |
109 { | |
10751 | 110 if (((password == NULL) || (*password == '\0')) && |
10740 | 111 !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && |
112 !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) | |
113 { | |
114 gaim_debug_error("connection", "Can not connect to account %s without " | |
115 "a password.\n", gaim_account_get_username(account)); | |
116 return; | |
117 } | |
118 } | |
5563 | 119 |
120 gc = g_new0(GaimConnection, 1); | |
10740 | 121 gc->prpl = prpl; |
10751 | 122 if ((password != NULL) && (*password != '\0')) |
123 gc->password = g_strdup(password); | |
5563 | 124 gaim_connection_set_account(gc, account); |
10740 | 125 gaim_connection_set_state(gc, GAIM_CONNECTING); |
126 connections = g_list_append(connections, gc); | |
5563 | 127 gaim_account_set_connection(account, gc); |
128 | |
10740 | 129 gaim_signal_emit(gaim_connections_get_handle(), "signing-on", gc); |
130 | |
131 if (regist) | |
132 { | |
10812
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10755
diff
changeset
|
133 gaim_debug_info("connection", "Registering. gc = %p\n", gc); |
10740 | 134 |
135 /* set this so we don't auto-reconnect after registering */ | |
136 gc->wants_to_die = TRUE; | |
137 | |
138 prpl_info->register_user(account); | |
139 } | |
140 else | |
141 { | |
142 gaim_debug_info("connection", "Connecting. gc = %p\n", gc); | |
143 | |
144 gaim_signal_emit(gaim_accounts_get_handle(), "account-connecting", account); | |
145 prpl_info->login(account, gaim_account_get_active_status(account)); | |
146 } | |
5563 | 147 } |
148 | |
149 void | |
150 gaim_connection_destroy(GaimConnection *gc) | |
151 { | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
152 GaimAccount *account; |
10754 | 153 GList *wins; |
154 GaimPresence *presence = NULL; | |
155 GaimPluginProtocolInfo *prpl_info = NULL; | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
156 |
5563 | 157 g_return_if_fail(gc != NULL); |
158 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
159 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
160 |
10754 | 161 gaim_debug_info("connection", "Disconnecting connection %p\n", gc); |
162 | |
163 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) | |
164 gaim_blist_remove_account(account); | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
165 |
10754 | 166 gaim_signal_emit(gaim_connections_get_handle(), "signing-off", gc); |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
167 |
10754 | 168 while (gc->buddy_chats) |
169 { | |
170 GaimConversation *b = gc->buddy_chats->data; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
171 |
10754 | 172 gc->buddy_chats = g_slist_remove(gc->buddy_chats, b); |
173 gaim_conv_chat_left(GAIM_CONV_CHAT(b)); | |
174 } | |
10745 | 175 |
10754 | 176 if (gc->idle_timer > 0) |
177 gaim_timeout_remove(gc->idle_timer); | |
178 gc->idle_timer = 0; | |
10745 | 179 |
10754 | 180 update_keepalive(gc, FALSE); |
10745 | 181 |
10754 | 182 if (gc->prpl != NULL) |
183 { | |
184 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
10745 | 185 |
10754 | 186 if (prpl_info->close) |
187 (prpl_info->close)(gc); | |
188 } | |
5563 | 189 |
10754 | 190 connections = g_list_remove(connections, gc); |
5563 | 191 |
10754 | 192 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
193 |
10754 | 194 /* LOG system_log(log_signoff, gc, NULL, |
195 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); */ | |
196 gaim_signal_emit(gaim_connections_get_handle(), "signed-off", gc); | |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
197 |
10754 | 198 presence = gaim_account_get_presence(account); |
199 if (gaim_presence_is_online(presence) == TRUE) | |
200 gaim_presence_set_status_active(presence, "offline", TRUE); | |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
201 |
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 } | |
10742 | 211 |
10754 | 212 gaim_request_close_with_handle(gc); |
213 gaim_notify_close_with_handle(gc); | |
5563 | 214 |
10742 | 215 gaim_debug_info("connection", "Destroying connection %p\n", gc); |
216 | |
217 gaim_account_set_connection(account, NULL); | |
218 | |
219 if (gc->password != NULL) | |
220 g_free(gc->password); | |
5563 | 221 |
10742 | 222 if (gc->display_name != NULL) |
223 g_free(gc->display_name); | |
9848 | 224 |
10742 | 225 if (gc->disconnect_timeout) |
226 gaim_timeout_remove(gc->disconnect_timeout); | |
6029 | 227 |
10742 | 228 g_free(gc); |
6029 | 229 } |
230 | |
5563 | 231 /* |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
232 * d:)->-< |
5563 | 233 * |
234 * d:O-\-< | |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
235 * |
5563 | 236 * d:D-/-< |
237 * | |
238 * d8D->-< DANCE! | |
239 */ | |
240 | |
241 void | |
242 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
243 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
244 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
245 |
5563 | 246 g_return_if_fail(gc != NULL); |
247 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
248 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
249 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
250 |
5563 | 251 gc->state = state; |
252 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
253 ops = gaim_connections_get_ui_ops(); |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
254 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
255 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
256 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
257 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
258 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
259 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
260 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
261 |
5563 | 262 if (gc->state == GAIM_CONNECTED) { |
6695 | 263 GaimBlistNode *gnode,*cnode,*bnode; |
5563 | 264 GList *wins; |
9285 | 265 GList *add_buds = NULL; |
10052 | 266 GaimAccount *account; |
267 GaimPresence *presence; | |
268 | |
269 account = gaim_connection_get_account(gc); | |
270 presence = gaim_account_get_presence(account); | |
5563 | 271 |
272 /* Set the time the account came online */ | |
273 time(&gc->login_time); | |
274 | |
10301 | 275 if (gaim_prefs_get_bool("/core/logging/log_system") && |
276 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
277 GaimLog *log = gaim_account_get_log(account); | |
278 char *msg = g_strdup_printf("+++ %s signed on", | |
279 gaim_account_get_username(account)); | |
280 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
281 gaim_account_get_username(account), gc->login_time, | |
282 msg); | |
283 g_free(msg); | |
284 } | |
285 | |
5563 | 286 if (ops != NULL && ops->connected != NULL) |
287 ops->connected(gc); | |
288 | |
289 gaim_blist_show(); | |
8573 | 290 gaim_blist_add_account(account); |
5563 | 291 |
292 /* | |
293 * XXX This is a hack! Remove this and replace it with a better event | |
294 * notification system. | |
295 */ | |
296 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
297 GaimConvWindow *win = (GaimConvWindow *)wins->data; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
298 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), |
5563 | 299 GAIM_CONV_ACCOUNT_ONLINE); |
300 } | |
301 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
302 gaim_signal_emit(gaim_connections_get_handle(), "signed-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
303 |
5563 | 304 /* let the prpl know what buddies we pulled out of the local list */ |
10301 | 305 /* XXX - Remove this and let the prpl take care of it itself? */ |
5563 | 306 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
307 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
308 continue; | |
6695 | 309 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
310 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
311 continue; | |
312 for(bnode = cnode->child; bnode; bnode = bnode->next) { | |
313 GaimBuddy *b; | |
314 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
315 continue; | |
316 | |
317 b = (GaimBuddy *)bnode; | |
5563 | 318 if(b->account == gc->account) { |
9285 | 319 add_buds = g_list_append(add_buds, b); |
5563 | 320 } |
321 } | |
322 } | |
323 } | |
324 | |
325 if(add_buds) { | |
326 serv_add_buddies(gc, add_buds); | |
327 g_list_free(add_buds); | |
328 } | |
329 | |
330 serv_set_permit_deny(gc); | |
10745 | 331 |
332 update_keepalive(gc, TRUE); | |
10751 | 333 |
334 if (gaim_account_get_user_info(account) != NULL) | |
335 serv_set_info(gc, gaim_account_get_user_info(account)); | |
336 | |
337 if (gc->idle_timer > 0) | |
338 gaim_timeout_remove(gc->idle_timer); | |
339 | |
340 gc->idle_timer = gaim_timeout_add(20000, check_idle, gc); | |
341 serv_touch_idle(gc); | |
5563 | 342 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
343 else if (gc->state == GAIM_DISCONNECTED) { |
8573 | 344 GaimAccount *account = gaim_connection_get_account(gc); |
345 | |
346 if(gaim_prefs_get_bool("/core/logging/log_system") && | |
347 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
348 GaimLog *log = gaim_account_get_log(account); | |
349 char *msg = g_strdup_printf("+++ %s signed off", | |
350 gaim_account_get_username(account)); | |
351 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
352 gaim_account_get_username(account), time(NULL), | |
353 msg); | |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
354 g_free(msg); |
8573 | 355 } |
356 | |
357 gaim_account_destroy_log(account); | |
358 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
359 if (ops != NULL && ops->disconnected != NULL) |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
360 ops->disconnected(gc); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
361 } |
5563 | 362 } |
363 | |
364 void | |
365 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
366 { | |
367 g_return_if_fail(gc != NULL); | |
368 g_return_if_fail(account != NULL); | |
369 | |
370 gc->account = account; | |
371 } | |
372 | |
373 void | |
374 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
375 { | |
376 g_return_if_fail(gc != NULL); | |
377 | |
378 if (gc->display_name != NULL) | |
379 g_free(gc->display_name); | |
380 | |
381 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
382 } | |
383 | |
384 GaimConnectionState | |
385 gaim_connection_get_state(const GaimConnection *gc) | |
386 { | |
387 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
388 | |
389 return gc->state; | |
390 } | |
391 | |
392 GaimAccount * | |
393 gaim_connection_get_account(const GaimConnection *gc) | |
394 { | |
395 g_return_val_if_fail(gc != NULL, NULL); | |
396 | |
397 return gc->account; | |
398 } | |
399 | |
400 const char * | |
10740 | 401 gaim_connection_get_password(const GaimConnection *gc) |
402 { | |
403 g_return_val_if_fail(gc != NULL, NULL); | |
404 | |
405 return gc->password; | |
406 } | |
407 | |
408 const char * | |
5563 | 409 gaim_connection_get_display_name(const GaimConnection *gc) |
410 { | |
411 g_return_val_if_fail(gc != NULL, NULL); | |
412 | |
413 return gc->display_name; | |
414 } | |
415 | |
416 void | |
417 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
418 size_t step, size_t count) | |
419 { | |
420 GaimConnectionUiOps *ops; | |
421 | |
422 g_return_if_fail(gc != NULL); | |
423 g_return_if_fail(text != NULL); | |
424 g_return_if_fail(step < count); | |
425 g_return_if_fail(count > 1); | |
426 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
427 ops = gaim_connections_get_ui_ops(); |
5563 | 428 |
429 if (ops != NULL && ops->connect_progress != NULL) | |
430 ops->connect_progress(gc, text, step, count); | |
431 } | |
432 | |
433 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
434 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
435 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
436 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
437 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
438 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
439 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
440 |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
441 ops = gaim_connections_get_ui_ops(); |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
442 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
443 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
444 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
445 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
446 |
10742 | 447 gboolean |
448 gaim_connection_disconnect_cb(gpointer data) | |
449 { | |
450 GaimAccount *account = data; | |
451 | |
452 gaim_account_disconnect(account); | |
453 | |
454 return FALSE; | |
455 } | |
456 | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
457 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
458 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
459 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
460 GaimConnectionUiOps *ops; |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
461 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
462 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
463 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
464 |
6393 | 465 /* 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
|
466 if (gc->disconnect_timeout) |
6393 | 467 return; |
468 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
469 ops = gaim_connections_get_ui_ops(); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
470 |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
471 if (ops != NULL) { |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
472 if (ops->report_disconnect != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
473 ops->report_disconnect(gc, text); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
474 } |
5727 | 475 |
8273
f24172f53650
[gaim-migrate @ 8997]
Christian Hammond <chipx86@chipx86.com>
parents:
8131
diff
changeset
|
476 gc->disconnect_timeout = gaim_timeout_add(0, gaim_connection_disconnect_cb, |
6076 | 477 gaim_connection_get_account(gc)); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
478 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
479 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
480 void |
5563 | 481 gaim_connections_disconnect_all(void) |
482 { | |
483 GList *l; | |
6113 | 484 GaimConnection *gc; |
5563 | 485 |
6113 | 486 while ((l = gaim_connections_get_all()) != NULL) { |
487 gc = l->data; | |
488 gc->wants_to_die = TRUE; | |
10742 | 489 gaim_account_disconnect(gc->account); |
6113 | 490 } |
5563 | 491 } |
492 | |
493 GList * | |
494 gaim_connections_get_all(void) | |
495 { | |
496 return connections; | |
497 } | |
498 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
499 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
500 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
501 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
502 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
503 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
504 |
5563 | 505 void |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
506 gaim_connections_set_ui_ops(GaimConnectionUiOps *ops) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
507 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
508 connection_ui_ops = ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
509 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
510 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
511 GaimConnectionUiOps * |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
512 gaim_connections_get_ui_ops(void) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
513 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
514 return connection_ui_ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
515 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
516 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
517 void |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
518 gaim_connections_init(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
519 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
520 void *handle = gaim_connections_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
521 |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
522 gaim_signal_register(handle, "signing-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
523 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
524 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
525 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
526 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
527 gaim_signal_register(handle, "signed-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
528 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
529 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
530 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
531 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
532 gaim_signal_register(handle, "signing-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
533 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
534 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
535 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
536 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
537 gaim_signal_register(handle, "signed-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
538 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
539 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
540 GAIM_SUBTYPE_CONNECTION)); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
541 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
542 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
543 void |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
544 gaim_connections_uninit(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
545 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
546 gaim_signals_unregister_by_instance(gaim_connections_get_handle()); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
547 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
548 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
549 void * |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
550 gaim_connections_get_handle(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
551 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
552 return &connections_handle; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
553 } |