From 81393392abb55c62a9d005bef9a54261ecbbb9ae Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 13 Jul 2021 22:10:01 +0200 Subject: [PATCH] Clean up Apache Mina, goodbye! --- pom.xml | 5 - src/main/java/client/MapleCharacter.java | 4 +- src/main/java/client/MapleClient.java | 30 ----- .../net/{mina => }/MapleCustomEncryption.java | 2 +- src/main/java/net/mina/MapleCodecFactory.java | 47 -------- .../java/net/mina/MaplePacketDecoder.java | 105 ------------------ .../java/net/mina/MaplePacketEncoder.java | 97 ---------------- src/main/java/net/netty/PacketDecoder.java | 2 +- src/main/java/net/netty/PacketEncoder.java | 2 +- 9 files changed, 5 insertions(+), 289 deletions(-) rename src/main/java/net/{mina => }/MapleCustomEncryption.java (99%) delete mode 100644 src/main/java/net/mina/MapleCodecFactory.java delete mode 100644 src/main/java/net/mina/MaplePacketDecoder.java delete mode 100644 src/main/java/net/mina/MaplePacketEncoder.java diff --git a/pom.xml b/pom.xml index 8052282e74..ac8592c6ee 100644 --- a/pom.xml +++ b/pom.xml @@ -46,11 +46,6 @@ - - org.apache.mina - mina-core - 2.1.3 - io.netty netty-transport diff --git a/src/main/java/client/MapleCharacter.java b/src/main/java/client/MapleCharacter.java index f3fc390ed5..5434e00e2d 100644 --- a/src/main/java/client/MapleCharacter.java +++ b/src/main/java/client/MapleCharacter.java @@ -52,7 +52,6 @@ import net.server.services.task.world.CharacterSaveService; import net.server.services.type.ChannelServices; import net.server.services.type.WorldServices; import net.server.world.*; -import org.apache.mina.util.ConcurrentHashSet; import scripting.AbstractPlayerInteraction; import scripting.event.EventInstanceManager; import scripting.item.ItemScriptManager; @@ -85,6 +84,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.*; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -177,7 +177,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject { private final Map quests; private Set controlled = new LinkedHashSet<>(); private Map entered = new LinkedHashMap<>(); - private Set visibleMapObjects = new ConcurrentHashSet<>(); + private Set visibleMapObjects = Collections.newSetFromMap(new ConcurrentHashMap<>()); private Map skills = new LinkedHashMap<>(); private Map activeCoupons = new LinkedHashMap<>(); private Map activeCouponRates = new LinkedHashMap<>(); diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index bd3f65956f..380dd9ce65 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -45,7 +45,6 @@ import net.server.coordinator.session.MapleSessionCoordinator.AntiMulticlientRes import net.server.guild.MapleGuild; import net.server.guild.MapleGuildCharacter; import net.server.world.*; -import org.apache.mina.core.session.IoSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scripting.AbstractPlayerInteraction; @@ -86,10 +85,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { public static final int LOGIN_NOTLOGGEDIN = 0; public static final int LOGIN_SERVER_TRANSITION = 1; public static final int LOGIN_LOGGEDIN = 2; - public static final String CLIENT_KEY = "CLIENT"; - public static final String CLIENT_HWID = "HWID"; - public static final String CLIENT_NIBBLEHWID = "HWID2"; - public static final String CLIENT_REMOTE_ADDRESS = "REMOTE_IP"; private final Type type; @@ -98,9 +93,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { private String remoteAddress; private volatile boolean inTransition; - private MapleAESOFB send; - private MapleAESOFB receive; - private io.netty.channel.Channel ioChannel; private PacketProcessor packetProcessor; private MapleCharacter player; @@ -158,12 +150,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { this.channel = channel; } - public MapleClient(MapleAESOFB send, MapleAESOFB receive, IoSession session) { - this.type = null; - this.send = send; - this.receive = receive; - } - public static MapleClient createMock() { return new MapleClient(null, null, -123, -123); } @@ -275,14 +261,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { ioChannel.disconnect(); } - public MapleAESOFB getReceiveCrypto() { - return receive; - } - - public MapleAESOFB getSendCrypto() { - return send; - } - public Hwid getHwid() { return hwid; } @@ -1097,9 +1075,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { this.birthday = null; this.engines = null; this.player = null; - this.receive = null; - this.send = null; - //this.session = null; } public void setCharacterOnSessionTransitionState(int cid) { @@ -1171,11 +1146,6 @@ public class MapleClient extends ChannelInboundHandlerAdapter { lastPong = System.currentTimeMillis(); } - @Deprecated(forRemoval = true) - public void testPing(long timeThen) { - throw new UnsupportedOperationException(); - } - public void checkIfIdle(final IdleStateEvent event) { final long pingedAt = System.currentTimeMillis(); announce(MaplePacketCreator.getPing()); diff --git a/src/main/java/net/mina/MapleCustomEncryption.java b/src/main/java/net/MapleCustomEncryption.java similarity index 99% rename from src/main/java/net/mina/MapleCustomEncryption.java rename to src/main/java/net/MapleCustomEncryption.java index 93f0a1b121..e6063279b9 100644 --- a/src/main/java/net/mina/MapleCustomEncryption.java +++ b/src/main/java/net/MapleCustomEncryption.java @@ -19,7 +19,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -package net.mina; +package net; public class MapleCustomEncryption { private static byte rollLeft(byte in, int count) { diff --git a/src/main/java/net/mina/MapleCodecFactory.java b/src/main/java/net/mina/MapleCodecFactory.java deleted file mode 100644 index 9ca3b76bd1..0000000000 --- a/src/main/java/net/mina/MapleCodecFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package net.mina; - -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolCodecFactory; -import org.apache.mina.filter.codec.ProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolEncoder; - -public class MapleCodecFactory implements ProtocolCodecFactory { - private final ProtocolEncoder encoder; - private final ProtocolDecoder decoder; - - public MapleCodecFactory() { - encoder = new MaplePacketEncoder(); - decoder = new MaplePacketDecoder(); - } - - @Override - public ProtocolEncoder getEncoder(IoSession session) throws Exception { - return encoder; - } - - @Override - public ProtocolDecoder getDecoder(IoSession session) throws Exception { - return decoder; - } -} diff --git a/src/main/java/net/mina/MaplePacketDecoder.java b/src/main/java/net/mina/MaplePacketDecoder.java deleted file mode 100644 index 735160b797..0000000000 --- a/src/main/java/net/mina/MaplePacketDecoder.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - This file is part of the OdinMS Maple Story Server - Copyright (C) 2008 Patrick Huy - Matthias Butz - Jan Christian Meyer - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation version 3 as published by - the Free Software Foundation. You may not use, modify or distribute - this program under any other version of the GNU Affero General Public - License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -package net.mina; - -import client.MapleClient; -import config.YamlConfig; -import constants.net.OpcodeConstants; -import net.server.coordinator.session.MapleSessionCoordinator; -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.CumulativeProtocolDecoder; -import org.apache.mina.filter.codec.ProtocolDecoderOutput; -import tools.FilePrinter; -import tools.HexTool; -import tools.MapleAESOFB; -import tools.data.input.ByteArrayByteStream; -import tools.data.input.GenericLittleEndianAccessor; - -public class MaplePacketDecoder extends CumulativeProtocolDecoder { - private static final String DECODER_STATE_KEY = MaplePacketDecoder.class.getName() + ".STATE"; - - private static class DecoderState { - public int packetlength = -1; - } - - @Override - protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { - final MapleClient client = (MapleClient) session.getAttribute(MapleClient.CLIENT_KEY); - if(client == null) { - MapleSessionCoordinator.getInstance().closeSession(MapleClient.getPlaceholder(), true); - return false; - } - - DecoderState decoderState = (DecoderState) session.getAttribute(DECODER_STATE_KEY); - if (decoderState == null) { - decoderState = new DecoderState(); - session.setAttribute(DECODER_STATE_KEY, decoderState); - } - - MapleAESOFB rcvdCrypto = client.getReceiveCrypto(); - if (in.remaining() >= 4 && decoderState.packetlength == -1) { - int packetHeader = in.getInt(); - if (!rcvdCrypto.isValidHeader(packetHeader)) { - MapleSessionCoordinator.getInstance().closeSession(MapleClient.getPlaceholder(), true); - return false; - } - decoderState.packetlength = MapleAESOFB.getPacketLength(packetHeader); - } else if (in.remaining() < 4 && decoderState.packetlength == -1) { - return false; - } - if (in.remaining() >= decoderState.packetlength) { - byte[] decryptedPacket = new byte[decoderState.packetlength]; - in.get(decryptedPacket, 0, decoderState.packetlength); - decoderState.packetlength = -1; - rcvdCrypto.crypt(decryptedPacket); - MapleCustomEncryption.decryptData(decryptedPacket); - out.write(decryptedPacket); - if (YamlConfig.config.server.USE_DEBUG_SHOW_PACKET){ // Atoot's idea: packet traffic log, applied using auto-identation thanks to lrenex - int packetLen = decryptedPacket.length; - int pHeader = readFirstShort(decryptedPacket); - String pHeaderStr = Integer.toHexString(pHeader).toUpperCase(); - String op = lookupSend(pHeader); - String Send = "ClientSend:" + op + " [" + pHeaderStr + "] (" + packetLen + ")\r\n"; - if (packetLen <= 3000) { - String SendTo = Send + HexTool.toString(decryptedPacket) + "\r\n" + HexTool.toStringFromAscii(decryptedPacket); - System.out.println(SendTo); - if (op == null) { - System.out.println("UnknownPacket:" + SendTo); - } - } else { - FilePrinter.print(FilePrinter.PACKET_STREAM + ".txt", HexTool.toString(new byte[]{decryptedPacket[0], decryptedPacket[1]}) + "..."); - } - } - return true; - } - return false; - } - - private String lookupSend(int val) { - return OpcodeConstants.recvOpcodeNames.get(val); - } - - private int readFirstShort(byte[] arr) { - return new GenericLittleEndianAccessor(new ByteArrayByteStream(arr)).readShort(); - } -} diff --git a/src/main/java/net/mina/MaplePacketEncoder.java b/src/main/java/net/mina/MaplePacketEncoder.java deleted file mode 100644 index e1a542deca..0000000000 --- a/src/main/java/net/mina/MaplePacketEncoder.java +++ /dev/null @@ -1,97 +0,0 @@ -/* -This file is part of the OdinMS Maple Story Server -Copyright (C) 2008 Patrick Huy -Matthias Butz -Jan Christian Meyer - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as -published by the Free Software Foundation version 3 as published by -the Free Software Foundation. You may not use, modify or distribute -this program under any other version of the GNU Affero General Public -License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . - */ -package net.mina; - -import client.MapleClient; -import config.YamlConfig; -import constants.net.OpcodeConstants; -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; -import org.apache.mina.filter.codec.ProtocolEncoder; -import org.apache.mina.filter.codec.ProtocolEncoderOutput; -import tools.FilePrinter; -import tools.HexTool; -import tools.MapleAESOFB; -import tools.data.input.ByteArrayByteStream; -import tools.data.input.GenericLittleEndianAccessor; - -public class MaplePacketEncoder implements ProtocolEncoder { - - @Override - public void encode(final IoSession session, final Object message, final ProtocolEncoderOutput out) throws Exception { - final MapleClient client = (MapleClient) session.getAttribute(MapleClient.CLIENT_KEY); - - try { - if (client.tryacquireEncoder()) { - try { - final MapleAESOFB send_crypto = client.getSendCrypto(); - final byte[] input = (byte[]) message; - if (YamlConfig.config.server.USE_DEBUG_SHOW_PACKET) { - int packetLen = input.length; - int pHeader = readFirstShort(input); - String pHeaderStr = Integer.toHexString(pHeader).toUpperCase(); - String op = lookupRecv(pHeader); - String Recv = "ServerSend:" + op + " [" + pHeaderStr + "] (" + packetLen + ")\r\n"; - if (packetLen <= 50000) { - String RecvTo = Recv + HexTool.toString(input) + "\r\n" + HexTool.toStringFromAscii(input); - System.out.println(RecvTo); - if (op == null) { - System.out.println("UnknownPacket:" + RecvTo); - } - } else { - FilePrinter.print(FilePrinter.PACKET_STREAM + ".txt", HexTool.toString(new byte[]{input[0], input[1]}) + " ..."); - } - } - - final byte[] unencrypted = new byte[input.length]; - System.arraycopy(input, 0, unencrypted, 0, input.length); - final byte[] ret = new byte[unencrypted.length + 4]; - final byte[] header = send_crypto.getPacketHeader(unencrypted.length); - MapleCustomEncryption.encryptData(unencrypted); - - send_crypto.crypt(unencrypted); - System.arraycopy(header, 0, ret, 0, 4); - System.arraycopy(unencrypted, 0, ret, 4, unencrypted.length); - - out.write(IoBuffer.wrap(ret)); - } finally { - client.unlockEncoder(); - } - } -// System.arraycopy(unencrypted, 0, ret, 4, unencrypted.length); -// out.write(ByteBuffer.wrap(ret)); - } catch (NullPointerException npe) { - out.write(IoBuffer.wrap(((byte[]) message))); - } - } - - private String lookupRecv(int val) { - return OpcodeConstants.sendOpcodeNames.get(val); - } - - private int readFirstShort(byte[] arr) { - return new GenericLittleEndianAccessor(new ByteArrayByteStream(arr)).readShort(); - } - - @Override - public void dispose(IoSession session) throws Exception {} -} \ No newline at end of file diff --git a/src/main/java/net/netty/PacketDecoder.java b/src/main/java/net/netty/PacketDecoder.java index 0c150f2527..253b16fe5f 100644 --- a/src/main/java/net/netty/PacketDecoder.java +++ b/src/main/java/net/netty/PacketDecoder.java @@ -6,7 +6,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ReplayingDecoder; -import net.mina.MapleCustomEncryption; +import net.MapleCustomEncryption; import net.packet.ByteBufInPacket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/net/netty/PacketEncoder.java b/src/main/java/net/netty/PacketEncoder.java index 2e6de8e4d7..0fc2fb6979 100644 --- a/src/main/java/net/netty/PacketEncoder.java +++ b/src/main/java/net/netty/PacketEncoder.java @@ -6,7 +6,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; -import net.mina.MapleCustomEncryption; +import net.MapleCustomEncryption; import net.packet.ByteBufInPacket; import net.packet.OutPacket; import org.slf4j.Logger;