| 1428 |
1428 |
| 1429 if (msim_msg_get(msg, "nc")) |
1429 if (msim_msg_get(msg, "nc")) |
| 1430 { |
1430 { |
| 1431 return msim_login_challenge(session, msg); |
1431 return msim_login_challenge(session, msg); |
| 1432 } else if (msim_msg_get(msg, "sesskey")) { |
1432 } else if (msim_msg_get(msg, "sesskey")) { |
| 1433 |
|
| 1434 purple_connection_update_progress(session->gc, _("Connected"), 3, 4); |
1433 purple_connection_update_progress(session->gc, _("Connected"), 3, 4); |
| 1435 |
1434 |
| 1436 session->sesskey = msim_msg_get_integer(msg, "sesskey"); |
1435 session->sesskey = msim_msg_get_integer(msg, "sesskey"); |
| 1437 purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey); |
1436 purple_debug_info("msim", "SESSKEY=<%d>\n", session->sesskey); |
| 1438 |
1437 |
| 1439 /* Comes with: proof,profileid,userid,uniquenick -- all same values |
1438 /* Comes with: proof,profileid,userid,uniquenick -- all same values |
| 1440 * some of the time, but can vary. This is our own user ID. */ |
1439 * some of the time, but can vary. This is our own user ID. */ |
| 1441 session->userid = msim_msg_get_integer(msg, "userid"); |
1440 session->userid = msim_msg_get_integer(msg, "userid"); |
| 1442 |
1441 |
| 1443 /* TODO: fake our own userid being online */ |
|
| 1444 |
1442 |
| 1445 purple_connection_set_state(session->gc, PURPLE_CONNECTED); |
1443 purple_connection_set_state(session->gc, PURPLE_CONNECTED); |
| |
1444 |
| |
1445 |
| |
1446 /* We now know are our own username, only after we're logged in.. |
| |
1447 * which is weird, but happens because you login with your email |
| |
1448 * address and not username. Will be freed in msim_session_destroy(). */ |
| |
1449 session->username = msim_msg_get_string(msg, "uniquenick"); |
| |
1450 |
| |
1451 #ifdef MSIM_FAKE_SELF_ONLINE |
| |
1452 /* Fake our self coming online. */ |
| |
1453 purple_prpl_got_user_status(session->account, session->username, purple_primitive_get_id_from_type(PURPLE_STATUS_AVAILABLE), NULL); |
| |
1454 #endif |
| 1446 |
1455 |
| 1447 return TRUE; |
1456 return TRUE; |
| 1448 } else if (msim_msg_get(msg, "bm")) { |
1457 } else if (msim_msg_get(msg, "bm")) { |
| 1449 guint bm; |
1458 guint bm; |
| 1450 |
1459 |
| 1734 default: |
1743 default: |
| 1735 purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d\n", |
1744 purple_debug_info("msim", "msim_status_cb for %s, unknown status code %d\n", |
| 1736 username, status_code); |
1745 username, status_code); |
| 1737 purple_status_code = PURPLE_STATUS_AVAILABLE; |
1746 purple_status_code = PURPLE_STATUS_AVAILABLE; |
| 1738 } |
1747 } |
| 1739 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); |
1748 |
| |
1749 #ifdef MSIM_FAKE_SELF_ONLINE |
| |
1750 if (!strcmp(username, session->username) && purple_status_code == PURPLE_STATUS_OFFLINE) |
| |
1751 { |
| |
1752 /* Hack to ignore offline status notices on self. */ |
| |
1753 } else { |
| |
1754 #endif |
| |
1755 purple_prpl_got_user_status(session->account, username, purple_primitive_get_id_from_type(purple_status_code), NULL); |
| |
1756 #ifdef MSIM_FAKE_SELF_ONLINE |
| |
1757 } |
| |
1758 #endif |
| 1740 |
1759 |
| 1741 g_strfreev(status_array); |
1760 g_strfreev(status_array); |
| 1742 g_free(status_str); |
1761 g_free(status_str); |
| 1743 g_free(username); |
1762 g_free(username); |
| 1744 g_list_free(list); |
1763 g_list_free(list); |
| 2251 session = g_new0(MsimSession, 1); |
2272 session = g_new0(MsimSession, 1); |
| 2252 |
2273 |
| 2253 session->magic = MSIM_SESSION_STRUCT_MAGIC; |
2274 session->magic = MSIM_SESSION_STRUCT_MAGIC; |
| 2254 session->account = acct; |
2275 session->account = acct; |
| 2255 session->gc = purple_account_get_connection(acct); |
2276 session->gc = purple_account_get_connection(acct); |
| |
2277 session->sesskey = 0; |
| |
2278 session->userid = 0; |
| |
2279 session->username = NULL; |
| 2256 session->fd = -1; |
2280 session->fd = -1; |
| 2257 |
2281 |
| 2258 /* TODO: Remove. */ |
2282 /* TODO: Remove. */ |
| 2259 session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, |
2283 session->user_lookup_cb = g_hash_table_new_full(g_direct_hash, |
| 2260 g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ |
2284 g_direct_equal, NULL, NULL); /* do NOT free function pointers! (values) */ |
| 2281 g_return_if_fail(MSIM_SESSION_VALID(session)); |
2305 g_return_if_fail(MSIM_SESSION_VALID(session)); |
| 2282 |
2306 |
| 2283 session->magic = -1; |
2307 session->magic = -1; |
| 2284 |
2308 |
| 2285 g_free(session->rxbuf); |
2309 g_free(session->rxbuf); |
| |
2310 g_free(session->username); |
| 2286 |
2311 |
| 2287 /* TODO: Remove. */ |
2312 /* TODO: Remove. */ |
| 2288 g_hash_table_destroy(session->user_lookup_cb); |
2313 g_hash_table_destroy(session->user_lookup_cb); |
| 2289 g_hash_table_destroy(session->user_lookup_cb_data); |
2314 g_hash_table_destroy(session->user_lookup_cb_data); |
| 2290 |
2315 |