classpublicPriority 3
PacketDecoder
com.hypixel.hytale.protocol.io.netty.PacketDecoder
extends ByteToMessageDecoder
0
Methods
0
Public Methods
0
Fields
1
Constructors
Constants
intLENGTH_PREFIX_SIZE= 4
intMIN_FRAME_SIZE= 8
intPACKET_ID_SIZE= 4
Constructors
public
PacketDecoder()Inheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
package com.hypixel.hytale.protocol.io.netty;
import com.hypixel.hytale.protocol.PacketRegistry;
import com.hypixel.hytale.protocol.io.PacketIO;
import com.hypixel.hytale.protocol.io.PacketStatsRecorder;
import com.hypixel.hytale.protocol.io.ProtocolException;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;
import java.util.List;
import javax.annotation.Nonnull;
public class PacketDecoder extends ByteToMessageDecoder {
private static final int LENGTH_PREFIX_SIZE = 4;
private static final int PACKET_ID_SIZE = 4;
private static final int MIN_FRAME_SIZE = 8;
public PacketDecoder() {
}
protected void decode(@Nonnull ChannelHandlerContext ctx, @Nonnull ByteBuf in, @Nonnull List<Object> out) {
if (in.readableBytes() >= 8) {
in.markReaderIndex();
int payloadLength = in.readIntLE();
if (payloadLength >= 0 && payloadLength <= 1677721600) {
int packetId = in.readIntLE();
PacketRegistry.PacketInfo packetInfo = PacketRegistry.getById(packetId);
if (packetInfo == null) {
in.skipBytes(in.readableBytes());
ProtocolUtil.closeConnection(ctx.channel());
} else if (payloadLength > packetInfo.maxSize()) {
in.skipBytes(in.readableBytes());
ProtocolUtil.closeConnection(ctx.channel());
} else if (in.readableBytes() < payloadLength) {
in.resetReaderIndex();
} else {
PacketStatsRecorder statsRecorder = (PacketStatsRecorder)ctx.channel().attr(PacketStatsRecorder.CHANNEL_KEY).get();
if (statsRecorder == null) {
statsRecorder = PacketStatsRecorder.NOOP;
}
try {
out.add(PacketIO.readFramedPacketWithInfo(in, payloadLength, packetInfo, statsRecorder));
} catch (ProtocolException var9) {
in.skipBytes(in.readableBytes());
ProtocolUtil.closeConnection(ctx.channel());
} catch (IndexOutOfBoundsException var10) {
in.skipBytes(in.readableBytes());
ProtocolUtil.closeConnection(ctx.channel());
}
}
} else {
in.skipBytes(in.readableBytes());
ProtocolUtil.closeConnection(ctx.channel());
}
}
}
}