Mercurial > pidgin
annotate src/connection.c @ 6110:d1d8e70cf33d
[gaim-migrate @ 6572]
Now when the password field is blank and gaim prompts you for the pass,
the gc is now destroyed at that time and then recreated later. This feels
more correct to me, I dunno.
This means that you can have multiple "enter your password" dialog windows
for the same account, though. I don't think this is too big of a deal,
so I figured it would be ok.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 13 Jul 2003 18:43:30 +0000 |
parents | 0922bb7a7bbc |
children | 77dcc775f97b |
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 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
121 gaim_debug(GAIM_DEBUG_INFO, "connection", "Requesting password\n"); |
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
122 |
6109 | 123 gaim_request_input(gc, NULL, _("Please enter your password"), NULL, |
124 NULL, FALSE, TRUE, | |
125 _("OK"), G_CALLBACK(request_pass_ok_cb), | |
6110 | 126 _("Cancel"), NULL, account); |
127 gaim_connection_destroy(gc); | |
5563 | 128 |
129 return; | |
130 } | |
131 | |
132 gaim_connection_set_state(gc, GAIM_CONNECTING); | |
133 | |
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
134 gaim_debug(GAIM_DEBUG_INFO, "connection", "Calling serv_login\n"); |
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
135 |
6018 | 136 connections = g_list_append(connections, gc); |
137 | |
5563 | 138 serv_login(account); |
139 } | |
140 | |
141 void | |
142 gaim_connection_disconnect(GaimConnection *gc) | |
143 { | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
144 GaimAccount *account; |
5563 | 145 GList *wins; |
146 | |
147 g_return_if_fail(gc != NULL); | |
148 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
149 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
150 |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
151 if (gaim_account_get_connection(account) != NULL) { |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
152 gaim_account_disconnect(account); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
153 return; |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
154 } |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
155 |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
156 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
157 "Disconnecting connection %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
158 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
159 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
160 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
161 gaim_blist_remove_account(gaim_connection_get_account(gc)); |
5563 | 162 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
163 serv_close(gc); |
5563 | 164 |
6018 | 165 connections = g_list_remove(connections, gc); |
166 | |
5859
022786c7ab53
[gaim-migrate @ 6290]
Christian Hammond <chipx86@chipx86.com>
parents:
5788
diff
changeset
|
167 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
5563 | 168 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
169 gaim_event_broadcast(event_signoff, gc); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
170 system_log(log_signoff, gc, NULL, |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
171 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
172 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
173 /* |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
174 * 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
|
175 * notification system. |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
176 */ |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
177 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
178 GaimWindow *win = (GaimWindow *)wins->data; |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
179 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
180 GAIM_CONV_ACCOUNT_OFFLINE); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
181 } |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
182 |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
183 gaim_request_close_with_handle(gc); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
184 gaim_notify_close_with_handle(gc); |
5563 | 185 } |
186 | |
5622
70ae81fc802f
[gaim-migrate @ 6029]
Christian Hammond <chipx86@chipx86.com>
parents:
5615
diff
changeset
|
187 gaim_connection_destroy(gc); |
5563 | 188 } |
189 | |
6029 | 190 gboolean |
191 gaim_connection_disconnect_cb(gpointer data) | |
192 { | |
6076 | 193 GaimAccount *account = data; |
194 GaimConnection *gc = gaim_account_get_connection(account); | |
6029 | 195 |
6076 | 196 if(gc) |
197 gaim_connection_disconnect(gc); | |
6029 | 198 |
199 return FALSE; | |
200 } | |
201 | |
5563 | 202 /* |
203 * d:)->-< | |
204 * | |
205 * d:O-\-< | |
206 * | |
207 * d:D-/-< | |
208 * | |
209 * d8D->-< DANCE! | |
210 */ | |
211 | |
212 void | |
213 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
214 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
215 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
216 |
5563 | 217 g_return_if_fail(gc != NULL); |
218 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
219 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
220 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
221 |
5563 | 222 gc->state = state; |
223 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
224 ops = gaim_get_connection_ui_ops(); |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
225 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
226 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
227 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
228 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
229 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
230 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
231 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
232 |
5563 | 233 if (gc->state == GAIM_CONNECTED) { |
234 GaimBlistNode *gnode,*bnode; | |
235 GList *wins; | |
236 GList *add_buds=NULL; | |
237 | |
238 /* Set the time the account came online */ | |
239 time(&gc->login_time); | |
240 | |
241 if (ops != NULL && ops->connected != NULL) | |
242 ops->connected(gc); | |
243 | |
244 gaim_blist_show(); | |
245 gaim_blist_add_account(gc->account); | |
246 | |
247 /* | |
248 * XXX This is a hack! Remove this and replace it with a better event | |
249 * notification system. | |
250 */ | |
251 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
252 GaimWindow *win = (GaimWindow *)wins->data; |
5563 | 253 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
254 GAIM_CONV_ACCOUNT_ONLINE); | |
255 } | |
256 | |
257 gaim_event_broadcast(event_signon, gc); | |
258 system_log(log_signon, gc, NULL, | |
259 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); | |
260 | |
261 #if 0 | |
262 /* away option given? */ | |
263 if (opt_away) { | |
264 away_on_login(opt_away_arg); | |
265 /* don't do it again */ | |
266 opt_away = 0; | |
267 } else if (awaymessage) { | |
268 serv_set_away(gc, GAIM_AWAY_CUSTOM, awaymessage->message); | |
269 } | |
270 if (opt_away_arg != NULL) { | |
271 g_free(opt_away_arg); | |
272 opt_away_arg = NULL; | |
273 } | |
274 #endif | |
275 | |
276 /* let the prpl know what buddies we pulled out of the local list */ | |
277 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
278 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
279 continue; | |
280 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
281 if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) { | |
282 struct buddy *b = (struct buddy *)bnode; | |
283 if(b->account == gc->account) { | |
284 add_buds = g_list_append(add_buds, b->name); | |
285 } | |
286 } | |
287 } | |
288 } | |
289 | |
290 if(add_buds) { | |
291 serv_add_buddies(gc, add_buds); | |
292 g_list_free(add_buds); | |
293 } | |
294 | |
295 serv_set_permit_deny(gc); | |
296 } | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
297 else if (gc->state == GAIM_DISCONNECTED) { |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
298 if (ops != NULL && ops->disconnected != NULL) |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
299 ops->disconnected(gc, NULL); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
300 } |
5563 | 301 } |
302 | |
303 void | |
304 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
305 { | |
306 g_return_if_fail(gc != NULL); | |
307 g_return_if_fail(account != NULL); | |
308 | |
309 gc->account = account; | |
310 } | |
311 | |
312 void | |
313 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
314 { | |
315 g_return_if_fail(gc != NULL); | |
316 | |
317 if (gc->display_name != NULL) | |
318 g_free(gc->display_name); | |
319 | |
320 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
321 } | |
322 | |
323 GaimConnectionState | |
324 gaim_connection_get_state(const GaimConnection *gc) | |
325 { | |
326 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
327 | |
328 return gc->state; | |
329 } | |
330 | |
331 GaimAccount * | |
332 gaim_connection_get_account(const GaimConnection *gc) | |
333 { | |
334 g_return_val_if_fail(gc != NULL, NULL); | |
335 | |
336 return gc->account; | |
337 } | |
338 | |
339 const char * | |
340 gaim_connection_get_display_name(const GaimConnection *gc) | |
341 { | |
342 g_return_val_if_fail(gc != NULL, NULL); | |
343 | |
344 return gc->display_name; | |
345 } | |
346 | |
347 void | |
348 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
349 size_t step, size_t count) | |
350 { | |
351 GaimConnectionUiOps *ops; | |
352 | |
353 g_return_if_fail(gc != NULL); | |
354 g_return_if_fail(text != NULL); | |
355 g_return_if_fail(step < count); | |
356 g_return_if_fail(count > 1); | |
357 | |
358 ops = gaim_get_connection_ui_ops(); | |
359 | |
360 if (ops != NULL && ops->connect_progress != NULL) | |
361 ops->connect_progress(gc, text, step, count); | |
362 } | |
363 | |
364 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
365 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
366 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
367 GaimConnectionUiOps *ops; |
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 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
370 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
371 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
372 ops = gaim_get_connection_ui_ops(); |
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 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
375 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
376 } |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
377 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
378 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
379 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
380 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
381 GaimConnectionUiOps *ops; |
6106 | 382 gchar *primary, *secondary; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
383 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
384 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
385 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
386 |
6106 | 387 primary = g_strdup_printf(_("%s has been disconnected"), |
388 gaim_account_get_username(gaim_connection_get_account(gc))); | |
389 secondary = g_strdup_printf("%s\n%s", full_date(), | |
390 text ? text : _("Reason Unknown.")); | |
391 gaim_notify_error(NULL, _("Connection Error"), primary, secondary); | |
392 g_free(primary); | |
393 g_free(secondary); | |
394 | |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
395 ops = gaim_get_connection_ui_ops(); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
396 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
397 if (ops != NULL && ops->disconnected != NULL) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
398 ops->disconnected(gc, text); |
5727 | 399 |
6076 | 400 g_timeout_add(0, gaim_connection_disconnect_cb, |
401 gaim_connection_get_account(gc)); | |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
402 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
403 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
404 void |
5563 | 405 gaim_connections_disconnect_all(void) |
406 { | |
407 GList *l; | |
408 | |
5624
4cc9e3fa22c4
[gaim-migrate @ 6031]
Christian Hammond <chipx86@chipx86.com>
parents:
5623
diff
changeset
|
409 while ((l = gaim_connections_get_all()) != NULL) |
5563 | 410 gaim_connection_destroy(l->data); |
411 } | |
412 | |
413 GList * | |
414 gaim_connections_get_all(void) | |
415 { | |
416 return connections; | |
417 } | |
418 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
419 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
420 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
421 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
422 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
423 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
424 |
5563 | 425 void |
426 gaim_set_connection_ui_ops(GaimConnectionUiOps *ops) | |
427 { | |
428 connection_ui_ops = ops; | |
429 } | |
430 | |
431 GaimConnectionUiOps * | |
432 gaim_get_connection_ui_ops(void) | |
433 { | |
434 return connection_ui_ops; | |
435 } | |
436 |