Mercurial > pidgin
annotate src/protocols/msn/session.c @ 10703:a7486f12e56f
[gaim-migrate @ 12286]
Some kind of Gtk 2.4 support, it may not be implemented exactly how we want
it eventually, but it helps crazy people help us out. Thanks to Nathan
Fredrickson for doing the real work.
committer: Tailor Script <tailor@pidgin.im>
| author | Stu Tomlinson <stu@nosnilmot.com> |
|---|---|
| date | Sun, 20 Mar 2005 01:23:06 +0000 |
| parents | fe919915fceb |
| children | bf5e48215158 |
| 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; |
| 10621 | 48 session->conv_seq = 1; |
|
6701
b7e113a59b51
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
5564
diff
changeset
|
49 |
| 5309 | 50 return session; |
| 51 } | |
| 52 | |
| 53 void | |
| 54 msn_session_destroy(MsnSession *session) | |
| 55 { | |
| 56 g_return_if_fail(session != NULL); | |
| 57 | |
| 10296 | 58 session->destroying = TRUE; |
| 59 | |
| 5309 | 60 if (session->connected) |
| 61 msn_session_disconnect(session); | |
| 62 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
63 if (session->notification != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
64 msn_notification_destroy(session->notification); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
65 |
| 5309 | 66 while (session->switches != NULL) |
| 67 msn_switchboard_destroy(session->switches->data); | |
| 68 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
69 while (session->slplinks != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
70 msn_slplink_destroy(session->slplinks->data); |
| 5309 | 71 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
72 msn_userlist_destroy(session->userlist); |
| 5309 | 73 |
| 10044 | 74 if (session->sync_userlist != NULL) |
| 75 msn_userlist_destroy(session->sync_userlist); | |
| 76 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
77 if (session->passport_info.kv != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
78 g_free(session->passport_info.kv); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
79 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
80 if (session->passport_info.sid != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
81 g_free(session->passport_info.sid); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
82 |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
83 if (session->passport_info.mspauth != NULL) |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
84 g_free(session->passport_info.mspauth); |
|
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
85 |
| 10284 | 86 if (session->passport_info.client_ip != NULL) |
| 87 g_free(session->passport_info.client_ip); | |
| 88 | |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
89 if (session->passport_info.file != NULL) |
| 10275 | 90 { |
|
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10582
diff
changeset
|
91 g_unlink(session->passport_info.file); |
|
6827
1cfbb731aa1f
[gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents:
6779
diff
changeset
|
92 g_free(session->passport_info.file); |
| 10275 | 93 } |
| 5427 | 94 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
95 if (session->sync != NULL) |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
96 msn_sync_destroy(session->sync); |
|
7590
3a48ade4f510
[gaim-migrate @ 8208]
Christian Hammond <chipx86@chipx86.com>
parents:
7288
diff
changeset
|
97 |
|
8171
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
98 if (session->nexus != NULL) |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
99 msn_nexus_destroy(session->nexus); |
|
d0ba2f7b40e7
[gaim-migrate @ 8884]
Christian Hammond <chipx86@chipx86.com>
parents:
7590
diff
changeset
|
100 |
| 10481 | 101 if (session->user != NULL) |
| 102 msn_user_destroy(session->user); | |
| 103 | |
| 5309 | 104 g_free(session); |
| 105 } | |
| 106 | |
| 107 gboolean | |
| 10481 | 108 msn_session_connect(MsnSession *session, const char *host, int port, |
| 109 gboolean http_method) | |
| 5309 | 110 { |
| 111 g_return_val_if_fail(session != NULL, FALSE); | |
| 112 g_return_val_if_fail(!session->connected, TRUE); | |
| 113 | |
| 114 session->connected = TRUE; | |
| 10481 | 115 session->http_method = http_method; |
| 5309 | 116 |
| 10463 | 117 if (session->notification == NULL) |
| 118 { | |
| 119 gaim_debug_error("msn", "This shouldn't happen\n"); | |
| 120 g_return_val_if_reached(FALSE); | |
| 121 } | |
| 122 | |
| 10481 | 123 if (msn_notification_connect(session->notification, host, port)) |
|
8831
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
124 { |
|
ffecda0c1f45
[gaim-migrate @ 9595]
Christian Hammond <chipx86@chipx86.com>
parents:
8808
diff
changeset
|
125 return TRUE; |
|
7288
ff9127038a5a
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6827
diff
changeset
|
126 } |
| 5309 | 127 |
| 128 return FALSE; | |
| 129 } | |
| 130 | |
| 131 void | |
| 132 msn_session_disconnect(MsnSession *session) | |
| 133 { | |
| 134 g_return_if_fail(session != NULL); | |
| 135 g_return_if_fail(session->connected); | |
| 136 | |
| 10481 | 137 session->connected = FALSE; |
| 138 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
139 while (session->switches != NULL) |
| 10463 | 140 msn_switchboard_close(session->switches->data); |
| 5309 | 141 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
142 if (session->notification != NULL) |
| 10463 | 143 msn_notification_close(session->notification); |
| 5309 | 144 } |
| 145 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
146 /* TODO: This must go away when conversation is redesigned */ |
| 5309 | 147 MsnSwitchBoard * |
| 10621 | 148 msn_session_find_swboard(MsnSession *session, const char *username) |
| 5309 | 149 { |
| 150 GList *l; | |
| 151 | |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
152 g_return_val_if_fail(session != NULL, NULL); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
153 g_return_val_if_fail(username != NULL, NULL); |
| 5309 | 154 |
|
8499
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
155 for (l = session->switches; l != NULL; l = l->next) |
|
467b01d02f9c
[gaim-migrate @ 9235]
Christian Hammond <chipx86@chipx86.com>
parents:
8475
diff
changeset
|
156 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
157 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
158 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
159 swboard = l->data; |
| 5309 | 160 |
| 10621 | 161 if ((swboard->im_user != NULL) && !strcmp(username, swboard->im_user)) |
| 10602 | 162 return swboard; |
| 5309 | 163 } |
| 164 | |
| 165 return NULL; | |
| 166 } | |
| 167 | |
| 168 MsnSwitchBoard * | |
| 10621 | 169 msn_session_find_swboard_with_conv(MsnSession *session, GaimConversation *conv) |
| 170 { | |
| 171 GList *l; | |
| 172 | |
| 173 g_return_val_if_fail(session != NULL, NULL); | |
| 174 g_return_val_if_fail(conv != NULL, NULL); | |
| 175 | |
| 176 for (l = session->switches; l != NULL; l = l->next) | |
| 177 { | |
| 178 MsnSwitchBoard *swboard; | |
| 179 | |
| 180 swboard = l->data; | |
| 181 | |
| 182 if (swboard->conv == conv) | |
| 183 return swboard; | |
| 184 } | |
| 185 | |
| 186 return NULL; | |
| 187 } | |
| 188 | |
| 189 MsnSwitchBoard * | |
| 190 msn_session_find_swboard_with_id(const MsnSession *session, int chat_id) | |
| 5309 | 191 { |
| 192 GList *l; | |
| 193 | |
| 194 g_return_val_if_fail(session != NULL, NULL); | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
195 g_return_val_if_fail(chat_id >= 0, NULL); |
| 5309 | 196 |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
197 for (l = session->switches; l != NULL; l = l->next) |
|
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
198 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
199 MsnSwitchBoard *swboard; |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
200 |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
201 swboard = l->data; |
| 5309 | 202 |
| 10621 | 203 if (swboard->chat_id == chat_id) |
| 5309 | 204 return swboard; |
| 205 } | |
| 206 | |
| 207 return NULL; | |
| 208 } | |
| 209 | |
| 210 MsnSwitchBoard * | |
| 10621 | 211 msn_session_get_swboard(MsnSession *session, const char *username) |
| 5309 | 212 { |
| 213 MsnSwitchBoard *swboard; | |
| 214 | |
| 10621 | 215 swboard = msn_session_find_swboard(session, username); |
| 5309 | 216 |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
217 if (swboard == NULL) |
|
9158
c30d81b4dd22
[gaim-migrate @ 9942]
Christian Hammond <chipx86@chipx86.com>
parents:
8831
diff
changeset
|
218 { |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
219 swboard = msn_switchboard_new(session); |
| 10225 | 220 swboard->im_user = g_strdup(username); |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
221 msn_switchboard_request(swboard); |
|
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
222 msn_switchboard_request_add_user(swboard, username); |
| 5309 | 223 } |
| 224 | |
|
9193
502707ca1836
[gaim-migrate @ 9988]
Christian Hammond <chipx86@chipx86.com>
parents:
9158
diff
changeset
|
225 return swboard; |
| 5309 | 226 } |
| 10044 | 227 |
| 228 static void | |
| 229 msn_session_sync_users(MsnSession *session) | |
| 230 { | |
| 231 GList *l; | |
| 232 | |
| 233 l = session->sync_userlist->users; | |
| 234 | |
| 235 while (l != NULL) | |
| 236 { | |
| 237 MsnUser *local_user; | |
| 238 | |
| 239 local_user = (MsnUser *)l->data; | |
| 240 | |
| 241 if (local_user->passport != NULL) | |
| 242 { | |
| 243 MsnUser *remote_user; | |
| 244 | |
| 245 remote_user = msn_userlist_find_user(session->userlist, | |
| 246 local_user->passport); | |
| 247 | |
| 248 if (remote_user == NULL || | |
| 249 ((local_user->list_op & ( 1 << MSN_LIST_FL)) && | |
| 250 !(remote_user->list_op & ( 1 << MSN_LIST_FL)))) | |
| 251 { | |
| 252 /* The user was not on the server list */ | |
| 253 msn_show_sync_issue(session, local_user->passport, NULL); | |
| 254 } | |
| 255 else | |
| 256 { | |
| 257 GList *l; | |
| 258 | |
| 259 for (l = local_user->group_ids; l != NULL; l = l->next) | |
| 260 { | |
| 261 const char *group_name; | |
| 262 int gid; | |
| 263 gboolean found = FALSE; | |
| 264 GList *l2; | |
| 265 | |
| 266 group_name = | |
| 267 msn_userlist_find_group_name(local_user->userlist, | |
| 10112 | 268 GPOINTER_TO_INT(l->data)); |
| 10044 | 269 |
| 270 gid = msn_userlist_find_group_id(remote_user->userlist, | |
| 271 group_name); | |
| 272 | |
| 273 for (l2 = remote_user->group_ids; l2 != NULL; l2 = l2->next) | |
| 274 { | |
| 10112 | 275 if (GPOINTER_TO_INT(l2->data) == gid) |
| 10044 | 276 { |
| 277 found = TRUE; | |
| 278 break; | |
| 279 } | |
| 280 } | |
| 281 | |
| 282 if (!found) | |
| 283 { | |
| 284 /* The user was not on that group on the server list */ | |
| 285 msn_show_sync_issue(session, local_user->passport, | |
| 286 group_name); | |
| 287 } | |
| 288 } | |
| 289 } | |
| 290 } | |
| 291 | |
| 292 l = l->next; | |
| 293 } | |
| 294 | |
| 295 msn_userlist_destroy(session->sync_userlist); | |
| 296 session->sync_userlist = NULL; | |
| 297 } | |
| 298 | |
| 299 void | |
| 10481 | 300 msn_session_set_error(MsnSession *session, MsnErrorType error, |
| 301 const char *info) | |
| 302 { | |
| 303 GaimConnection *gc; | |
| 304 char *msg; | |
| 305 | |
| 10568 | 306 gc = gaim_account_get_connection(session->account); |
| 10481 | 307 |
| 308 switch (error) | |
| 309 { | |
| 310 case MSN_ERROR_SERVCONN: | |
| 311 msg = g_strdup(info); | |
| 312 break; | |
| 10519 | 313 case MSN_ERROR_UNSUPPORTED_PROTOCOL: |
| 10481 | 314 msg = g_strdup(_("Our protocol is not supported by the " |
| 315 "server.")); | |
| 316 break; | |
| 317 case MSN_ERROR_HTTP_MALFORMED: | |
| 318 msg = g_strdup(_("Error parsing HTTP.")); | |
| 319 break; | |
| 320 case MSN_ERROR_SIGN_OTHER: | |
| 321 gc->wants_to_die = TRUE; | |
| 322 msg = g_strdup(_("You have signed on from another location.")); | |
| 323 break; | |
| 10568 | 324 case MSN_ERROR_SERV_UNAVAILABLE: |
| 325 msg = g_strdup(_("The MSN servers are temporarily " | |
| 326 "unavailable. Please wait and try " | |
| 327 "again.")); | |
| 328 break; | |
| 10481 | 329 case MSN_ERROR_SERV_DOWN: |
| 330 msg = g_strdup(_("The MSN servers are going down " | |
| 331 "temporarily.")); | |
| 332 break; | |
| 333 case MSN_ERROR_AUTH: | |
| 334 msg = g_strdup_printf(_("Unable to authenticate: %s"), | |
| 335 (info == NULL ) ? | |
| 336 _("Unknown error") : info); | |
| 337 break; | |
| 338 case MSN_ERROR_BAD_BLIST: | |
| 339 msg = g_strdup(_("Your MSN buddy list is temporarily " | |
| 340 "unavailable. Please wait and try " | |
| 341 "again.")); | |
| 342 break; | |
| 343 default: | |
| 344 msg = g_strdup(_("Unknown error.")); | |
| 345 break; | |
| 346 } | |
| 347 | |
| 348 msn_session_disconnect(session); | |
| 10533 | 349 |
| 10481 | 350 gaim_connection_error(gc, msg); |
| 351 | |
| 352 g_free(msg); | |
| 353 } | |
| 354 | |
| 355 static const char * | |
| 356 get_login_step_text(MsnSession *session) | |
| 357 { | |
| 358 const char *steps_text[] = { | |
| 359 _("Connecting"), | |
| 360 _("Handshaking"), | |
| 10514 | 361 _("Transferring"), |
| 362 _("Handshaking"), | |
| 10481 | 363 _("Starting authentication"), |
| 364 _("Getting cookie"), | |
| 365 _("Authenticating"), | |
| 366 _("Sending cookie"), | |
| 367 _("Retrieving buddy list") | |
| 368 }; | |
| 369 | |
| 370 return steps_text[session->login_step]; | |
| 371 } | |
| 372 | |
| 373 void | |
| 374 msn_session_set_login_step(MsnSession *session, MsnLoginStep step) | |
| 375 { | |
| 376 GaimConnection *gc; | |
| 377 | |
| 10519 | 378 /* Prevent the connection progress going backwards, eg. if we get |
| 379 * transferred several times during login */ | |
| 10582 | 380 if (session->login_step > step) |
| 10519 | 381 return; |
| 382 | |
| 383 /* If we're already logged in, we're probably here because of a | |
| 384 * mid-session XFR from the notification server, so we don't want to | |
| 385 * popup the connection progress dialog */ | |
| 386 if (session->logged_in) | |
| 387 return; | |
| 388 | |
| 10481 | 389 gc = session->account->gc; |
| 390 | |
| 391 session->login_step = step; | |
| 392 | |
| 393 gaim_connection_update_progress(gc, get_login_step_text(session), step, | |
| 394 MSN_LOGIN_STEPS); | |
| 395 } | |
| 396 | |
| 397 void | |
| 10044 | 398 msn_session_finish_login(MsnSession *session) |
| 399 { | |
| 400 GaimAccount *account; | |
| 401 GaimConnection *gc; | |
| 402 | |
| 10533 | 403 if (session->logged_in) |
| 404 return; | |
| 405 | |
| 10044 | 406 account = session->account; |
| 407 gc = gaim_account_get_connection(account); | |
| 408 | |
| 409 msn_user_set_buddy_icon(session->user, | |
| 410 gaim_account_get_buddy_icon(session->account)); | |
| 411 | |
| 412 msn_change_status(session, MSN_ONLINE); | |
| 413 | |
| 414 gaim_connection_set_state(gc, GAIM_CONNECTED); | |
| 415 session->logged_in = TRUE; | |
| 416 | |
| 417 /* Sync users */ | |
| 418 msn_session_sync_users(session); | |
| 419 | |
| 420 serv_finish_login(gc); | |
| 421 } |
