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