# HG changeset patch # User Paul Aurich # Date 1245739531 0 # Node ID ad87bc5755864314608514a752e18c61383b2dbe # Parent 4ea129edc62c39c2f7ba247918b3214f7703452e# Parent 8cb0f676c70deb947f00e6e201bdd07a40787c63 merge of '849a753dc5505c801cd053591778ddd340db6337' and 'aec1adb73ee28586c6f762aabd481c41158b4d9f' diff -r 4ea129edc62c -r ad87bc575586 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Tue Jun 23 06:45:21 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.c Tue Jun 23 06:45:31 2009 +0000 @@ -519,6 +519,18 @@ return types; } +/* + * TODO: This define is stolen from oscar.h. + * It's also in yahoo.h. + * It should be in libpurple/util.c + */ +#define msim_put32(buf, data) ( \ + (*((buf)) = (unsigned char)((data)>>24)&0xff), \ + (*((buf)+1) = (unsigned char)((data)>>16)&0xff), \ + (*((buf)+2) = (unsigned char)((data)>>8)&0xff), \ + (*((buf)+3) = (unsigned char)(data)&0xff), \ + 4) + /** * Compute the base64'd login challenge response based on username, password, nonce, and IPs. * @@ -619,15 +631,27 @@ purple_cipher_context_set_option(rc4, "key_len", (gpointer)0x10); purple_cipher_context_set_key(rc4, key); - /* TODO: obtain IPs of network interfaces */ - /* rc4 encrypt: * nonce1+email+IP list */ data = g_string_new(NULL); g_string_append_len(data, nonce, NONCE_SIZE); - g_string_append(data, email); + + /* Include the null terminator */ + g_string_append_len(data, email, strlen(email) + 1); + + while (data->len % 4 != 0) + g_string_append_c(data, 0xfb); + +#ifdef SEND_OUR_IP_ADDRESSES + /* TODO: Obtain IPs of network interfaces instead of using this hardcoded value */ + g_string_set_size(data, data->len + 4); + msim_put32(data->str + data->len - 4, MSIM_LOGIN_IP_LIST_LEN); g_string_append_len(data, MSIM_LOGIN_IP_LIST, MSIM_LOGIN_IP_LIST_LEN); +#else + g_string_set_size(data, data->len + 4); + msim_put32(data->str + data->len - 4, 0); +#endif /* !SEND_OUR_IP_ADDRESSES */ data_out = g_new0(guchar, data->len); @@ -1661,8 +1685,8 @@ switch (bm) { case MSIM_BM_STATUS: return msim_incoming_status(session, msg); - case MSIM_BM_INSTANT_ACTION_OR_IM: - case MSIM_BM_DELAYABLE_ACTION_OR_IM: + case MSIM_BM_ACTION_OR_IM_DELAYABLE: + case MSIM_BM_ACTION_OR_IM_INSTANT: return msim_incoming_action_or_im(session, msg); case MSIM_BM_MEDIA: return msim_incoming_media(session, msg); @@ -2287,7 +2311,7 @@ message_msim = html_to_msim_markup(session, message); - if (msim_send_bm(session, who, message_msim, MSIM_BM_DELAYABLE_ACTION_OR_IM)) { + if (msim_send_bm(session, who, message_msim, MSIM_BM_ACTION_OR_IM_DELAYABLE)) { /* Return 1 to have Purple show this IM as being sent, 0 to not. I always * return 1 even if the message could not be sent, since I don't know if * it has failed yet--because the IM is only sent after the userid is @@ -2340,7 +2364,7 @@ } purple_debug_info("msim", "msim_send_typing(%s): %d (%s)\n", name, state, typing_str); - msim_send_bm(session, name, typing_str, MSIM_BM_INSTANT_ACTION_OR_IM); + msim_send_bm(session, name, typing_str, MSIM_BM_ACTION_OR_IM_INSTANT); return 0; } diff -r 4ea129edc62c -r ad87bc575586 libpurple/protocols/myspace/myspace.h --- a/libpurple/protocols/myspace/myspace.h Tue Jun 23 06:45:21 2009 +0000 +++ b/libpurple/protocols/myspace/myspace.h Tue Jun 23 06:45:31 2009 +0000 @@ -127,9 +127,9 @@ #define MSIM_FINAL_STRING "\\final\\" /**< Message end marker */ /* Messages */ -#define MSIM_BM_DELAYABLE_ACTION_OR_IM 1 +#define MSIM_BM_ACTION_OR_IM_DELAYABLE 1 #define MSIM_BM_STATUS 100 -#define MSIM_BM_INSTANT_ACTION_OR_IM 121 +#define MSIM_BM_ACTION_OR_IM_INSTANT 121 #define MSIM_BM_MEDIA 122 #define MSIM_BM_PROFILE 124 #define MSIM_BM_UNOFFICIAL_CLIENT 200 @@ -140,6 +140,7 @@ /* Recognized challenge length */ #define MSIM_AUTH_CHALLENGE_LENGTH 0x40 +#ifdef SEND_OUR_IP_ADDRESSES /* TODO: obtain IPs of network interfaces from user's machine, instead of * hardcoding these values below (used in msim_compute_login_response). * This is not immediately @@ -152,6 +153,7 @@ #define MSIM_LOGIN_IP_LIST "\x00\x00\x00\x00\x05\x7f\x00\x00\x01\x00\x00\x00\x00\x0a\x00\x00\x40\xc0\xa8\x58\x01\xc0\xa8\x3c\x01" #define MSIM_LOGIN_IP_LIST_LEN 25 +#endif /* SEND_OUR_IP_ADDRESSES */ /* Indexes into status string (0|1|2|3|..., but 0 always empty) */ #define MSIM_STATUS_ORDINAL_EMPTY 0 diff -r 4ea129edc62c -r ad87bc575586 libpurple/protocols/myspace/user.c --- a/libpurple/protocols/myspace/user.c Tue Jun 23 06:45:21 2009 +0000 +++ b/libpurple/protocols/myspace/user.c Tue Jun 23 06:45:31 2009 +0000 @@ -58,6 +58,7 @@ user = g_new0(MsimUser, 1); user->buddy = buddy; + user->id = purple_blist_node_get_int(&buddy->node, "UserID"); purple_buddy_set_protocol_data(buddy, user); } @@ -109,7 +110,6 @@ { PurplePresence *presence; gchar *str; - guint uid; guint cv; /* Useful to identify the account the tooltip refers to. @@ -118,8 +118,6 @@ purple_notify_user_info_add_pair(user_info, _("User"), user->username); } - uid = purple_blist_node_get_int((PurpleBlistNode *)user->buddy, "UserID"); - /* a/s/l...the vitals */ if (user->age) { char age[16]; diff -r 4ea129edc62c -r ad87bc575586 libpurple/protocols/myspace/zap.c --- a/libpurple/protocols/myspace/zap.c Tue Jun 23 06:45:21 2009 +0000 +++ b/libpurple/protocols/myspace/zap.c Tue Jun 23 06:45:31 2009 +0000 @@ -109,7 +109,7 @@ /* Construct and send the actual zap command. */ zap_string = g_strdup_printf("!!!ZAP_SEND!!!=RTE_BTN_ZAPS_%d", code); - if (!msim_send_bm(session, username, zap_string, MSIM_BM_INSTANT_ACTION_OR_IM)) { + if (!msim_send_bm(session, username, zap_string, MSIM_BM_ACTION_OR_IM_INSTANT)) { purple_debug_info("msim_send_zap", "msim_send_bm failed: zapping %s with %s\n", username, zap_string);