diff --git a/src/main/java/client/MapleClient.java b/src/main/java/client/MapleClient.java index 203a47b826..a2bd6ba1c2 100644 --- a/src/main/java/client/MapleClient.java +++ b/src/main/java/client/MapleClient.java @@ -26,7 +26,6 @@ import config.YamlConfig; import constants.game.GameConstants; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import net.netty.ClientCyphers; import net.netty.InvalidPacketHeaderException; import net.server.Server; import net.server.audit.locks.MonitoredLockType; @@ -122,9 +121,7 @@ public class MapleClient extends ChannelInboundHandlerAdapter { return lastPacket; } - public MapleClient(ClientCyphers cyphers) { - this.send = cyphers.getSendCypher(); - this.receive = cyphers.getReceiveCypher(); + public MapleClient() { this.session = null; // TODO remove once the other constructor is removed } diff --git a/src/main/java/net/mina/MaplePacketDecoder.java b/src/main/java/net/mina/MaplePacketDecoder.java index aa182f1528..c66a595b33 100644 --- a/src/main/java/net/mina/MaplePacketDecoder.java +++ b/src/main/java/net/mina/MaplePacketDecoder.java @@ -59,7 +59,7 @@ public class MaplePacketDecoder extends CumulativeProtocolDecoder { MapleAESOFB rcvdCrypto = client.getReceiveCrypto(); if (in.remaining() >= 4 && decoderState.packetlength == -1) { int packetHeader = in.getInt(); - if (!rcvdCrypto.checkPacket(packetHeader)) { + if (!rcvdCrypto.isValidHeader(packetHeader)) { MapleSessionCoordinator.getInstance().closeSession(session, true); return false; } diff --git a/src/main/java/net/netty/ClientInitializer.java b/src/main/java/net/netty/ClientInitializer.java index 2c52725cbe..8a7397e5df 100644 --- a/src/main/java/net/netty/ClientInitializer.java +++ b/src/main/java/net/netty/ClientInitializer.java @@ -14,7 +14,7 @@ public class ClientInitializer extends ChannelInitializer { final String clientIp = socketChannel.remoteAddress().getHostName(); log.debug("Client initiated new connection from: {}", clientIp); - MapleClient client = new MapleClient(ClientCyphers.generateNew()); - socketChannel.pipeline().addLast("MapleClient", client); + socketChannel.pipeline().addLast("PacketCodec", new PacketCodec(ClientCyphers.generateNew())); + socketChannel.pipeline().addLast("MapleClient", new MapleClient()); } } diff --git a/src/main/java/net/netty/PacketCodec.java b/src/main/java/net/netty/PacketCodec.java new file mode 100644 index 0000000000..6292096711 --- /dev/null +++ b/src/main/java/net/netty/PacketCodec.java @@ -0,0 +1,9 @@ +package net.netty; + +import io.netty.channel.CombinedChannelDuplexHandler; + +public class PacketCodec extends CombinedChannelDuplexHandler { + public PacketCodec(ClientCyphers clientCyphers) { + super(new PacketDecoder(clientCyphers.getReceiveCypher()), new PacketEncoder(clientCyphers.getSendCypher())); + } +} diff --git a/src/main/java/net/netty/PacketDecoder.java b/src/main/java/net/netty/PacketDecoder.java index 99a30bb9f3..777b02e829 100644 --- a/src/main/java/net/netty/PacketDecoder.java +++ b/src/main/java/net/netty/PacketDecoder.java @@ -19,7 +19,7 @@ public class PacketDecoder extends ReplayingDecoder { protected void decode(ChannelHandlerContext context, ByteBuf in, List out) { final int header = in.readInt(); - if (!receiveCypher.checkPacket(header)) { + if (!receiveCypher.isValidHeader(header)) { throw new InvalidPacketHeaderException("Attempted to decode a packet with an invalid header", header); } diff --git a/src/main/java/net/netty/PacketEncoder.java b/src/main/java/net/netty/PacketEncoder.java index 10bb25724e..3d424822c9 100644 --- a/src/main/java/net/netty/PacketEncoder.java +++ b/src/main/java/net/netty/PacketEncoder.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; import net.mina.MapleCustomEncryption; +import net.packet.OutPacket; import tools.MapleAESOFB; public class PacketEncoder extends MessageToByteEncoder { diff --git a/src/main/java/tools/MapleAESOFB.java b/src/main/java/tools/MapleAESOFB.java index 19ba74e279..3b1bd1e809 100644 --- a/src/main/java/tools/MapleAESOFB.java +++ b/src/main/java/tools/MapleAESOFB.java @@ -158,12 +158,12 @@ public class MapleAESOFB { return packetLength; } - public boolean checkPacket(byte[] packet) { + private boolean checkPacket(byte[] packet) { return ((((packet[0] ^ iv[2]) & 0xFF) == ((mapleVersion >> 8) & 0xFF)) && (((packet[1] ^ iv[3]) & 0xFF) == (mapleVersion & 0xFF))); } - public boolean checkPacket(int packetHeader) { + public boolean isValidHeader(int packetHeader) { byte[] packetHeaderBuf = new byte[2]; packetHeaderBuf[0] = (byte) ((packetHeader >> 24) & 0xFF); packetHeaderBuf[1] = (byte) ((packetHeader >> 16) & 0xFF);