Mercurial > pidgin
annotate src/protocols/msn/session.c @ 10534:975c2e66cd53
[gaim-migrate @ 11866]
If you have your proxy set to 'Use Environmental Settings', but don't actually
have any relevant environment variables set, you probably want to connect
directly (as mentioned in bug 1105809). This does just that.
committer: Tailor Script <tailor@pidgin.im>
| author | Stu Tomlinson <stu@nosnilmot.com> |
|---|---|
| date | Thu, 20 Jan 2005 20:58:25 +0000 |
| parents | ace8cd0de6ea |
| children | fed2a7c2471d |
| rev | line source |
|---|---|
| 5309 | 1 /** |
| 2 * @file session.c MSN session functions | |
| 3 * | |
| 4 * gaim | |
| 5 * | |
|
9198
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
6 * Gaim is the legal property of its developers, whose names are too numerous |
|
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
7 * to list here. Please refer to the COPYRIGHT file distributed with this |
|
ab6636c5a136
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
8 * source distribution. |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
9 * |
| 5309 | 10 * This program is free software; you can redistribute it and/or modify |
| 11 * it under the terms of the GNU General Public License as published by | |
| 12 * the Free Software Foundation; either version 2 of the License, or | |
| 13 * (at your option) any later version. | |
| 14 * | |
| 15 * This program is distributed in the hope that it will be useful, | |
| 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 * GNU General Public License for more details. | |
| 19 * | |
| 20 * You should have received a copy of the GNU General Public License | |
| 21 * along with this program; if not, write to the Free Software | |
| 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 */ | |
| 24 #include "msn.h" | |
| 25 #include "session.h" | |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
26 #include "notification.h" |
| 5309 | 27 |
| 10044 | 28 #include "dialog.h" |
| 29 | |
| 5309 | 30 MsnSession * |
| 10481 | 31 msn_session_new(GaimAccount *account) |
| 5309 | 32 { |
| 33 MsnSession *session; | |
| 34 | |
| 35 g_return_val_if_fail(account != NULL, NULL); | |
| 36 | |
| 37 session = g_new0(MsnSession, 1); | |
| 38 | |
| 10481 | 39 session->account = account; |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
40 session->notification = msn_notification_new(session); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
41 session->userlist = msn_userlist_new(session); |
| 10044 | 42 session->sync_userlist = msn_userlist_new(session); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
43 |
| 10481 | 44 session->user = msn_user_new(session->userlist, |
| 45 gaim_account_get_username(account), NULL); | |
| 46 | |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
47 session->protocol_ver = 9; |
|
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
48 |
| 5309 | 49 return session; |
| 50 } | |
| 51 | |
| 52 void | |
| 53 msn_session_destroy(MsnSession *session) | |
| 54 { | |
| 55 g_return_if_fail(session != NULL); | |
| 56 | |
| 10296 | 57 session->destroying = TRUE; |
| 58 | |
| 5309 | 59 if (session->connected) |
| 60 msn_session_disconnect(session); | |
| 61 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
62 if (session->notification != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
63 msn_notification_destroy(session->notification); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
64 |
| 5309 | 65 while (session->switches != NULL) |
| 66 msn_switchboard_destroy(session->switches->data); | |
| 67 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
68 while (session->slplinks != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
69 msn_slplink_destroy(session->slplinks->data); |
| 5309 | 70 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
71 msn_userlist_destroy(session->userlist); |
| 5309 | 72 |
| 10044 | 73 if (session->sync_userlist != NULL) |
| 74 msn_userlist_destroy(session->sync_userlist); | |
| 75 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
76 if (session->passport_info.kv != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
77 g_free(session->passport_info.kv); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
78 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
79 if (session->passport_info.sid != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
80 g_free(session->passport_info.sid); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
81 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
82 if (session->passport_info.mspauth != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
83 g_free(session->passport_info.mspauth); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
84 |
| 10284 | 85 if (session->passport_info.client_ip != NULL) |
| 86 g_free(session->passport_info.client_ip); | |
| 87 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
88 if (session->passport_info.file != NULL) |
| 10275 | 89 { |
| 90 unlink(session->passport_info.file); | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
91 g_free(session->passport_info.file); |
| 10275 | 92 } |
| 5427 | 93 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
94 if (session->sync != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
95 msn_sync_destroy(session->sync); |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
96 |
|
8171
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
97 if (session->nexus != NULL) |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
98 msn_nexus_destroy(session->nexus); |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
99 |
| 10481 | 100 if (session->user != NULL) |
| 101 msn_user_destroy(session->user); | |
| 102 | |
| 5309 | 103 g_free(session); |
| 104 } | |
| 105 | |
| 106 gboolean | |
| 10481 | 107 msn_session_connect(MsnSession *session, const char *host, int port, |
| 108 gboolean http_method) | |
| 5309 | 109 { |
| 110 g_return_val_if_fail(session != NULL, FALSE); | |
| 111 g_return_val_if_fail(!session->connected, TRUE); | |
| 112 | |
| 113 session->connected = TRUE; | |
| 10481 | 114 session->http_method = http_method; |
| 5309 | 115 |
| 10463 | 116 if (session->notification == NULL) |
| 117 { | |
| 118 gaim_debug_error("msn", "This shouldn't happen\n"); | |
| 119 g_return_val_if_reached(FALSE); | |
| 120 } | |
| 121 | |
| 10481 | 122 if (msn_notification_connect(session->notification, host, port)) |
|
8831
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
123 { |
|
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
124 return TRUE; |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
125 } |
| 5309 | 126 |
| 127 return FALSE; | |
| 128 } | |
| 129 | |
| 130 void | |
| 131 msn_session_disconnect(MsnSession *session) | |
| 132 { | |
| 133 g_return_if_fail(session != NULL); | |
| 134 g_return_if_fail(session->connected); | |
| 135 | |
| 10481 | 136 session->connected = FALSE; |
| 137 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
138 while (session->switches != NULL) |
| 10463 | 139 msn_switchboard_close(session->switches->data); |
| 5309 | 140 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
141 if (session->notification != NULL) |
| 10463 | 142 msn_notification_close(session->notification); |
| 5309 | 143 } |
| 144 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
145 /* TODO: This must go away when conversation is redesigned */ |
| 5309 | 146 MsnSwitchBoard * |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
147 msn_session_find_swboard(MsnSession *session, const char *username) |
| 5309 | 148 { |
| 149 GList *l; | |
| 150 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
151 g_return_val_if_fail(session != NULL, NULL); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
152 g_return_val_if_fail(username != NULL, NULL); |
| 5309 | 153 |
|
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
154 for (l = session->switches; l != NULL; l = l->next) |
|
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
155 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
156 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
157 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
158 swboard = l->data; |
| 5309 | 159 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
160 if (swboard->im_user != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
161 if (!strcmp(username, swboard->im_user)) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
162 return swboard; |
| 5309 | 163 } |
| 164 | |
| 165 return NULL; | |
| 166 } | |
| 167 | |
| 168 MsnSwitchBoard * | |
| 169 msn_session_find_switch_with_id(const MsnSession *session, int chat_id) | |
| 170 { | |
| 171 GList *l; | |
| 172 | |
| 173 g_return_val_if_fail(session != NULL, NULL); | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
174 g_return_val_if_fail(chat_id >= 0, NULL); |
| 5309 | 175 |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
176 for (l = session->switches; l != NULL; l = l->next) |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
177 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
178 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
179 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
180 swboard = l->data; |
| 5309 | 181 |
| 182 if (swboard->chat_id == chat_id) | |
| 183 return swboard; | |
| 184 } | |
| 185 | |
| 186 return NULL; | |
| 187 } | |
| 188 | |
| 189 MsnSwitchBoard * | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
190 msn_session_get_swboard(MsnSession *session, const char *username) |
| 5309 | 191 { |
| 192 MsnSwitchBoard *swboard; | |
| 193 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
194 swboard = msn_session_find_swboard(session, username); |
| 5309 | 195 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
196 if (swboard == NULL) |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
197 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
198 swboard = msn_switchboard_new(session); |
| 10225 | 199 swboard->im_user = g_strdup(username); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
200 msn_switchboard_request(swboard); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
201 msn_switchboard_request_add_user(swboard, username); |
| 5309 | 202 } |
| 203 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
204 return swboard; |
| 5309 | 205 } |
| 10044 | 206 |
| 207 static void | |
| 208 msn_session_sync_users(MsnSession *session) | |
| 209 { | |
| 210 GList *l; | |
| 211 | |
| 212 l = session->sync_userlist->users; | |
| 213 | |
| 214 while (l != NULL) | |
| 215 { | |
| 216 MsnUser *local_user; | |
| 217 | |
| 218 local_user = (MsnUser *)l->data; | |
| 219 | |
| 220 if (local_user->passport != NULL) | |
| 221 { | |
| 222 MsnUser *remote_user; | |
| 223 | |
| 224 remote_user = msn_userlist_find_user(session->userlist, | |
| 225 local_user->passport); | |
| 226 | |
| 227 if (remote_user == NULL || | |
| 228 ((local_user->list_op & ( 1 << MSN_LIST_FL)) && | |
| 229 !(remote_user->list_op & ( 1 << MSN_LIST_FL)))) | |
| 230 { | |
| 231 /* The user was not on the server list */ | |
| 232 msn_show_sync_issue(session, local_user->passport, NULL); | |
| 233 } | |
| 234 else | |
| 235 { | |
| 236 GList *l; | |
| 237 | |
| 238 for (l = local_user->group_ids; l != NULL; l = l->next) | |
| 239 { | |
| 240 const char *group_name; | |
| 241 int gid; | |
| 242 gboolean found = FALSE; | |
| 243 GList *l2; | |
| 244 | |
| 245 group_name = | |
| 246 msn_userlist_find_group_name(local_user->userlist, | |
| 10112 | 247 GPOINTER_TO_INT(l->data)); |
| 10044 | 248 |
| 249 gid = msn_userlist_find_group_id(remote_user->userlist, | |
| 250 group_name); | |
| 251 | |
| 252 for (l2 = remote_user->group_ids; l2 != NULL; l2 = l2->next) | |
| 253 { | |
| 10112 | 254 if (GPOINTER_TO_INT(l2->data) == gid) |
| 10044 | 255 { |
| 256 found = TRUE; | |
| 257 break; | |
| 258 } | |
| 259 } | |
| 260 | |
| 261 if (!found) | |
| 262 { | |
| 263 /* The user was not on that group on the server list */ | |
| 264 msn_show_sync_issue(session, local_user->passport, | |
| 265 group_name); | |
| 266 } | |
| 267 } | |
| 268 } | |
| 269 } | |
| 270 | |
| 271 l = l->next; | |
| 272 } | |
| 273 | |
| 274 msn_userlist_destroy(session->sync_userlist); | |
| 275 session->sync_userlist = NULL; | |
| 276 } | |
| 277 | |
| 278 void | |
| 10481 | 279 msn_session_set_error(MsnSession *session, MsnErrorType error, |
| 280 const char *info) | |
| 281 { | |
| 282 GaimConnection *gc; | |
| 283 char *msg; | |
| 284 | |
| 285 gc = session->account->gc; | |
| 286 | |
| 287 switch (error) | |
| 288 { | |
| 289 case MSN_ERROR_SERVCONN: | |
| 290 msg = g_strdup(info); | |
| 291 break; | |
| 10519 | 292 case MSN_ERROR_UNSUPPORTED_PROTOCOL: |
| 10481 | 293 msg = g_strdup(_("Our protocol is not supported by the " |
| 294 "server.")); | |
| 295 break; | |
| 296 case MSN_ERROR_HTTP_MALFORMED: | |
| 297 msg = g_strdup(_("Error parsing HTTP.")); | |
| 298 break; | |
| 299 case MSN_ERROR_SIGN_OTHER: | |
| 300 gc->wants_to_die = TRUE; | |
| 301 msg = g_strdup(_("You have signed on from another location.")); | |
| 302 break; | |
| 303 case MSN_ERROR_SERV_DOWN: | |
| 304 msg = g_strdup(_("The MSN servers are going down " | |
| 305 "temporarily.")); | |
| 306 break; | |
| 307 case MSN_ERROR_AUTH: | |
| 308 msg = g_strdup_printf(_("Unable to authenticate: %s"), | |
| 309 (info == NULL ) ? | |
| 310 _("Unknown error") : info); | |
| 311 break; | |
| 312 case MSN_ERROR_BAD_BLIST: | |
| 313 msg = g_strdup(_("Your MSN buddy list is temporarily " | |
| 314 "unavailable. Please wait and try " | |
| 315 "again.")); | |
| 316 break; | |
| 317 default: | |
| 318 msg = g_strdup(_("Unknown error.")); | |
| 319 break; | |
| 320 } | |
| 321 | |
| 322 msn_session_disconnect(session); | |
| 10533 | 323 |
| 10481 | 324 gaim_connection_error(gc, msg); |
| 325 | |
| 326 g_free(msg); | |
| 327 } | |
| 328 | |
| 329 static const char * | |
| 330 get_login_step_text(MsnSession *session) | |
| 331 { | |
| 332 const char *steps_text[] = { | |
| 333 _("Connecting"), | |
| 334 _("Handshaking"), | |
| 10514 | 335 _("Transferring"), |
| 336 _("Handshaking"), | |
| 10481 | 337 _("Starting authentication"), |
| 338 _("Getting cookie"), | |
| 339 _("Authenticating"), | |
| 340 _("Sending cookie"), | |
| 341 _("Retrieving buddy list") | |
| 342 }; | |
| 343 | |
| 344 return steps_text[session->login_step]; | |
| 345 } | |
| 346 | |
| 347 void | |
| 348 msn_session_set_login_step(MsnSession *session, MsnLoginStep step) | |
| 349 { | |
| 350 GaimConnection *gc; | |
| 351 | |
| 10519 | 352 /* Prevent the connection progress going backwards, eg. if we get |
| 353 * transferred several times during login */ | |
| 354 if (session->login_step >= step) | |
| 355 return; | |
| 356 | |
| 357 /* If we're already logged in, we're probably here because of a | |
| 358 * mid-session XFR from the notification server, so we don't want to | |
| 359 * popup the connection progress dialog */ | |
| 360 if (session->logged_in) | |
| 361 return; | |
| 362 | |
| 10481 | 363 gc = session->account->gc; |
| 364 | |
| 365 session->login_step = step; | |
| 366 | |
| 367 gaim_connection_update_progress(gc, get_login_step_text(session), step, | |
| 368 MSN_LOGIN_STEPS); | |
| 369 } | |
| 370 | |
| 371 void | |
| 10044 | 372 msn_session_finish_login(MsnSession *session) |
| 373 { | |
| 374 GaimAccount *account; | |
| 375 GaimConnection *gc; | |
| 376 | |
| 10533 | 377 if (session->logged_in) |
| 378 return; | |
| 379 | |
| 10044 | 380 account = session->account; |
| 381 gc = gaim_account_get_connection(account); | |
| 382 | |
| 383 msn_user_set_buddy_icon(session->user, | |
| 384 gaim_account_get_buddy_icon(session->account)); | |
| 385 | |
| 386 msn_change_status(session, MSN_ONLINE); | |
| 387 | |
| 388 gaim_connection_set_state(gc, GAIM_CONNECTED); | |
| 389 session->logged_in = TRUE; | |
| 390 | |
| 391 /* Sync users */ | |
| 392 msn_session_sync_users(session); | |
| 393 | |
| 394 serv_finish_login(gc); | |
| 395 } |
