13
0
geforkt von Mirrors/Velocity

Try to decode multiple packets at once

Dieser Commit ist enthalten in:
Andrew Steinborn 2019-11-15 00:39:11 -05:00
Ursprung d333eb30b8
Commit ba8629ca0e

Datei anzeigen

@ -11,33 +11,31 @@ public class MinecraftVarintFrameDecoder extends ByteToMessageDecoder {
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
if (!in.isReadable()) {
return;
}
int origReaderIndex = in.readerIndex();
for (int i = 0; i < 3; i++) {
if (!in.isReadable()) {
in.readerIndex(origReaderIndex);
return;
}
byte read = in.readByte();
if (read >= 0) {
// Make sure reader index of length buffer is returned to the beginning
in.readerIndex(origReaderIndex);
int packetLength = ProtocolUtils.readVarInt(in);
if (in.readableBytes() >= packetLength) {
out.add(in.readRetainedSlice(packetLength));
} else {
read_lens: while (in.isReadable()) {
int origReaderIndex = in.readerIndex();
for (int i = 0; i < 3; i++) {
if (!in.isReadable()) {
in.readerIndex(origReaderIndex);
return;
}
return;
}
}
byte read = in.readByte();
if (read >= 0) {
// Make sure reader index of length buffer is returned to the beginning
in.readerIndex(origReaderIndex);
int packetLength = ProtocolUtils.readVarInt(in);
throw new CorruptedFrameException("VarInt too big");
if (in.readableBytes() >= packetLength) {
out.add(in.readRetainedSlice(packetLength));
continue read_lens;
} else {
in.readerIndex(origReaderIndex);
return;
}
}
}
throw new CorruptedFrameException("VarInt too big");
}
}
}