Mercurial > pidgin
annotate src/connection.c @ 10865:c28766b87f64
[gaim-migrate @ 12549]
Check all characters in the unescaped value of a HTML entity when matching smileys. Also make sure that the returned value of the smiley length is correct when dealing with escaped text. This resolves an inconsistency between how smileys are detected and how they are looked up for display.
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sun, 24 Apr 2005 21:28:39 +0000 |
parents | a9d989c84609 |
children | 3e43c132f151 |
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 { | |
10816
c94f40ffcafb
[gaim-migrate @ 12471]
Luke Schierer <lschiere@pidgin.im>
parents:
10812
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; |
10840 | 153 #if 0 |
10754 | 154 GList *wins; |
10840 | 155 #endif |
10754 | 156 GaimPresence *presence = NULL; |
157 GaimPluginProtocolInfo *prpl_info = NULL; | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
158 |
5563 | 159 g_return_if_fail(gc != NULL); |
160 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
161 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
162 |
10754 | 163 gaim_debug_info("connection", "Disconnecting connection %p\n", gc); |
164 | |
165 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) | |
166 gaim_blist_remove_account(account); | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
167 |
10754 | 168 gaim_signal_emit(gaim_connections_get_handle(), "signing-off", gc); |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
169 |
10754 | 170 while (gc->buddy_chats) |
171 { | |
172 GaimConversation *b = gc->buddy_chats->data; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
173 |
10754 | 174 gc->buddy_chats = g_slist_remove(gc->buddy_chats, b); |
175 gaim_conv_chat_left(GAIM_CONV_CHAT(b)); | |
176 } | |
10745 | 177 |
10754 | 178 if (gc->idle_timer > 0) |
179 gaim_timeout_remove(gc->idle_timer); | |
180 gc->idle_timer = 0; | |
10745 | 181 |
10754 | 182 update_keepalive(gc, FALSE); |
10745 | 183 |
10754 | 184 if (gc->prpl != NULL) |
185 { | |
186 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
10745 | 187 |
10754 | 188 if (prpl_info->close) |
189 (prpl_info->close)(gc); | |
190 } | |
5563 | 191 |
10754 | 192 connections = g_list_remove(connections, gc); |
5563 | 193 |
10754 | 194 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
195 |
10754 | 196 /* LOG system_log(log_signoff, gc, NULL, |
197 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); */ | |
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 |
10754 | 200 presence = gaim_account_get_presence(account); |
201 if (gaim_presence_is_online(presence) == TRUE) | |
202 gaim_presence_set_status_active(presence, "offline", TRUE); | |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
203 |
10827 | 204 #if 0 |
10840 | 205 /* see comment later in file on if 0'd same code */ |
10754 | 206 /* |
207 * XXX This is a hack! Remove this and replace it with a better event | |
208 * notification system. | |
209 */ | |
210 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
211 GaimConvWindow *win = (GaimConvWindow *)wins->data; | |
212 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), | |
213 GAIM_CONV_ACCOUNT_OFFLINE); | |
214 } | |
10827 | 215 #endif |
10742 | 216 |
10754 | 217 gaim_request_close_with_handle(gc); |
218 gaim_notify_close_with_handle(gc); | |
5563 | 219 |
10742 | 220 gaim_debug_info("connection", "Destroying connection %p\n", gc); |
221 | |
222 gaim_account_set_connection(account, NULL); | |
223 | |
224 if (gc->password != NULL) | |
225 g_free(gc->password); | |
5563 | 226 |
10742 | 227 if (gc->display_name != NULL) |
228 g_free(gc->display_name); | |
9848 | 229 |
10742 | 230 if (gc->disconnect_timeout) |
231 gaim_timeout_remove(gc->disconnect_timeout); | |
6029 | 232 |
10742 | 233 g_free(gc); |
6029 | 234 } |
235 | |
5563 | 236 /* |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
237 * d:)->-< |
5563 | 238 * |
239 * d:O-\-< | |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
240 * |
5563 | 241 * d:D-/-< |
242 * | |
243 * d8D->-< DANCE! | |
244 */ | |
245 | |
246 void | |
247 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
248 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
249 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
250 |
5563 | 251 g_return_if_fail(gc != NULL); |
252 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
253 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
254 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
255 |
5563 | 256 gc->state = state; |
257 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
258 ops = gaim_connections_get_ui_ops(); |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
259 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
260 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
261 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
262 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
263 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
264 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
265 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
266 |
5563 | 267 if (gc->state == GAIM_CONNECTED) { |
6695 | 268 GaimBlistNode *gnode,*cnode,*bnode; |
10840 | 269 #if 0 |
5563 | 270 GList *wins; |
10840 | 271 #endif |
9285 | 272 GList *add_buds = NULL; |
10052 | 273 GaimAccount *account; |
274 GaimPresence *presence; | |
275 | |
276 account = gaim_connection_get_account(gc); | |
277 presence = gaim_account_get_presence(account); | |
5563 | 278 |
279 /* Set the time the account came online */ | |
280 time(&gc->login_time); | |
281 | |
10301 | 282 if (gaim_prefs_get_bool("/core/logging/log_system") && |
283 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
284 GaimLog *log = gaim_account_get_log(account); | |
285 char *msg = g_strdup_printf("+++ %s signed on", | |
286 gaim_account_get_username(account)); | |
287 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
288 gaim_account_get_username(account), gc->login_time, | |
289 msg); | |
290 g_free(msg); | |
291 } | |
292 | |
5563 | 293 if (ops != NULL && ops->connected != NULL) |
294 ops->connected(gc); | |
295 | |
296 gaim_blist_show(); | |
8573 | 297 gaim_blist_add_account(account); |
5563 | 298 |
299 /* | |
300 * XXX This is a hack! Remove this and replace it with a better event | |
301 * notification system. | |
302 */ | |
10827 | 303 #if 0 |
304 /* This looks like it was horribly broken before I got here... */ | |
305 /* Why is it updating the first tab of each window? */ | |
5563 | 306 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
307 GaimConvWindow *win = (GaimConvWindow *)wins->data; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
308 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), |
5563 | 309 GAIM_CONV_ACCOUNT_ONLINE); |
310 } | |
10827 | 311 #endif |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
312 gaim_signal_emit(gaim_connections_get_handle(), "signed-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
313 |
5563 | 314 /* let the prpl know what buddies we pulled out of the local list */ |
10301 | 315 /* XXX - Remove this and let the prpl take care of it itself? */ |
5563 | 316 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
317 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
318 continue; | |
6695 | 319 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
320 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
321 continue; | |
322 for(bnode = cnode->child; bnode; bnode = bnode->next) { | |
323 GaimBuddy *b; | |
324 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
325 continue; | |
326 | |
327 b = (GaimBuddy *)bnode; | |
5563 | 328 if(b->account == gc->account) { |
9285 | 329 add_buds = g_list_append(add_buds, b); |
5563 | 330 } |
331 } | |
332 } | |
333 } | |
334 | |
335 if(add_buds) { | |
336 serv_add_buddies(gc, add_buds); | |
337 g_list_free(add_buds); | |
338 } | |
339 | |
340 serv_set_permit_deny(gc); | |
10745 | 341 |
342 update_keepalive(gc, TRUE); | |
10751 | 343 |
344 if (gaim_account_get_user_info(account) != NULL) | |
345 serv_set_info(gc, gaim_account_get_user_info(account)); | |
346 | |
347 if (gc->idle_timer > 0) | |
348 gaim_timeout_remove(gc->idle_timer); | |
349 | |
350 gc->idle_timer = gaim_timeout_add(20000, check_idle, gc); | |
351 serv_touch_idle(gc); | |
5563 | 352 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
353 else if (gc->state == GAIM_DISCONNECTED) { |
8573 | 354 GaimAccount *account = gaim_connection_get_account(gc); |
355 | |
356 if(gaim_prefs_get_bool("/core/logging/log_system") && | |
357 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
358 GaimLog *log = gaim_account_get_log(account); | |
359 char *msg = g_strdup_printf("+++ %s signed off", | |
360 gaim_account_get_username(account)); | |
361 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
362 gaim_account_get_username(account), time(NULL), | |
363 msg); | |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
364 g_free(msg); |
8573 | 365 } |
366 | |
367 gaim_account_destroy_log(account); | |
368 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
369 if (ops != NULL && ops->disconnected != NULL) |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
370 ops->disconnected(gc); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
371 } |
5563 | 372 } |
373 | |
374 void | |
375 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
376 { | |
377 g_return_if_fail(gc != NULL); | |
378 g_return_if_fail(account != NULL); | |
379 | |
380 gc->account = account; | |
381 } | |
382 | |
383 void | |
384 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
385 { | |
386 g_return_if_fail(gc != NULL); | |
387 | |
388 if (gc->display_name != NULL) | |
389 g_free(gc->display_name); | |
390 | |
391 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
392 } | |
393 | |
394 GaimConnectionState | |
395 gaim_connection_get_state(const GaimConnection *gc) | |
396 { | |
397 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
398 | |
399 return gc->state; | |
400 } | |
401 | |
402 GaimAccount * | |
403 gaim_connection_get_account(const GaimConnection *gc) | |
404 { | |
405 g_return_val_if_fail(gc != NULL, NULL); | |
406 | |
407 return gc->account; | |
408 } | |
409 | |
410 const char * | |
10740 | 411 gaim_connection_get_password(const GaimConnection *gc) |
412 { | |
413 g_return_val_if_fail(gc != NULL, NULL); | |
414 | |
415 return gc->password; | |
416 } | |
417 | |
418 const char * | |
5563 | 419 gaim_connection_get_display_name(const GaimConnection *gc) |
420 { | |
421 g_return_val_if_fail(gc != NULL, NULL); | |
422 | |
423 return gc->display_name; | |
424 } | |
425 | |
426 void | |
427 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
428 size_t step, size_t count) | |
429 { | |
430 GaimConnectionUiOps *ops; | |
431 | |
432 g_return_if_fail(gc != NULL); | |
433 g_return_if_fail(text != NULL); | |
434 g_return_if_fail(step < count); | |
435 g_return_if_fail(count > 1); | |
436 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
437 ops = gaim_connections_get_ui_ops(); |
5563 | 438 |
439 if (ops != NULL && ops->connect_progress != NULL) | |
440 ops->connect_progress(gc, text, step, count); | |
441 } | |
442 | |
443 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
444 gaim_connection_notice(GaimConnection *gc, const char *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 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
447 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
448 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
449 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
450 |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
451 ops = gaim_connections_get_ui_ops(); |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
452 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
453 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
454 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
455 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
456 |
10742 | 457 gboolean |
458 gaim_connection_disconnect_cb(gpointer data) | |
459 { | |
460 GaimAccount *account = data; | |
461 | |
462 gaim_account_disconnect(account); | |
463 | |
464 return FALSE; | |
465 } | |
466 | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
467 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
468 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
469 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
470 GaimConnectionUiOps *ops; |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
471 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
472 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
473 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
474 |
6393 | 475 /* 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
|
476 if (gc->disconnect_timeout) |
6393 | 477 return; |
478 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
479 ops = gaim_connections_get_ui_ops(); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
480 |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
481 if (ops != NULL) { |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
482 if (ops->report_disconnect != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
483 ops->report_disconnect(gc, text); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
484 } |
5727 | 485 |
8273
f24172f53650
[gaim-migrate @ 8997]
Christian Hammond <chipx86@chipx86.com>
parents:
8131
diff
changeset
|
486 gc->disconnect_timeout = gaim_timeout_add(0, gaim_connection_disconnect_cb, |
6076 | 487 gaim_connection_get_account(gc)); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
488 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
489 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
490 void |
5563 | 491 gaim_connections_disconnect_all(void) |
492 { | |
493 GList *l; | |
6113 | 494 GaimConnection *gc; |
5563 | 495 |
6113 | 496 while ((l = gaim_connections_get_all()) != NULL) { |
497 gc = l->data; | |
498 gc->wants_to_die = TRUE; | |
10742 | 499 gaim_account_disconnect(gc->account); |
6113 | 500 } |
5563 | 501 } |
502 | |
503 GList * | |
504 gaim_connections_get_all(void) | |
505 { | |
506 return connections; | |
507 } | |
508 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
509 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
510 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
511 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
512 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
513 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
514 |
5563 | 515 void |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
516 gaim_connections_set_ui_ops(GaimConnectionUiOps *ops) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
517 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
518 connection_ui_ops = ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
519 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
520 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
521 GaimConnectionUiOps * |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
522 gaim_connections_get_ui_ops(void) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
523 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
524 return connection_ui_ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
525 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
526 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
527 void |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
528 gaim_connections_init(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
529 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
530 void *handle = gaim_connections_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
531 |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
532 gaim_signal_register(handle, "signing-on", |
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-on", |
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)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
541 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
542 gaim_signal_register(handle, "signing-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
543 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
544 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
545 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
546 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
547 gaim_signal_register(handle, "signed-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
548 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
549 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
550 GAIM_SUBTYPE_CONNECTION)); |
6485
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 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
553 void |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
554 gaim_connections_uninit(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
555 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
556 gaim_signals_unregister_by_instance(gaim_connections_get_handle()); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
557 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
558 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
559 void * |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
560 gaim_connections_get_handle(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
561 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
562 return &connections_handle; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
563 } |