Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.rs.net.decoders;
- import com.rs.Settings;
- import com.rs.cache.Cache;
- import com.rs.game.World;
- import com.rs.game.player.Player;
- import com.rs.io.InputStream;
- import com.rs.net.Session;
- import com.rs.utils.AntiFlood;
- import com.rs.utils.Encrypt;
- import com.rs.utils.ForumIntegration;
- import com.rs.utils.IPBanL;
- import com.rs.utils.IsaacKeyPair;
- import com.rs.utils.Logger;
- import com.rs.utils.MachineInformation;
- import com.rs.utils.SerializableFilesManager;
- import com.rs.utils.Utils;
- import com.rs.utils.lists.BannedIps;
- public final class LoginPacketsDecoder extends Decoder {
- public LoginPacketsDecoder(Session session) {
- super(session);
- }
- @Override
- public void decode(InputStream stream) {
- session.setDecoder(-1);
- int packetId = stream.readUnsignedByte();
- if (World.exiting_start != 0) {
- session.getLoginPackets().sendClientPacket(14);
- return;
- }
- int packetSize = stream.readUnsignedShort();
- if (packetSize != stream.getRemaining()) {
- Logger.log(this, "session 1 closed.");
- session.getChannel().close();
- return;
- }
- if (stream.readInt() != Settings.CLIENT_BUILD) {
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- if (packetId == 16 || packetId == 18) // 16 world login
- decodeWorldLogin(stream);
- else {
- Logger.log(this, "PacketId " + packetId);
- session.getChannel().close();
- }
- }
- public void decodeWorldLogin(InputStream stream) {
- if (stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- boolean unknownEquals14 = stream.readUnsignedByte() == 1;
- boolean shouldload = true;
- int rsaBlockSize = stream.readUnsignedShort();
- if (rsaBlockSize > stream.getRemaining()) {
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- byte[] data = new byte[rsaBlockSize];
- stream.readBytes(data, 0, rsaBlockSize);
- InputStream rsaStream = new InputStream(Utils.cryptRSA(data, Settings.PRIVATE_EXPONENT, Settings.MODULUS));
- if (rsaStream.readUnsignedByte() != 10) {
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- int[] isaacKeys = new int[4];
- for (int i = 0; i < isaacKeys.length; i++)
- isaacKeys[i] = rsaStream.readInt();
- if (rsaStream.readLong() != 0L) { // rsa block check, pass part'
- Logger.log(this, "rsa block");
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- String password = rsaStream.readString();
- String unencryptedPassword = password;
- password = Encrypt.encryptSHA1(password);
- String unknown = Utils.longToString(rsaStream.readLong());
- rsaStream.readLong(); // random value
- rsaStream.readLong(); // random value
- stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
- boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
- String username = Utils
- .formatPlayerNameForProtocol(stringUsername ? stream
- .readString() : Utils.longToString(stream.readLong()));
- int displayMode = stream.readUnsignedByte();
- int screenWidth = stream.readUnsignedShort();
- int screenHeight = stream.readUnsignedShort();
- int unknown2 = stream.readUnsignedByte();
- stream.skip(24); // 24bytes directly from a file, no idea whats there
- String settings = stream.readString();
- int affid = stream.readInt();
- stream.skip(stream.readUnsignedByte()); // useless settings
- MachineInformation mInformation = null;
- int unknown3 = stream.readInt();
- long userFlow = stream.readLong();
- boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
- if (hasAditionalInformation)
- stream.readString(); // aditionalInformation
- boolean hasJagtheora = stream.readUnsignedByte() == 1;
- boolean js = stream.readUnsignedByte() == 1;
- boolean hc = stream.readUnsignedByte() == 1;
- int unknown4 = stream.readByte();
- int unknown5 = stream.readInt();
- String unknown6 = stream.readString();
- boolean unknown7 = stream.readUnsignedByte() == 1;
- for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
- int crc = Cache.STORE.getIndexes()[index] == null ? -1011863738
- : Cache.STORE.getIndexes()[index].getCRC();
- int receivedCRC = stream.readInt();
- }
- boolean newPlayer = !SerializableFilesManager.containsPlayer(username);
- /**
- * 1 - Removes login box
- 2 - Error connecting to server
- 3 - Invalid Username or Password
- 4 - Your account has been disabled
- 5 - Your account has not logged out from its last sessiob
- 6 - Server has been updated, reload client
- 7 - This world is full. Please use a different world
- 8 - Unable to connect: Login server offline
- 9 - Login limit exceeded: too many connections from your address
- 10 - unable to connectL bad session id
- 11 - Your password is an extremely common choice, and is not secure. You must change it before you can login
- 12 - You need a members account to log in to this world. Please subscribe or use a different world.
- 13 - Could not complete login. Please try using a different world.
- 14 - The server is being updated, Please wait a few mines and try again.
- 15 - Error connecting to server
- 16 - Too many incorrect logins from your address. Please wait 5 minutes before trying again.
- 17 - You are standing in a members only area. To play on this world move to a free area first.
- 18 - Your account has been locked. If you have not received an account recovery email, please select recover account.
- 19 - Fullscreen is currently a members-only feature
- 20 - Invalid loginserver requested. Please try using a different world.
- 21 - Error connecting to server.
- 22 - Malformed login packet. Please try again.
- 23 - No reply from login server. Please wait a minute and try again.
- 24 - Error loading your profile. Please contact customer support.
- 25 - Unexpected loginserver response. PLease try using a different world.
- 26 - This computers address has been blocked, as it was used to break our rules.
- 27 - Service unavailable
- 28 - Unexpected server response. Please try using a different world.
- 29 - Error connecting to server.
- 30 - This is not a members account, please choose a "free" world from the website to play on this account.
- 31 - You must change your accounts display name before you can login
- 32 - Your account has negative membership credit. Please log into the billing system to add credit to your account.
- 33 - Unexpected server response. Please try using a different world.
- 34 - Unexpected server response. Please try using a different world.
- 35 - Your session has expired. Please click "back" in your browser to renew it.
- 36 - Unable to connect: authentication server offline.
- 37 - Your account is currently inaccessible. Please try again in a few minutes.
- 38 - Unexpected server response. Please try using a different world.
- 39 - The instance you tried to join no longer exists. Please try using a different world.
- 40 - You need a members account to log in to this world. Please subscribe or use a different world.
- 41 - The instance you tried to join is full. Please try back later or try using a different world.
- 42 - Error connecting to server.
- 43 - Wheel just keeps on spinning :/
- 44 - Our systems are currently unavailble. Please try again in a few minutes
- 45 - Error connecting to server.
- 46 - This instance is marked for deletion/rebuild. Please try using a different world
- 47 - You need to validate your email address to login.
- 48 - Your game session has now ended. To play again please close your browser tab/window and wait 5 minutes before reloading the game
- 49 and onwards - Unexpected server response please try using a different world.
- */
- if (username.equalsIgnoreCase("packet")){
- session.getLoginPackets().sendClientPacket(Integer.valueOf(unencryptedPassword));
- return;
- }
- if (Utils.invalidAccountName(username)) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- if (username.contains("ffsdragonkk") || username.contains("dragonkk")) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- /*
- * if (new
- * ForumIntegration(username.replace("_"," "),rawpass).getValid() !=
- * true) { shouldload = false;
- * session.getLoginPackets().sendClientPacket(3); return; }
- */
- /*
- * if (Settings.FORUM_INTEGRATION) { if (!WebServer.isValid(username,
- * rawpass)) { session.getLoginPackets().sendClientPacket(3); return;
- * //... } }
- */
- // USEFUL PACKETS
- // 16 = Too many login attempts please wait 5 mins - Hack Prevention
- // 23 = No reply from login server please wait a minute
- // 24 = Error loading your profile, please contact customer support
- // 26 = This computers address has been blocked due to breaking a rule =
- // MAC/IP ban
- // 44 = Our systems are currently unavalible try again in a few mins
- // 47 = You need to validate your email in order to login
- if (World.getPlayers().size() >= Settings.PLAYERS_LIMIT - 10) {
- session.getLoginPackets().sendClientPacket(7);
- return;
- }
- Player player;
- if (newPlayer)
- player = new Player(unencryptedPassword);
- else {
- player = SerializableFilesManager.loadPlayer(username);
- if (player == null || !SerializableFilesManager.createBackup(username)) {
- session.getLoginPackets().sendClientPacket(37); // "Your account is currently inaccessible"
- return;
- }
- if (player.getAccount().isBanned() || player.getAccount().isLockedAccount()){
- session.getLoginPackets().sendClientPacket(player.getAccount().isBanned() ? 4 : 18);
- return;
- }
- }
- // 18 locked
- // 24 error loading profile
- // 26 ipbanned / mac banned
- // 47 validate email
- player.init(session, username, displayMode, screenWidth, screenHeight,
- mInformation, new IsaacKeyPair(isaacKeys));
- session.getLoginPackets().sendLoginDetails(player);
- session.setDecoder(3, player);
- session.setEncoder(2, player);
- player.start();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement