Mercurial > pidgin
annotate src/connection.c @ 6113:30d4c432101c
[gaim-migrate @ 6575]
Fix a memleak in the status code (a temporary g_hash_table was not getting
freed)
Make the auto-reconnect plugin fully multi-protocol aware. Previously, if
it was waiting to sign on more than one account, and you unload the plugin,
it would continue to attempt to sign on all but one of the accounts.
Set wants_to_die to TRUE if Buddies->Signoff was chosen.
Get rid of some unneeded oscar debugging lines for faceprint :-)
Make oscar not attempt to signon again if you were disconnected because
you signed on from another location.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 13 Jul 2003 20:36:53 +0000 |
parents | 77dcc775f97b |
children | e391813214a6 |
rev | line source |
---|---|
5563 | 1 /** |
2 * @file connection.c Connection API | |
3 * @ingroup core | |
4 * | |
5 * gaim | |
6 * | |
7 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
5631 | 8 * |
5563 | 9 * This program is free software; you can redistribute it and/or modify |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
23 #include "internal.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
24 #include "blist.h" |
5563 | 25 #include "connection.h" |
5717 | 26 #include "debug.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
27 #include "log.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
28 #include "notify.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
29 #include "prefs.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
30 #include "request.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
31 #include "server.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
32 #include "sound.h" |
6106 | 33 #include "util.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
34 |
5563 | 35 static GList *connections = NULL; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
36 static GList *connections_connecting = NULL; |
5563 | 37 static GaimConnectionUiOps *connection_ui_ops = NULL; |
38 | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
39 |
5563 | 40 GaimConnection * |
41 gaim_connection_new(GaimAccount *account) | |
42 { | |
43 GaimConnection *gc; | |
44 | |
45 g_return_val_if_fail(account != NULL, NULL); | |
46 | |
47 gc = g_new0(GaimConnection, 1); | |
48 | |
49 gc->prpl = gaim_find_prpl(gaim_account_get_protocol(account)); | |
50 | |
51 gaim_connection_set_account(gc, account); | |
52 gaim_account_set_connection(account, gc); | |
53 | |
54 return gc; | |
55 } | |
56 | |
57 void | |
58 gaim_connection_destroy(GaimConnection *gc) | |
59 { | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
60 GaimAccount *account; |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
61 |
5563 | 62 g_return_if_fail(gc != NULL); |
63 | |
64 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { | |
65 gaim_connection_disconnect(gc); | |
66 | |
67 return; | |
68 } | |
69 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
70 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
71 "Destroying connection %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
72 |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
73 account = gaim_connection_get_account(gc); |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
74 gaim_account_set_connection(account, NULL); |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
75 |
5563 | 76 if (gc->display_name != NULL) |
77 g_free(gc->display_name); | |
78 | |
79 if (gc->away != NULL) | |
80 g_free(gc->away); | |
81 | |
82 if (gc->away_state != NULL) | |
83 g_free(gc->away_state); | |
84 | |
85 g_free(gc); | |
86 } | |
87 | |
6110 | 88 static void request_pass_ok_cb(GaimAccount *account, const char *entry) |
6109 | 89 { |
90 gaim_account_set_password(account, (*entry != '\0') ? entry : NULL); | |
91 | |
6110 | 92 gaim_account_connect(account); |
6109 | 93 } |
94 | |
95 | |
5563 | 96 void |
97 gaim_connection_connect(GaimConnection *gc) | |
98 { | |
99 GaimAccount *account; | |
100 GaimConnectionUiOps *ops; | |
101 GaimPluginProtocolInfo *prpl_info = NULL; | |
102 | |
103 g_return_if_fail(gc != NULL); | |
104 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
105 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
106 "Connecting. gc = %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
107 |
5563 | 108 ops = gaim_get_connection_ui_ops(); |
109 | |
110 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
111 | |
112 account = gaim_connection_get_account(gc); | |
113 | |
6109 | 114 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) |
115 return; | |
116 | |
6036 | 117 if (!(prpl_info->options & OPT_PROTO_NO_PASSWORD) && |
5563 | 118 !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL) && |
119 gaim_account_get_password(account) == NULL) { | |
120 | |
6111 | 121 gchar *primary; |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
122 gaim_debug(GAIM_DEBUG_INFO, "connection", "Requesting password\n"); |
6111 | 123 primary = g_strdup_printf(_("Enter password for %s"), |
124 gaim_account_get_username(account)); | |
125 gaim_request_input(gc, NULL, primary, NULL, NULL, FALSE, TRUE, | |
6109 | 126 _("OK"), G_CALLBACK(request_pass_ok_cb), |
6110 | 127 _("Cancel"), NULL, account); |
6111 | 128 g_free(primary); |
6110 | 129 gaim_connection_destroy(gc); |
5563 | 130 |
131 return; | |
132 } | |
133 | |
134 gaim_connection_set_state(gc, GAIM_CONNECTING); | |
135 | |
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
136 gaim_debug(GAIM_DEBUG_INFO, "connection", "Calling serv_login\n"); |
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
137 |
6018 | 138 connections = g_list_append(connections, gc); |
139 | |
5563 | 140 serv_login(account); |
141 } | |
142 | |
143 void | |
144 gaim_connection_disconnect(GaimConnection *gc) | |
145 { | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
146 GaimAccount *account; |
5563 | 147 GList *wins; |
148 | |
149 g_return_if_fail(gc != NULL); | |
150 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
151 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
152 |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
153 if (gaim_account_get_connection(account) != NULL) { |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
154 gaim_account_disconnect(account); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
155 return; |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
156 } |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
157 |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
158 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
159 "Disconnecting connection %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
160 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
161 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
162 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
163 gaim_blist_remove_account(gaim_connection_get_account(gc)); |
5563 | 164 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
165 serv_close(gc); |
5563 | 166 |
6018 | 167 connections = g_list_remove(connections, gc); |
168 | |
5859
022786c7ab53
[gaim-migrate @ 6290]
Christian Hammond <chipx86@chipx86.com>
parents:
5788
diff
changeset
|
169 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
5563 | 170 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
171 gaim_event_broadcast(event_signoff, gc); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
172 system_log(log_signoff, gc, NULL, |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
173 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
174 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
175 /* |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
176 * XXX This is a hack! Remove this and replace it with a better event |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
177 * notification system. |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
178 */ |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
179 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
180 GaimWindow *win = (GaimWindow *)wins->data; |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
181 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
182 GAIM_CONV_ACCOUNT_OFFLINE); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
183 } |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
184 |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
185 gaim_request_close_with_handle(gc); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
186 gaim_notify_close_with_handle(gc); |
5563 | 187 } |
188 | |
5622
70ae81fc802f
[gaim-migrate @ 6029]
Christian Hammond <chipx86@chipx86.com>
parents:
5615
diff
changeset
|
189 gaim_connection_destroy(gc); |
5563 | 190 } |
191 | |
6029 | 192 gboolean |
193 gaim_connection_disconnect_cb(gpointer data) | |
194 { | |
6076 | 195 GaimAccount *account = data; |
196 GaimConnection *gc = gaim_account_get_connection(account); | |
6029 | 197 |
6076 | 198 if(gc) |
199 gaim_connection_disconnect(gc); | |
6029 | 200 |
201 return FALSE; | |
202 } | |
203 | |
5563 | 204 /* |
205 * d:)->-< | |
206 * | |
207 * d:O-\-< | |
208 * | |
209 * d:D-/-< | |
210 * | |
211 * d8D->-< DANCE! | |
212 */ | |
213 | |
214 void | |
215 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
216 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
217 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
218 |
5563 | 219 g_return_if_fail(gc != NULL); |
220 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
221 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
222 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
223 |
5563 | 224 gc->state = state; |
225 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
226 ops = gaim_get_connection_ui_ops(); |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
227 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
228 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
229 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
230 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
231 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
232 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
233 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
234 |
5563 | 235 if (gc->state == GAIM_CONNECTED) { |
236 GaimBlistNode *gnode,*bnode; | |
237 GList *wins; | |
238 GList *add_buds=NULL; | |
239 | |
240 /* Set the time the account came online */ | |
241 time(&gc->login_time); | |
242 | |
243 if (ops != NULL && ops->connected != NULL) | |
244 ops->connected(gc); | |
245 | |
246 gaim_blist_show(); | |
247 gaim_blist_add_account(gc->account); | |
248 | |
249 /* | |
250 * XXX This is a hack! Remove this and replace it with a better event | |
251 * notification system. | |
252 */ | |
253 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
254 GaimWindow *win = (GaimWindow *)wins->data; |
5563 | 255 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
256 GAIM_CONV_ACCOUNT_ONLINE); | |
257 } | |
258 | |
259 gaim_event_broadcast(event_signon, gc); | |
260 system_log(log_signon, gc, NULL, | |
261 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); | |
262 | |
263 #if 0 | |
264 /* away option given? */ | |
265 if (opt_away) { | |
266 away_on_login(opt_away_arg); | |
267 /* don't do it again */ | |
268 opt_away = 0; | |
269 } else if (awaymessage) { | |
270 serv_set_away(gc, GAIM_AWAY_CUSTOM, awaymessage->message); | |
271 } | |
272 if (opt_away_arg != NULL) { | |
273 g_free(opt_away_arg); | |
274 opt_away_arg = NULL; | |
275 } | |
276 #endif | |
277 | |
278 /* let the prpl know what buddies we pulled out of the local list */ | |
279 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
280 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
281 continue; | |
282 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
283 if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) { | |
284 struct buddy *b = (struct buddy *)bnode; | |
285 if(b->account == gc->account) { | |
286 add_buds = g_list_append(add_buds, b->name); | |
287 } | |
288 } | |
289 } | |
290 } | |
291 | |
292 if(add_buds) { | |
293 serv_add_buddies(gc, add_buds); | |
294 g_list_free(add_buds); | |
295 } | |
296 | |
297 serv_set_permit_deny(gc); | |
298 } | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
299 else if (gc->state == GAIM_DISCONNECTED) { |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
300 if (ops != NULL && ops->disconnected != NULL) |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
301 ops->disconnected(gc, NULL); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
302 } |
5563 | 303 } |
304 | |
305 void | |
306 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
307 { | |
308 g_return_if_fail(gc != NULL); | |
309 g_return_if_fail(account != NULL); | |
310 | |
311 gc->account = account; | |
312 } | |
313 | |
314 void | |
315 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
316 { | |
317 g_return_if_fail(gc != NULL); | |
318 | |
319 if (gc->display_name != NULL) | |
320 g_free(gc->display_name); | |
321 | |
322 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
323 } | |
324 | |
325 GaimConnectionState | |
326 gaim_connection_get_state(const GaimConnection *gc) | |
327 { | |
328 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
329 | |
330 return gc->state; | |
331 } | |
332 | |
333 GaimAccount * | |
334 gaim_connection_get_account(const GaimConnection *gc) | |
335 { | |
336 g_return_val_if_fail(gc != NULL, NULL); | |
337 | |
338 return gc->account; | |
339 } | |
340 | |
341 const char * | |
342 gaim_connection_get_display_name(const GaimConnection *gc) | |
343 { | |
344 g_return_val_if_fail(gc != NULL, NULL); | |
345 | |
346 return gc->display_name; | |
347 } | |
348 | |
349 void | |
350 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
351 size_t step, size_t count) | |
352 { | |
353 GaimConnectionUiOps *ops; | |
354 | |
355 g_return_if_fail(gc != NULL); | |
356 g_return_if_fail(text != NULL); | |
357 g_return_if_fail(step < count); | |
358 g_return_if_fail(count > 1); | |
359 | |
360 ops = gaim_get_connection_ui_ops(); | |
361 | |
362 if (ops != NULL && ops->connect_progress != NULL) | |
363 ops->connect_progress(gc, text, step, count); | |
364 } | |
365 | |
366 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
367 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
368 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
369 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
370 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
371 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
372 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
373 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
374 ops = gaim_get_connection_ui_ops(); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
375 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
376 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
377 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
378 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
379 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
380 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
381 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
382 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
383 GaimConnectionUiOps *ops; |
6106 | 384 gchar *primary, *secondary; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
385 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
386 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
387 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
388 |
6106 | 389 primary = g_strdup_printf(_("%s has been disconnected"), |
390 gaim_account_get_username(gaim_connection_get_account(gc))); | |
391 secondary = g_strdup_printf("%s\n%s", full_date(), | |
392 text ? text : _("Reason Unknown.")); | |
393 gaim_notify_error(NULL, _("Connection Error"), primary, secondary); | |
394 g_free(primary); | |
395 g_free(secondary); | |
396 | |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
397 ops = gaim_get_connection_ui_ops(); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
398 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
399 if (ops != NULL && ops->disconnected != NULL) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
400 ops->disconnected(gc, text); |
5727 | 401 |
6076 | 402 g_timeout_add(0, gaim_connection_disconnect_cb, |
403 gaim_connection_get_account(gc)); | |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
404 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
405 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
406 void |
5563 | 407 gaim_connections_disconnect_all(void) |
408 { | |
409 GList *l; | |
6113 | 410 GaimConnection *gc; |
5563 | 411 |
6113 | 412 while ((l = gaim_connections_get_all()) != NULL) { |
413 gc = l->data; | |
414 gc->wants_to_die = TRUE; | |
415 gaim_connection_destroy(gc); | |
416 } | |
5563 | 417 } |
418 | |
419 GList * | |
420 gaim_connections_get_all(void) | |
421 { | |
422 return connections; | |
423 } | |
424 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
425 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
426 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
427 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
428 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
429 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
430 |
5563 | 431 void |
432 gaim_set_connection_ui_ops(GaimConnectionUiOps *ops) | |
433 { | |
434 connection_ui_ops = ops; | |
435 } | |
436 | |
437 GaimConnectionUiOps * | |
438 gaim_get_connection_ui_ops(void) | |
439 { | |
440 return connection_ui_ops; | |
441 } | |
442 |