From 54311503627db355093de8b19b870a2aa9a36f05 Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 22 Jun 2021 20:32:35 +0200 Subject: [PATCH] Set up packet codec and channel initialization --- src/main/java/client/MapleClient.java | 5 +---- src/main/java/net/mina/MaplePacketDecoder.java | 2 +- src/main/java/net/netty/ClientInitializer.java | 4 ++-- src/main/java/net/netty/PacketCodec.java | 9 +++++++++ src/main/java/net/netty/PacketDecoder.java | 2 +- src/main/java/net/netty/PacketEncoder.java | 1 + src/main/java/tools/MapleAESOFB.java | 4 ++-- 7 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 src/main/java/net/netty/PacketCodec.java 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);