Mercurial > pidgin
annotate src/connection.c @ 11261:b53606580f68
[gaim-migrate @ 13439]
Patch #1226486 from Levi Bard
Fixes bug #1224178
If you change the topic in a chat room and that topic change is rejected, the
topic field is wrong -- it shows the new topic even thought it didn't get set.
This patch resets the GUI's topic immediately when you hit enter. Then, if the
topic change is successful, the server will echo the topic change back to us
and we'll update the GUI to the new topic.
The only question is, does the server always echo the topic back to us? From the
core's point of view, I'm ready to assume yes. It's the case for both IRC and
Jabber*. If someone could test changing a topic in SILC or Zephyr, that'd be
great. If servers using those protocols do not echo the topic back, the prpl
will have to fake it as appropriate.
* I didn't actually test on Jabber, but Nathan said the server will echo the
topic change back. If it's broken, let me know.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Sun, 14 Aug 2005 06:55:57 +0000 |
parents | bb0d7b719af2 |
children | 84d3f47e6258 |
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 | |
124 | |
10740 | 125 gc->prpl = prpl; |
10751 | 126 if ((password != NULL) && (*password != '\0')) |
127 gc->password = g_strdup(password); | |
5563 | 128 gaim_connection_set_account(gc, account); |
10740 | 129 gaim_connection_set_state(gc, GAIM_CONNECTING); |
130 connections = g_list_append(connections, gc); | |
5563 | 131 gaim_account_set_connection(account, gc); |
132 | |
10740 | 133 gaim_signal_emit(gaim_connections_get_handle(), "signing-on", gc); |
134 | |
135 if (regist) | |
136 { | |
10816
c94f40ffcafb
[gaim-migrate @ 12471]
Luke Schierer <lschiere@pidgin.im>
parents:
10812
diff
changeset
|
137 gaim_debug_info("connection", "Registering. gc = %p\n", gc); |
10740 | 138 |
139 /* set this so we don't auto-reconnect after registering */ | |
140 gc->wants_to_die = TRUE; | |
141 | |
142 prpl_info->register_user(account); | |
143 } | |
144 else | |
145 { | |
146 gaim_debug_info("connection", "Connecting. gc = %p\n", gc); | |
147 | |
148 gaim_signal_emit(gaim_accounts_get_handle(), "account-connecting", account); | |
149 prpl_info->login(account, gaim_account_get_active_status(account)); | |
150 } | |
5563 | 151 } |
152 | |
153 void | |
154 gaim_connection_destroy(GaimConnection *gc) | |
155 { | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
156 GaimAccount *account; |
10840 | 157 #if 0 |
10754 | 158 GList *wins; |
10840 | 159 #endif |
10754 | 160 GaimPresence *presence = NULL; |
161 GaimPluginProtocolInfo *prpl_info = NULL; | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
162 |
5563 | 163 g_return_if_fail(gc != NULL); |
164 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
165 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
166 |
10754 | 167 gaim_debug_info("connection", "Disconnecting connection %p\n", gc); |
168 | |
169 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) | |
170 gaim_blist_remove_account(account); | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
171 |
10754 | 172 gaim_signal_emit(gaim_connections_get_handle(), "signing-off", gc); |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
173 |
10754 | 174 while (gc->buddy_chats) |
175 { | |
176 GaimConversation *b = gc->buddy_chats->data; | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
177 |
10754 | 178 gc->buddy_chats = g_slist_remove(gc->buddy_chats, b); |
179 gaim_conv_chat_left(GAIM_CONV_CHAT(b)); | |
180 } | |
10745 | 181 |
10754 | 182 if (gc->idle_timer > 0) |
183 gaim_timeout_remove(gc->idle_timer); | |
184 gc->idle_timer = 0; | |
10745 | 185 |
10754 | 186 update_keepalive(gc, FALSE); |
10745 | 187 |
10754 | 188 if (gc->prpl != NULL) |
189 { | |
190 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
10745 | 191 |
10754 | 192 if (prpl_info->close) |
193 (prpl_info->close)(gc); | |
194 } | |
5563 | 195 |
10754 | 196 connections = g_list_remove(connections, gc); |
5563 | 197 |
10754 | 198 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
199 |
10754 | 200 /* LOG system_log(log_signoff, gc, NULL, |
201 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); */ | |
202 gaim_signal_emit(gaim_connections_get_handle(), "signed-off", gc); | |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
203 |
10754 | 204 presence = gaim_account_get_presence(account); |
205 if (gaim_presence_is_online(presence) == TRUE) | |
206 gaim_presence_set_status_active(presence, "offline", TRUE); | |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
207 |
10827 | 208 #if 0 |
10840 | 209 /* see comment later in file on if 0'd same code */ |
10754 | 210 /* |
211 * XXX This is a hack! Remove this and replace it with a better event | |
212 * notification system. | |
213 */ | |
214 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
215 GaimConvWindow *win = (GaimConvWindow *)wins->data; | |
216 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), | |
217 GAIM_CONV_ACCOUNT_OFFLINE); | |
218 } | |
10827 | 219 #endif |
10742 | 220 |
10754 | 221 gaim_request_close_with_handle(gc); |
222 gaim_notify_close_with_handle(gc); | |
5563 | 223 |
10742 | 224 gaim_debug_info("connection", "Destroying connection %p\n", gc); |
225 | |
226 gaim_account_set_connection(account, NULL); | |
227 | |
228 if (gc->password != NULL) | |
229 g_free(gc->password); | |
5563 | 230 |
10742 | 231 if (gc->display_name != NULL) |
232 g_free(gc->display_name); | |
9848 | 233 |
10742 | 234 if (gc->disconnect_timeout) |
235 gaim_timeout_remove(gc->disconnect_timeout); | |
6029 | 236 |
11146 | 237 GAIM_DBUS_UNREGISTER_POINTER(gc); |
10742 | 238 g_free(gc); |
6029 | 239 } |
240 | |
5563 | 241 /* |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
242 * d:)->-< |
5563 | 243 * |
244 * d:O-\-< | |
8130
ff88d4cbf4db
[gaim-migrate @ 8835]
Christian Hammond <chipx86@chipx86.com>
parents:
8046
diff
changeset
|
245 * |
5563 | 246 * d:D-/-< |
247 * | |
248 * d8D->-< DANCE! | |
249 */ | |
250 | |
251 void | |
252 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
253 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
254 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
255 |
5563 | 256 g_return_if_fail(gc != NULL); |
257 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
258 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
259 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
260 |
5563 | 261 gc->state = state; |
262 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
263 ops = gaim_connections_get_ui_ops(); |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
264 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
265 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
266 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
267 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
268 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
269 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
270 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
271 |
5563 | 272 if (gc->state == GAIM_CONNECTED) { |
10840 | 273 #if 0 |
5563 | 274 GList *wins; |
10840 | 275 #endif |
10052 | 276 GaimAccount *account; |
277 GaimPresence *presence; | |
278 | |
279 account = gaim_connection_get_account(gc); | |
280 presence = gaim_account_get_presence(account); | |
5563 | 281 |
282 /* Set the time the account came online */ | |
283 time(&gc->login_time); | |
284 | |
10301 | 285 if (gaim_prefs_get_bool("/core/logging/log_system") && |
286 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
287 GaimLog *log = gaim_account_get_log(account); | |
288 char *msg = g_strdup_printf("+++ %s signed on", | |
289 gaim_account_get_username(account)); | |
290 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
291 gaim_account_get_username(account), gc->login_time, | |
292 msg); | |
293 g_free(msg); | |
294 } | |
295 | |
5563 | 296 if (ops != NULL && ops->connected != NULL) |
297 ops->connected(gc); | |
298 | |
299 gaim_blist_show(); | |
8573 | 300 gaim_blist_add_account(account); |
5563 | 301 |
302 /* | |
303 * XXX This is a hack! Remove this and replace it with a better event | |
304 * notification system. | |
305 */ | |
10827 | 306 #if 0 |
307 /* This looks like it was horribly broken before I got here... */ | |
308 /* Why is it updating the first tab of each window? */ | |
5563 | 309 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
310 GaimConvWindow *win = (GaimConvWindow *)wins->data; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
311 gaim_conversation_update(gaim_conv_window_get_conversation_at(win, 0), |
5563 | 312 GAIM_CONV_ACCOUNT_ONLINE); |
313 } | |
10827 | 314 #endif |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
315 gaim_signal_emit(gaim_connections_get_handle(), "signed-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
316 |
5563 | 317 serv_set_permit_deny(gc); |
10745 | 318 |
319 update_keepalive(gc, TRUE); | |
10751 | 320 |
321 if (gaim_account_get_user_info(account) != NULL) | |
322 serv_set_info(gc, gaim_account_get_user_info(account)); | |
323 | |
324 if (gc->idle_timer > 0) | |
325 gaim_timeout_remove(gc->idle_timer); | |
326 | |
327 gc->idle_timer = gaim_timeout_add(20000, check_idle, gc); | |
328 serv_touch_idle(gc); | |
5563 | 329 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
330 else if (gc->state == GAIM_DISCONNECTED) { |
8573 | 331 GaimAccount *account = gaim_connection_get_account(gc); |
332 | |
333 if(gaim_prefs_get_bool("/core/logging/log_system") && | |
334 gaim_prefs_get_bool("/core/logging/log_own_states")){ | |
335 GaimLog *log = gaim_account_get_log(account); | |
336 char *msg = g_strdup_printf("+++ %s signed off", | |
337 gaim_account_get_username(account)); | |
338 gaim_log_write(log, GAIM_MESSAGE_SYSTEM, | |
339 gaim_account_get_username(account), time(NULL), | |
340 msg); | |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
341 g_free(msg); |
8573 | 342 } |
343 | |
344 gaim_account_destroy_log(account); | |
345 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
346 if (ops != NULL && ops->disconnected != NULL) |
9190
9e3289499977
[gaim-migrate @ 9985]
Christian Hammond <chipx86@chipx86.com>
parents:
9019
diff
changeset
|
347 ops->disconnected(gc); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
348 } |
5563 | 349 } |
350 | |
351 void | |
352 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
353 { | |
354 g_return_if_fail(gc != NULL); | |
355 g_return_if_fail(account != NULL); | |
356 | |
357 gc->account = account; | |
358 } | |
359 | |
360 void | |
361 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
362 { | |
363 g_return_if_fail(gc != NULL); | |
364 | |
365 if (gc->display_name != NULL) | |
366 g_free(gc->display_name); | |
367 | |
368 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
369 } | |
370 | |
371 GaimConnectionState | |
372 gaim_connection_get_state(const GaimConnection *gc) | |
373 { | |
374 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
375 | |
376 return gc->state; | |
377 } | |
378 | |
379 GaimAccount * | |
380 gaim_connection_get_account(const GaimConnection *gc) | |
381 { | |
382 g_return_val_if_fail(gc != NULL, NULL); | |
383 | |
384 return gc->account; | |
385 } | |
386 | |
387 const char * | |
10740 | 388 gaim_connection_get_password(const GaimConnection *gc) |
389 { | |
390 g_return_val_if_fail(gc != NULL, NULL); | |
391 | |
392 return gc->password; | |
393 } | |
394 | |
395 const char * | |
5563 | 396 gaim_connection_get_display_name(const GaimConnection *gc) |
397 { | |
398 g_return_val_if_fail(gc != NULL, NULL); | |
399 | |
400 return gc->display_name; | |
401 } | |
402 | |
403 void | |
404 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
405 size_t step, size_t count) | |
406 { | |
407 GaimConnectionUiOps *ops; | |
408 | |
409 g_return_if_fail(gc != NULL); | |
410 g_return_if_fail(text != NULL); | |
411 g_return_if_fail(step < count); | |
412 g_return_if_fail(count > 1); | |
413 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
414 ops = gaim_connections_get_ui_ops(); |
5563 | 415 |
416 if (ops != NULL && ops->connect_progress != NULL) | |
417 ops->connect_progress(gc, text, step, count); | |
418 } | |
419 | |
420 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
421 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
422 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
423 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
424 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
425 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
426 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
427 |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
428 ops = gaim_connections_get_ui_ops(); |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
429 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
430 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
431 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
432 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
433 |
10742 | 434 gboolean |
435 gaim_connection_disconnect_cb(gpointer data) | |
436 { | |
437 GaimAccount *account = data; | |
438 | |
439 gaim_account_disconnect(account); | |
440 | |
441 return FALSE; | |
442 } | |
443 | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
444 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
445 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
446 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
447 GaimConnectionUiOps *ops; |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
448 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
449 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
450 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
451 |
6393 | 452 /* 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
|
453 if (gc->disconnect_timeout) |
6393 | 454 return; |
455 | |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
456 ops = gaim_connections_get_ui_ops(); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
457 |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
458 if (ops != NULL) { |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
459 if (ops->report_disconnect != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
460 ops->report_disconnect(gc, text); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
461 } |
5727 | 462 |
8273
f24172f53650
[gaim-migrate @ 8997]
Christian Hammond <chipx86@chipx86.com>
parents:
8131
diff
changeset
|
463 gc->disconnect_timeout = gaim_timeout_add(0, gaim_connection_disconnect_cb, |
6076 | 464 gaim_connection_get_account(gc)); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
465 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
466 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
467 void |
5563 | 468 gaim_connections_disconnect_all(void) |
469 { | |
470 GList *l; | |
6113 | 471 GaimConnection *gc; |
5563 | 472 |
6113 | 473 while ((l = gaim_connections_get_all()) != NULL) { |
474 gc = l->data; | |
475 gc->wants_to_die = TRUE; | |
10742 | 476 gaim_account_disconnect(gc->account); |
6113 | 477 } |
5563 | 478 } |
479 | |
480 GList * | |
481 gaim_connections_get_all(void) | |
482 { | |
483 return connections; | |
484 } | |
485 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
486 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
487 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
488 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
489 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
490 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
491 |
5563 | 492 void |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
493 gaim_connections_set_ui_ops(GaimConnectionUiOps *ops) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
494 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
495 connection_ui_ops = ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
496 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
497 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
498 GaimConnectionUiOps * |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
499 gaim_connections_get_ui_ops(void) |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
500 { |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
501 return connection_ui_ops; |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
502 } |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
503 |
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
504 void |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
505 gaim_connections_init(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
506 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
507 void *handle = gaim_connections_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
508 |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
509 gaim_signal_register(handle, "signing-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
510 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
511 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
512 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
513 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
514 gaim_signal_register(handle, "signed-on", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
515 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
516 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
517 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
518 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
519 gaim_signal_register(handle, "signing-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
520 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
521 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
522 GAIM_SUBTYPE_CONNECTION)); |
6564
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
523 |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
524 gaim_signal_register(handle, "signed-off", |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
525 gaim_marshal_VOID__POINTER, NULL, 1, |
800ef4a51096
[gaim-migrate @ 7086]
Christian Hammond <chipx86@chipx86.com>
parents:
6533
diff
changeset
|
526 gaim_value_new(GAIM_TYPE_SUBTYPE, |
6597
fe569b675cd2
[gaim-migrate @ 7121]
Christian Hammond <chipx86@chipx86.com>
parents:
6581
diff
changeset
|
527 GAIM_SUBTYPE_CONNECTION)); |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
528 } |
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 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
531 gaim_connections_uninit(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
532 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
533 gaim_signals_unregister_by_instance(gaim_connections_get_handle()); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
534 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
535 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
536 void * |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
537 gaim_connections_get_handle(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
538 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
539 return &connections_handle; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
540 } |