libpurple/protocols/myspace/myspace.c

branch
soc.2007.msimprpl
changeset 18003
fb399e32e44c
parent 18002
ba63892ad307
child 18005
f8992f7ce49b
equal deleted inserted replaced
18002:ba63892ad307 18003:fb399e32e44c
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);
2228 } 2247 }
2229 2248
2230 session->fd = source; 2249 session->fd = source;
2231 2250
2232 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc); 2251 gc->inpa = purple_input_add(source, PURPLE_INPUT_READ, msim_input_cb, gc);
2252
2253
2233 } 2254 }
2234 2255
2235 /* Session methods */ 2256 /* Session methods */
2236 2257
2237 /** 2258 /**
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

mercurial