Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public void decode(InputStream stream) {
- session.setDecoder(-1);
- int packetId = stream.readUnsignedByte();
- if (World.exiting_start != 0) {
- System.err.println("Login Decoder [Decode] -> Mismatch in the existing start!");
- session.getLoginPackets().sendClientPacket(14);
- return;
- }
- int packetSize = stream.readUnsignedShort();
- if (packetSize != stream.getRemaining()) {
- System.err.println("Login Decoder [Decode] -> Insufficient amount of bytes in the buffer!");
- session.getChannel().close();
- return;
- }
- if (stream.readInt() != Settings.MAJOR_BUILD || stream.readInt() != Settings.MINOR_BUILD) {
- System.err.println("Login Decoder -> Invalid major or minor builds!");
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- if (packetId == 16 || packetId == 18) {
- decodeWorldLogin(stream);
- } else {
- if (Settings.DEBUG) {
- Logger.log(this, "PacketId " + packetId);
- }
- session.getChannel().close();
- }
- }
- @SuppressWarnings("unused")
- public void decodeWorldLogin(InputStream stream) {
- boolean unknownEquals14 = stream.readUnsignedByte() == 1;
- int rsaBlockSize = stream.readUnsignedShort();
- if (rsaBlockSize > stream.getRemaining()) {
- System.err.println("Login Decoder -> Insufficient amount of bytes in the buffer!");
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- byte[] data = new byte[rsaBlockSize];
- stream.readBytes(data, 0, rsaBlockSize);
- InputStream rsaStream = new InputStream(Utilities.cryptRSA(data, Settings.GAME_SERVER_PRIVATE_EXPONENT, Settings.GAME_SERVER_PRIVATE_MODULUS));
- if (rsaStream.readUnsignedByte() != 10) {
- System.err.println("Login Decoder -> Block opcode mismatch!");
- 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) {
- System.err.println("Login Decoder -> Login hash mismatch!");
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- String password = rsaStream.readString();
- if (password.length() > 30 || password.length() < 3) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- password = Encrypt.encryptSHA1(password);
- rsaStream.readLong();
- rsaStream.readLong();
- stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
- boolean stringUsername = stream.readUnsignedByte() == 1;
- String username = Utilities.formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utilities.longToString(stream.readLong()));
- int displayMode = stream.readUnsignedByte();
- int screenWidth = stream.readUnsignedShort();
- int screenHeight = stream.readUnsignedShort();
- stream.readUnsignedByte();
- stream.skip(24);
- stream.readString();
- stream.readInt();
- stream.skip(stream.readUnsignedByte());
- stream.skip(stream.readUnsignedByte());
- stream.readInt();
- stream.readLong();
- stream.readString();
- if (stream.readUnsignedByte() == 1) {
- stream.readString();
- }
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readByte();
- stream.readInt();
- stream.readString();
- stream.readUnsignedByte();
- /* for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
- if (index == 34) {
- continue;
- }
- int crc = Cache.STORE.getIndexes()[index] == null ? -1011863738 : Cache.STORE.getIndexes()[index].getCRC();
- int receivedCRC = stream.readInt();
- if (crc != receivedCRC && index < 32) {
- System.err.println("Decode Login -> CRC received is not equal to the one in indexes...");
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- }*/
- for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
- int receivedCRC = stream.readInt();
- }
- if (Utilities.invalidAccountName(username)) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- if (World.getPlayers().size() >= Settings.PLAYERS_LIMIT - 10) {
- session.getLoginPackets().sendClientPacket(7);
- return;
- }
- if (World.containsPlayer(username)) {
- session.getLoginPackets().sendClientPacket(5);
- return;
- }
- if (AntiFlood.getSessionsIP(session.getIP()) > 2) {
- session.getLoginPackets().sendClientPacket(9);
- return;
- }
- Player player;
- if (!SerializableFilesManager.containsPlayer(username)) {
- player = new Player(password);
- } else {
- player = SerializableFilesManager.loadPlayer(username);
- if (player == null) {
- session.getLoginPackets().sendClientPacket(20);
- return;
- }
- if (!password.equals(player.getPassword())) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- }
- player.init(session, username, displayMode, screenWidth, screenHeight, 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