Mercurial > pidgin.yaz
annotate src/connection.c @ 6485:70d5122bc3ff
[gaim-migrate @ 6999]
Removed the old event system and replaced it with a much better signal
system. There will most likely be some bugs in this, but it seems to be
working for now. Plugins can now generate their own signals, and other
plugins can find those plugins and connect to them. This could give
plugins a form of IPC. It's also useful for other things. It's rather
flexible, except for the damn marshalling, but there's no way around that
that I or the glib people can see.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Mon, 18 Aug 2003 01:03:43 +0000 |
parents | 4aa3b1cec52b |
children | c8e31153eea7 |
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" |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
32 #include "signals.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
33 #include "sound.h" |
6106 | 34 #include "util.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
35 |
5563 | 36 static GList *connections = NULL; |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
37 static GList *connections_connecting = NULL; |
5563 | 38 static GaimConnectionUiOps *connection_ui_ops = NULL; |
39 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
40 static int connections_handle; |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
41 |
5563 | 42 GaimConnection * |
43 gaim_connection_new(GaimAccount *account) | |
44 { | |
45 GaimConnection *gc; | |
46 | |
47 g_return_val_if_fail(account != NULL, NULL); | |
48 | |
49 gc = g_new0(GaimConnection, 1); | |
50 | |
51 gc->prpl = gaim_find_prpl(gaim_account_get_protocol(account)); | |
52 | |
53 gaim_connection_set_account(gc, account); | |
54 gaim_account_set_connection(account, gc); | |
55 | |
56 return gc; | |
57 } | |
58 | |
59 void | |
60 gaim_connection_destroy(GaimConnection *gc) | |
61 { | |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
62 GaimAccount *account; |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
63 |
5563 | 64 g_return_if_fail(gc != NULL); |
65 | |
66 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { | |
67 gaim_connection_disconnect(gc); | |
68 | |
69 return; | |
70 } | |
71 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
72 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
73 "Destroying connection %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
74 |
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
75 account = gaim_connection_get_account(gc); |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
76 gaim_account_set_connection(account, NULL); |
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
77 |
5563 | 78 if (gc->display_name != NULL) |
79 g_free(gc->display_name); | |
80 | |
81 if (gc->away != NULL) | |
82 g_free(gc->away); | |
83 | |
84 if (gc->away_state != NULL) | |
85 g_free(gc->away_state); | |
86 | |
6393 | 87 if (gc->disconnect_timeout) |
88 g_source_remove(gc->disconnect_timeout); | |
89 | |
5563 | 90 g_free(gc); |
91 } | |
92 | |
6110 | 93 static void request_pass_ok_cb(GaimAccount *account, const char *entry) |
6109 | 94 { |
95 gaim_account_set_password(account, (*entry != '\0') ? entry : NULL); | |
96 | |
6110 | 97 gaim_account_connect(account); |
6109 | 98 } |
99 | |
100 | |
5563 | 101 void |
102 gaim_connection_connect(GaimConnection *gc) | |
103 { | |
104 GaimAccount *account; | |
105 GaimConnectionUiOps *ops; | |
106 GaimPluginProtocolInfo *prpl_info = NULL; | |
107 | |
108 g_return_if_fail(gc != NULL); | |
109 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
110 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
111 "Connecting. gc = %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
112 |
5563 | 113 ops = gaim_get_connection_ui_ops(); |
114 | |
6136
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
115 if (gc->prpl != NULL) |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
116 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
117 else { |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
118 gchar *message = g_strdup_printf(_("Missing protocol plugin for %s"), |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
119 gaim_account_get_username(gaim_connection_get_account(gc))); |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
120 |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
121 gaim_debug(GAIM_DEBUG_ERROR, "connection", |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
122 "Could not get prpl info for %p\n", gc); |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
123 gaim_notify_error(NULL, _("Connection Error"), |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
124 message, NULL); |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
125 g_free(message); |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
126 return; |
e391813214a6
[gaim-migrate @ 6610]
Christian Hammond <chipx86@chipx86.com>
parents:
6113
diff
changeset
|
127 } |
5563 | 128 |
129 account = gaim_connection_get_account(gc); | |
130 | |
6109 | 131 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) |
132 return; | |
133 | |
6036 | 134 if (!(prpl_info->options & OPT_PROTO_NO_PASSWORD) && |
6231 | 135 !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL) && |
136 gaim_account_get_password(account) == NULL) { | |
6111 | 137 gchar *primary; |
6231 | 138 gchar *escaped; |
139 const gchar *username = gaim_account_get_username(account); | |
140 | |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
141 gaim_debug(GAIM_DEBUG_INFO, "connection", "Requesting password\n"); |
6468
4aa3b1cec52b
[gaim-migrate @ 6977]
Christian Hammond <chipx86@chipx86.com>
parents:
6460
diff
changeset
|
142 gaim_connection_destroy(gc); |
6231 | 143 escaped = g_markup_escape_text(username, strlen(username)); |
144 primary = g_strdup_printf(_("Enter password for %s"), escaped); | |
6111 | 145 gaim_request_input(gc, NULL, primary, NULL, NULL, FALSE, TRUE, |
6109 | 146 _("OK"), G_CALLBACK(request_pass_ok_cb), |
6110 | 147 _("Cancel"), NULL, account); |
6111 | 148 g_free(primary); |
6231 | 149 g_free(escaped); |
5563 | 150 |
151 return; | |
152 } | |
153 | |
154 gaim_connection_set_state(gc, GAIM_CONNECTING); | |
155 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
156 gaim_signal_emit(gaim_connections_get_handle(), "signing-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
157 |
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
158 gaim_debug(GAIM_DEBUG_INFO, "connection", "Calling serv_login\n"); |
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
159 |
6297
ae8b0a12e6f3
[gaim-migrate @ 6796]
Christian Hammond <chipx86@chipx86.com>
parents:
6296
diff
changeset
|
160 connections = g_list_append(connections, gc); |
ae8b0a12e6f3
[gaim-migrate @ 6796]
Christian Hammond <chipx86@chipx86.com>
parents:
6296
diff
changeset
|
161 |
5563 | 162 serv_login(account); |
163 } | |
164 | |
165 void | |
166 gaim_connection_disconnect(GaimConnection *gc) | |
167 { | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
168 GaimAccount *account; |
5563 | 169 GList *wins; |
170 | |
171 g_return_if_fail(gc != NULL); | |
172 | |
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
173 account = gaim_connection_get_account(gc); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
174 |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
175 if (gaim_account_get_connection(account) != NULL) { |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
176 gaim_account_disconnect(account); |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
177 return; |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
178 } |
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
179 |
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
180 gaim_debug(GAIM_DEBUG_INFO, "connection", |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
181 "Disconnecting connection %p\n", gc); |
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
182 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
183 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
184 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
185 gaim_blist_remove_account(gaim_connection_get_account(gc)); |
5563 | 186 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
187 gaim_signal_emit(gaim_connections_get_handle(), "signing-off", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
188 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
189 serv_close(gc); |
5563 | 190 |
6018 | 191 connections = g_list_remove(connections, gc); |
192 | |
5859
022786c7ab53
[gaim-migrate @ 6290]
Christian Hammond <chipx86@chipx86.com>
parents:
5788
diff
changeset
|
193 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
5563 | 194 |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
195 gaim_signal_emit(gaim_connections_get_handle(), "signed-off", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
196 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
197 system_log(log_signoff, gc, NULL, |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
198 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); |
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
199 |
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
200 /* |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
201 * 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
|
202 * notification system. |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
203 */ |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
204 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
205 GaimWindow *win = (GaimWindow *)wins->data; |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
206 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
207 GAIM_CONV_ACCOUNT_OFFLINE); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
208 } |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
209 |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
210 gaim_request_close_with_handle(gc); |
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
211 gaim_notify_close_with_handle(gc); |
5563 | 212 } |
213 | |
5622
70ae81fc802f
[gaim-migrate @ 6029]
Christian Hammond <chipx86@chipx86.com>
parents:
5615
diff
changeset
|
214 gaim_connection_destroy(gc); |
5563 | 215 } |
216 | |
6029 | 217 gboolean |
218 gaim_connection_disconnect_cb(gpointer data) | |
219 { | |
6076 | 220 GaimAccount *account = data; |
221 GaimConnection *gc = gaim_account_get_connection(account); | |
6029 | 222 |
6076 | 223 if(gc) |
224 gaim_connection_disconnect(gc); | |
6029 | 225 |
226 return FALSE; | |
227 } | |
228 | |
5563 | 229 /* |
230 * d:)->-< | |
231 * | |
232 * d:O-\-< | |
233 * | |
234 * d:D-/-< | |
235 * | |
236 * d8D->-< DANCE! | |
237 */ | |
238 | |
239 void | |
240 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
241 { | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
242 GaimConnectionUiOps *ops; |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
243 |
5563 | 244 g_return_if_fail(gc != NULL); |
245 | |
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
246 if (gc->state == state) |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
247 return; |
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
248 |
5563 | 249 gc->state = state; |
250 | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
251 ops = gaim_get_connection_ui_ops(); |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
252 |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
253 if (gc->state == GAIM_CONNECTING) { |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
254 connections_connecting = g_list_append(connections_connecting, gc); |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
255 } |
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
256 else { |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
257 connections_connecting = g_list_remove(connections_connecting, gc); |
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
258 } |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
259 |
5563 | 260 if (gc->state == GAIM_CONNECTED) { |
261 GaimBlistNode *gnode,*bnode; | |
262 GList *wins; | |
263 GList *add_buds=NULL; | |
264 | |
265 /* Set the time the account came online */ | |
266 time(&gc->login_time); | |
267 | |
268 if (ops != NULL && ops->connected != NULL) | |
269 ops->connected(gc); | |
270 | |
271 gaim_blist_show(); | |
272 gaim_blist_add_account(gc->account); | |
273 | |
274 /* | |
275 * XXX This is a hack! Remove this and replace it with a better event | |
276 * notification system. | |
277 */ | |
278 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
279 GaimWindow *win = (GaimWindow *)wins->data; |
5563 | 280 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
281 GAIM_CONV_ACCOUNT_ONLINE); | |
282 } | |
283 | |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
284 gaim_signal_emit(gaim_connections_get_handle(), "signed-on", gc); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
285 |
5563 | 286 system_log(log_signon, gc, NULL, |
287 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); | |
288 | |
289 #if 0 | |
290 /* away option given? */ | |
291 if (opt_away) { | |
292 away_on_login(opt_away_arg); | |
293 /* don't do it again */ | |
294 opt_away = 0; | |
295 } else if (awaymessage) { | |
296 serv_set_away(gc, GAIM_AWAY_CUSTOM, awaymessage->message); | |
297 } | |
298 if (opt_away_arg != NULL) { | |
299 g_free(opt_away_arg); | |
300 opt_away_arg = NULL; | |
301 } | |
302 #endif | |
303 | |
304 /* let the prpl know what buddies we pulled out of the local list */ | |
305 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
306 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
307 continue; | |
308 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
309 if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) { | |
310 struct buddy *b = (struct buddy *)bnode; | |
311 if(b->account == gc->account) { | |
312 add_buds = g_list_append(add_buds, b->name); | |
313 } | |
314 } | |
315 } | |
316 } | |
317 | |
318 if(add_buds) { | |
319 serv_add_buddies(gc, add_buds); | |
320 g_list_free(add_buds); | |
321 } | |
322 | |
323 serv_set_permit_deny(gc); | |
324 } | |
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
325 else if (gc->state == GAIM_DISCONNECTED) { |
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
326 if (ops != NULL && ops->disconnected != NULL) |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
327 ops->disconnected(gc); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
328 } |
5563 | 329 } |
330 | |
331 void | |
332 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
333 { | |
334 g_return_if_fail(gc != NULL); | |
335 g_return_if_fail(account != NULL); | |
336 | |
337 gc->account = account; | |
338 } | |
339 | |
340 void | |
341 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
342 { | |
343 g_return_if_fail(gc != NULL); | |
344 | |
345 if (gc->display_name != NULL) | |
346 g_free(gc->display_name); | |
347 | |
348 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
349 } | |
350 | |
351 GaimConnectionState | |
352 gaim_connection_get_state(const GaimConnection *gc) | |
353 { | |
354 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
355 | |
356 return gc->state; | |
357 } | |
358 | |
359 GaimAccount * | |
360 gaim_connection_get_account(const GaimConnection *gc) | |
361 { | |
362 g_return_val_if_fail(gc != NULL, NULL); | |
363 | |
364 return gc->account; | |
365 } | |
366 | |
367 const char * | |
368 gaim_connection_get_display_name(const GaimConnection *gc) | |
369 { | |
370 g_return_val_if_fail(gc != NULL, NULL); | |
371 | |
372 return gc->display_name; | |
373 } | |
374 | |
375 void | |
376 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
377 size_t step, size_t count) | |
378 { | |
379 GaimConnectionUiOps *ops; | |
380 | |
381 g_return_if_fail(gc != NULL); | |
382 g_return_if_fail(text != NULL); | |
383 g_return_if_fail(step < count); | |
384 g_return_if_fail(count > 1); | |
385 | |
386 ops = gaim_get_connection_ui_ops(); | |
387 | |
388 if (ops != NULL && ops->connect_progress != NULL) | |
389 ops->connect_progress(gc, text, step, count); | |
390 } | |
391 | |
392 void | |
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
393 gaim_connection_notice(GaimConnection *gc, const char *text) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
394 { |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
395 GaimConnectionUiOps *ops; |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
396 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
397 g_return_if_fail(gc != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
398 g_return_if_fail(text != NULL); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
399 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
400 ops = gaim_get_connection_ui_ops(); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
401 |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
402 if (ops != NULL && ops->notice != NULL) |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
403 ops->notice(gc, text); |
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
404 } |
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 void |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
407 gaim_connection_error(GaimConnection *gc, const char *text) |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
408 { |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
409 GaimConnectionUiOps *ops; |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
410 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
411 g_return_if_fail(gc != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
412 g_return_if_fail(text != NULL); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
413 |
6393 | 414 /* 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
|
415 if (gc->disconnect_timeout) |
6393 | 416 return; |
417 | |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
418 ops = gaim_get_connection_ui_ops(); |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
419 |
6460
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
420 if (ops != NULL) { |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
421 if (ops->report_disconnect != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
422 ops->report_disconnect(gc, text); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
423 |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
424 if (ops->disconnected != NULL) |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
425 ops->disconnected(gc); |
ff4551719cc7
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6393
diff
changeset
|
426 } |
5727 | 427 |
6393 | 428 gc->disconnect_timeout = g_timeout_add(0, gaim_connection_disconnect_cb, |
6076 | 429 gaim_connection_get_account(gc)); |
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
430 } |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
431 |
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
432 void |
5563 | 433 gaim_connections_disconnect_all(void) |
434 { | |
435 GList *l; | |
6113 | 436 GaimConnection *gc; |
5563 | 437 |
6113 | 438 while ((l = gaim_connections_get_all()) != NULL) { |
439 gc = l->data; | |
440 gc->wants_to_die = TRUE; | |
441 gaim_connection_destroy(gc); | |
442 } | |
5563 | 443 } |
444 | |
445 GList * | |
446 gaim_connections_get_all(void) | |
447 { | |
448 return connections; | |
449 } | |
450 | |
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
451 GList * |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
452 gaim_connections_get_connecting(void) |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
453 { |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
454 return connections_connecting; |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
455 } |
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
456 |
5563 | 457 void |
6485
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
458 gaim_connections_init(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
459 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
460 void *handle = gaim_connections_get_handle(); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
461 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
462 gaim_signal_register(handle, "signing-on", gaim_marshal_VOID__POINTER); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
463 gaim_signal_register(handle, "signed-on", gaim_marshal_VOID__POINTER); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
464 gaim_signal_register(handle, "signing-off", gaim_marshal_VOID__POINTER); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
465 gaim_signal_register(handle, "signed-off", gaim_marshal_VOID__POINTER); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
466 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
467 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
468 void |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
469 gaim_connections_uninit(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
470 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
471 gaim_signals_unregister_by_instance(gaim_connections_get_handle()); |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
472 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
473 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
474 void * |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
475 gaim_connections_get_handle(void) |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
476 { |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
477 return &connections_handle; |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
478 } |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
479 |
70d5122bc3ff
[gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents:
6468
diff
changeset
|
480 void |
5563 | 481 gaim_set_connection_ui_ops(GaimConnectionUiOps *ops) |
482 { | |
483 connection_ui_ops = ops; | |
484 } | |
485 | |
486 GaimConnectionUiOps * | |
487 gaim_get_connection_ui_ops(void) | |
488 { | |
489 return connection_ui_ops; | |
490 } |