Mercurial > pidgin
annotate src/connection.c @ 6104:29ddc42ff402
[gaim-migrate @ 6565]
Make gaim not crash when signing off an account that has had a message
notify window closed for it. Previously Gaim was freeing the widget but
not removing it from the linked list, so gaim attempted to free it again
at sign off.
"There's been a lot of talk, about this next song. Maybe a little too much
talk. This song is not a rebel song. This song is Sunday, Bloody Sunday."
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Sun, 13 Jul 2003 07:58:32 +0000 |
| parents | 8d6aa792e0f6 |
| children | 99f4bbeb27bc |
| 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" |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
33 |
| 5563 | 34 static GList *connections = NULL; |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
35 static GList *connections_connecting = NULL; |
| 5563 | 36 static GaimConnectionUiOps *connection_ui_ops = NULL; |
| 37 | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5859
diff
changeset
|
38 |
| 5563 | 39 GaimConnection * |
| 40 gaim_connection_new(GaimAccount *account) | |
| 41 { | |
| 42 GaimConnection *gc; | |
| 43 | |
| 44 g_return_val_if_fail(account != NULL, NULL); | |
| 45 | |
| 46 gc = g_new0(GaimConnection, 1); | |
| 47 | |
| 48 gc->prpl = gaim_find_prpl(gaim_account_get_protocol(account)); | |
| 49 | |
| 50 gaim_connection_set_account(gc, account); | |
| 51 gaim_account_set_connection(account, gc); | |
| 52 | |
| 53 return gc; | |
| 54 } | |
| 55 | |
| 56 void | |
| 57 gaim_connection_destroy(GaimConnection *gc) | |
| 58 { | |
|
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
59 GaimAccount *account; |
|
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
60 |
| 5563 | 61 g_return_if_fail(gc != NULL); |
| 62 | |
| 63 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { | |
| 64 gaim_connection_disconnect(gc); | |
| 65 | |
| 66 return; | |
| 67 } | |
| 68 | |
|
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
69 gaim_debug(GAIM_DEBUG_INFO, "connection", |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
70 "Destroying connection %p\n", gc); |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
71 |
|
5741
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
72 account = gaim_connection_get_account(gc); |
|
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
73 gaim_account_set_connection(account, NULL); |
|
1b5e6e6e80e9
[gaim-migrate @ 6165]
Christian Hammond <chipx86@chipx86.com>
parents:
5740
diff
changeset
|
74 |
| 5563 | 75 if (gc->display_name != NULL) |
| 76 g_free(gc->display_name); | |
| 77 | |
| 78 if (gc->away != NULL) | |
| 79 g_free(gc->away); | |
| 80 | |
| 81 if (gc->away_state != NULL) | |
| 82 g_free(gc->away_state); | |
| 83 | |
| 84 g_free(gc); | |
| 85 } | |
| 86 | |
| 87 void | |
| 88 gaim_connection_connect(GaimConnection *gc) | |
| 89 { | |
| 90 GaimAccount *account; | |
| 91 GaimConnectionUiOps *ops; | |
| 92 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 93 | |
| 94 g_return_if_fail(gc != NULL); | |
| 95 | |
|
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
96 gaim_debug(GAIM_DEBUG_INFO, "connection", |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
97 "Connecting. gc = %p\n", gc); |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
98 |
| 5563 | 99 ops = gaim_get_connection_ui_ops(); |
| 100 | |
| 101 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 102 | |
| 103 account = gaim_connection_get_account(gc); | |
| 104 | |
| 6036 | 105 if (!(prpl_info->options & OPT_PROTO_NO_PASSWORD) && |
| 5563 | 106 !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL) && |
| 107 gaim_account_get_password(account) == NULL) { | |
| 108 | |
|
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
109 gaim_debug(GAIM_DEBUG_INFO, "connection", "Requesting password\n"); |
|
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
110 |
| 5563 | 111 if (ops != NULL && ops->request_pass != NULL) |
| 112 ops->request_pass(gc); | |
| 113 | |
| 114 return; | |
| 115 } | |
| 116 | |
| 117 gaim_connection_set_state(gc, GAIM_CONNECTING); | |
| 118 | |
|
5581
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
119 gaim_debug(GAIM_DEBUG_INFO, "connection", "Calling serv_login\n"); |
|
3a9b54f260e3
[gaim-migrate @ 5985]
Christian Hammond <chipx86@chipx86.com>
parents:
5571
diff
changeset
|
120 |
| 6018 | 121 connections = g_list_append(connections, gc); |
| 122 | |
| 5563 | 123 serv_login(account); |
| 124 } | |
| 125 | |
| 126 void | |
| 127 gaim_connection_disconnect(GaimConnection *gc) | |
| 128 { | |
|
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
129 GaimAccount *account; |
| 5563 | 130 GList *wins; |
| 131 | |
| 132 g_return_if_fail(gc != NULL); | |
| 133 | |
|
5926
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
134 account = gaim_connection_get_account(gc); |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
135 |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
136 if (gaim_account_get_connection(account) != NULL) { |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
137 gaim_account_disconnect(account); |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
138 return; |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
139 } |
|
6c22d37c6a3c
[gaim-migrate @ 6366]
Christian Hammond <chipx86@chipx86.com>
parents:
5905
diff
changeset
|
140 |
|
5930
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
141 gaim_debug(GAIM_DEBUG_INFO, "connection", |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
142 "Disconnecting connection %p\n", gc); |
|
03f1d6cd784c
[gaim-migrate @ 6370]
Christian Hammond <chipx86@chipx86.com>
parents:
5926
diff
changeset
|
143 |
|
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
144 if (gaim_connection_get_state(gc) != GAIM_DISCONNECTED) { |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
145 if (gaim_connection_get_state(gc) != GAIM_CONNECTING) |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
146 gaim_blist_remove_account(gaim_connection_get_account(gc)); |
| 5563 | 147 |
|
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
148 serv_close(gc); |
| 5563 | 149 |
| 6018 | 150 connections = g_list_remove(connections, gc); |
| 151 | |
|
5859
022786c7ab53
[gaim-migrate @ 6290]
Christian Hammond <chipx86@chipx86.com>
parents:
5788
diff
changeset
|
152 gaim_connection_set_state(gc, GAIM_DISCONNECTED); |
| 5563 | 153 |
|
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
154 gaim_event_broadcast(event_signoff, gc); |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
155 system_log(log_signoff, gc, NULL, |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
156 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); |
|
5615
6500a6c8d679
[gaim-migrate @ 6022]
Christian Hammond <chipx86@chipx86.com>
parents:
5581
diff
changeset
|
157 |
|
5740
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
158 /* |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
159 * 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
|
160 * notification system. |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
161 */ |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
162 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
163 GaimWindow *win = (GaimWindow *)wins->data; |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
164 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
165 GAIM_CONV_ACCOUNT_OFFLINE); |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
166 } |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
167 |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
168 gaim_request_close_with_handle(gc); |
|
6ec7b32ab1df
[gaim-migrate @ 6164]
Christian Hammond <chipx86@chipx86.com>
parents:
5727
diff
changeset
|
169 gaim_notify_close_with_handle(gc); |
| 5563 | 170 } |
| 171 | |
|
5622
70ae81fc802f
[gaim-migrate @ 6029]
Christian Hammond <chipx86@chipx86.com>
parents:
5615
diff
changeset
|
172 gaim_connection_destroy(gc); |
| 5563 | 173 } |
| 174 | |
| 6029 | 175 gboolean |
| 176 gaim_connection_disconnect_cb(gpointer data) | |
| 177 { | |
| 6076 | 178 GaimAccount *account = data; |
| 179 GaimConnection *gc = gaim_account_get_connection(account); | |
| 6029 | 180 |
| 6076 | 181 if(gc) |
| 182 gaim_connection_disconnect(gc); | |
| 6029 | 183 |
| 184 return FALSE; | |
| 185 } | |
| 186 | |
| 5563 | 187 /* |
| 188 * d:)->-< | |
| 189 * | |
| 190 * d:O-\-< | |
| 191 * | |
| 192 * d:D-/-< | |
| 193 * | |
| 194 * d8D->-< DANCE! | |
| 195 */ | |
| 196 | |
| 197 void | |
| 198 gaim_connection_set_state(GaimConnection *gc, GaimConnectionState state) | |
| 199 { | |
|
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
200 GaimConnectionUiOps *ops; |
|
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
201 |
| 5563 | 202 g_return_if_fail(gc != NULL); |
| 203 | |
|
5784
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
204 if (gc->state == state) |
|
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
205 return; |
|
72fb22b9ac98
[gaim-migrate @ 6209]
Christian Hammond <chipx86@chipx86.com>
parents:
5741
diff
changeset
|
206 |
| 5563 | 207 gc->state = state; |
| 208 | |
|
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
209 ops = gaim_get_connection_ui_ops(); |
|
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
210 |
|
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
211 if (gc->state == GAIM_CONNECTING) { |
|
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
212 connections_connecting = g_list_append(connections_connecting, gc); |
|
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
213 } |
|
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
214 else { |
|
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
215 connections_connecting = g_list_remove(connections_connecting, gc); |
|
5905
dbe2a2174be9
[gaim-migrate @ 6337]
Christian Hammond <chipx86@chipx86.com>
parents:
5885
diff
changeset
|
216 } |
|
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
217 |
| 5563 | 218 if (gc->state == GAIM_CONNECTED) { |
| 219 GaimBlistNode *gnode,*bnode; | |
| 220 GList *wins; | |
| 221 GList *add_buds=NULL; | |
| 222 | |
| 223 /* Set the time the account came online */ | |
| 224 time(&gc->login_time); | |
| 225 | |
| 226 if (ops != NULL && ops->connected != NULL) | |
| 227 ops->connected(gc); | |
| 228 | |
| 229 gaim_blist_show(); | |
| 230 gaim_blist_add_account(gc->account); | |
| 231 | |
| 232 /* | |
| 233 * XXX This is a hack! Remove this and replace it with a better event | |
| 234 * notification system. | |
| 235 */ | |
| 236 for (wins = gaim_get_windows(); wins != NULL; wins = wins->next) { | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5631
diff
changeset
|
237 GaimWindow *win = (GaimWindow *)wins->data; |
| 5563 | 238 gaim_conversation_update(gaim_window_get_conversation_at(win, 0), |
| 239 GAIM_CONV_ACCOUNT_ONLINE); | |
| 240 } | |
| 241 | |
| 242 gaim_event_broadcast(event_signon, gc); | |
| 243 system_log(log_signon, gc, NULL, | |
| 244 OPT_LOG_BUDDY_SIGNON | OPT_LOG_MY_SIGNON); | |
| 245 | |
| 246 #if 0 | |
| 247 /* away option given? */ | |
| 248 if (opt_away) { | |
| 249 away_on_login(opt_away_arg); | |
| 250 /* don't do it again */ | |
| 251 opt_away = 0; | |
| 252 } else if (awaymessage) { | |
| 253 serv_set_away(gc, GAIM_AWAY_CUSTOM, awaymessage->message); | |
| 254 } | |
| 255 if (opt_away_arg != NULL) { | |
| 256 g_free(opt_away_arg); | |
| 257 opt_away_arg = NULL; | |
| 258 } | |
| 259 #endif | |
| 260 | |
| 261 /* let the prpl know what buddies we pulled out of the local list */ | |
| 262 for (gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
| 263 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 264 continue; | |
| 265 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
| 266 if(GAIM_BLIST_NODE_IS_BUDDY(bnode)) { | |
| 267 struct buddy *b = (struct buddy *)bnode; | |
| 268 if(b->account == gc->account) { | |
| 269 add_buds = g_list_append(add_buds, b->name); | |
| 270 } | |
| 271 } | |
| 272 } | |
| 273 } | |
| 274 | |
| 275 if(add_buds) { | |
| 276 serv_add_buddies(gc, add_buds); | |
| 277 g_list_free(add_buds); | |
| 278 } | |
| 279 | |
| 280 serv_set_permit_deny(gc); | |
| 281 } | |
|
5885
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
282 else if (gc->state == GAIM_DISCONNECTED) { |
|
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
283 if (ops != NULL && ops->disconnected != NULL) |
|
02569519d0cc
[gaim-migrate @ 6317]
Christian Hammond <chipx86@chipx86.com>
parents:
5883
diff
changeset
|
284 ops->disconnected(gc, NULL); |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
285 } |
| 5563 | 286 } |
| 287 | |
| 288 void | |
| 289 gaim_connection_set_account(GaimConnection *gc, GaimAccount *account) | |
| 290 { | |
| 291 g_return_if_fail(gc != NULL); | |
| 292 g_return_if_fail(account != NULL); | |
| 293 | |
| 294 gc->account = account; | |
| 295 } | |
| 296 | |
| 297 void | |
| 298 gaim_connection_set_display_name(GaimConnection *gc, const char *name) | |
| 299 { | |
| 300 g_return_if_fail(gc != NULL); | |
| 301 | |
| 302 if (gc->display_name != NULL) | |
| 303 g_free(gc->display_name); | |
| 304 | |
| 305 gc->display_name = (name == NULL ? NULL : g_strdup(name)); | |
| 306 } | |
| 307 | |
| 308 GaimConnectionState | |
| 309 gaim_connection_get_state(const GaimConnection *gc) | |
| 310 { | |
| 311 g_return_val_if_fail(gc != NULL, GAIM_DISCONNECTED); | |
| 312 | |
| 313 return gc->state; | |
| 314 } | |
| 315 | |
| 316 GaimAccount * | |
| 317 gaim_connection_get_account(const GaimConnection *gc) | |
| 318 { | |
| 319 g_return_val_if_fail(gc != NULL, NULL); | |
| 320 | |
| 321 return gc->account; | |
| 322 } | |
| 323 | |
| 324 const char * | |
| 325 gaim_connection_get_display_name(const GaimConnection *gc) | |
| 326 { | |
| 327 g_return_val_if_fail(gc != NULL, NULL); | |
| 328 | |
| 329 return gc->display_name; | |
| 330 } | |
| 331 | |
| 332 void | |
| 333 gaim_connection_update_progress(GaimConnection *gc, const char *text, | |
| 334 size_t step, size_t count) | |
| 335 { | |
| 336 GaimConnectionUiOps *ops; | |
| 337 | |
| 338 g_return_if_fail(gc != NULL); | |
| 339 g_return_if_fail(text != NULL); | |
| 340 g_return_if_fail(step < count); | |
| 341 g_return_if_fail(count > 1); | |
| 342 | |
| 343 ops = gaim_get_connection_ui_ops(); | |
| 344 | |
| 345 if (ops != NULL && ops->connect_progress != NULL) | |
| 346 ops->connect_progress(gc, text, step, count); | |
| 347 } | |
| 348 | |
| 349 void | |
|
5571
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
350 gaim_connection_notice(GaimConnection *gc, const char *text) |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
351 { |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
352 GaimConnectionUiOps *ops; |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
353 |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
354 g_return_if_fail(gc != NULL); |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
355 g_return_if_fail(text != NULL); |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
356 |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
357 ops = gaim_get_connection_ui_ops(); |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
358 |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
359 if (ops != NULL && ops->notice != NULL) |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
360 ops->notice(gc, text); |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
361 } |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
362 |
|
113090160626
[gaim-migrate @ 5973]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
363 void |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
364 gaim_connection_error(GaimConnection *gc, const char *text) |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
365 { |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
366 GaimConnectionUiOps *ops; |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
367 |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
368 g_return_if_fail(gc != NULL); |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
369 g_return_if_fail(text != NULL); |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
370 |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
371 ops = gaim_get_connection_ui_ops(); |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
372 |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
373 if (ops != NULL && ops->disconnected != NULL) |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
374 ops->disconnected(gc, text); |
| 5727 | 375 |
| 6076 | 376 g_timeout_add(0, gaim_connection_disconnect_cb, |
| 377 gaim_connection_get_account(gc)); | |
|
5564
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
378 } |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
379 |
|
187c740f2a4e
[gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents:
5563
diff
changeset
|
380 void |
| 5563 | 381 gaim_connections_disconnect_all(void) |
| 382 { | |
| 383 GList *l; | |
| 384 | |
|
5624
4cc9e3fa22c4
[gaim-migrate @ 6031]
Christian Hammond <chipx86@chipx86.com>
parents:
5623
diff
changeset
|
385 while ((l = gaim_connections_get_all()) != NULL) |
| 5563 | 386 gaim_connection_destroy(l->data); |
| 387 } | |
| 388 | |
| 389 GList * | |
| 390 gaim_connections_get_all(void) | |
| 391 { | |
| 392 return connections; | |
| 393 } | |
| 394 | |
|
5788
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
395 GList * |
|
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
396 gaim_connections_get_connecting(void) |
|
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
397 { |
|
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
398 return connections_connecting; |
|
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
399 } |
|
8c237274189f
[gaim-migrate @ 6213]
Christian Hammond <chipx86@chipx86.com>
parents:
5784
diff
changeset
|
400 |
| 5563 | 401 void |
| 402 gaim_set_connection_ui_ops(GaimConnectionUiOps *ops) | |
| 403 { | |
| 404 connection_ui_ops = ops; | |
| 405 } | |
| 406 | |
| 407 GaimConnectionUiOps * | |
| 408 gaim_get_connection_ui_ops(void) | |
| 409 { | |
| 410 return connection_ui_ops; | |
| 411 } | |
| 412 |
