static void nln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; GaimAccount *account; GaimConnection *gc; MsnUser *user; MsnObject *msnobj; int clientid; const char *state, *passport, *friendly, *old_friendly; session = cmdproc->session; account = session->account; gc = gaim_account_get_connection(account); state = cmd->params[0]; passport = cmd->params[1]; friendly = gaim_url_decode(cmd->params[2]); user = msn_userlist_find_user(session->userlist, passport); old_friendly = msn_user_get_friendly_name(user); if (!old_friendly || (old_friendly && strcmp(old_friendly, friendly))) { serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); } if (session->protocol_ver >= 9) { if (cmd->param_count == 5) { msnobj = msn_object_new_from_string(gaim_url_decode(cmd->params[4])); msn_user_set_object(user, msnobj); } else { msn_user_set_object(user, NULL); } } clientid = atoi(cmd->params[3]); user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE); msn_user_set_state(user, state); msn_user_update(user); }
static void iln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { MsnSession *session; GaimAccount *account; GaimConnection *gc; MsnUser *user; MsnObject *msnobj; const char *state, *passport, *friendly; session = cmdproc->session; account = session->account; gc = gaim_account_get_connection(account); state = cmd->params[1]; passport = cmd->params[2]; friendly = gaim_url_decode(cmd->params[3]); user = msn_userlist_find_user(session->userlist, passport); serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); if (session->protocol_ver >= 9 && cmd->param_count == 6) { msnobj = msn_object_new_from_string(gaim_url_decode(cmd->params[5])); msn_user_set_object(user, msnobj); } msn_user_set_state(user, state); msn_user_update(user); }
void msn_user_set_buddy_icon(MsnUser *user, PurpleStoredImage *img) { MsnObject *msnobj; g_return_if_fail(user != NULL); msnobj = msn_object_new_from_image(img, "TFR2C2.tmp", user->passport, MSN_OBJECT_USERTILE); if (!msnobj) purple_debug_error("msn", "Unable to open buddy icon from %s!\n", user->passport); msn_user_set_object(user, msnobj); }
void msn_user_set_buddy_icon(MsnUser *user, const char *filename) { struct stat st; FILE *fp; MsnObject *msnobj = msn_user_get_object(user); g_return_if_fail(user != NULL); if (filename == NULL || g_stat(filename, &st) == -1) { msn_user_set_object(user, NULL); } else if ((fp = g_fopen(filename, "rb")) != NULL) { unsigned char *buf; SHA_CTX ctx; gsize len; char *base64; unsigned char digest[20]; if (msnobj == NULL) { msnobj = msn_object_new(TRUE); msn_object_set_local(msnobj); msn_object_set_type(msnobj, MSN_OBJECT_USERTILE); msn_object_set_location(msnobj, "TFR2C2.tmp"); msn_object_set_creator(msnobj, msn_user_get_passport(user)); msn_user_set_object(user, msnobj); } msn_object_set_real_location(msnobj, filename); buf = g_malloc(st.st_size); len = fread(buf, 1, st.st_size, fp); fclose(fp); /* Compute the SHA1D field. */ memset(digest, 0, sizeof(digest)); shaInit(&ctx); shaUpdate(&ctx, buf, st.st_size); shaFinal(&ctx, digest); g_free(buf); base64 = gaim_base64_encode(digest, sizeof(digest)); msn_object_set_sha1d(msnobj, base64); g_free(base64); msn_object_set_size(msnobj, st.st_size); /* Compute the SHA1C field. */ buf = g_strdup_printf( "Creator%sSize%dType%dLocation%sFriendly%sSHA1D%s", msn_object_get_creator(msnobj), msn_object_get_size(msnobj), msn_object_get_type(msnobj), msn_object_get_location(msnobj), msn_object_get_friendly(msnobj), msn_object_get_sha1d(msnobj)); memset(digest, 0, sizeof(digest)); shaInit(&ctx); shaUpdate(&ctx, buf, strlen(buf)); shaFinal(&ctx, digest); g_free(buf); base64 = gaim_base64_encode(digest, sizeof(digest)); msn_object_set_sha1c(msnobj, base64); g_free(base64); } else { gaim_debug_error("msn", "Unable to open buddy icon %s!\n", filename); msn_user_set_object(user, NULL); } }