Skip to content

Commit

Permalink
Integrate multi-forwarding handler for different servers (resolves #296
Browse files Browse the repository at this point in the history
…).
  • Loading branch information
R00tB33rMan committed Sep 4, 2024
2 parents b266f6a + cd3fd6c commit cfc3c31
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import com.velocitypowered.proxy.protocol.netty.MinecraftDecoder;
import com.velocitypowered.proxy.protocol.netty.MinecraftEncoder;
import com.velocitypowered.proxy.protocol.netty.MinecraftVarintFrameDecoder;
import com.velocitypowered.proxy.protocol.netty.MinecraftVarintLengthCompositeEncoder;
import com.velocitypowered.proxy.protocol.netty.MinecraftVarintLengthEncoder;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.handler.timeout.ReadTimeoutHandler;
Expand All @@ -55,7 +55,7 @@ protected void initChannel(Channel ch) {
.addLast(READ_TIMEOUT,
new ReadTimeoutHandler(server.getConfiguration().getReadTimeout(),
TimeUnit.MILLISECONDS))
.addLast(FRAME_ENCODER, MinecraftVarintLengthCompositeEncoder.INSTANCE)
.addLast(FRAME_ENCODER, MinecraftVarintLengthEncoder.INSTANCE)
.addLast(MINECRAFT_DECODER,
new MinecraftDecoder(ProtocolUtils.Direction.CLIENTBOUND))
.addLast(FLOW_HANDLER, new AutoReadHolderHandler())
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,32 +23,34 @@
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.handler.codec.MessageToMessageEncoder;
import java.util.List;

/**
* Handler for appending a length for Minecraft packets.
*/
@ChannelHandler.Sharable
public class MinecraftVarintLengthEncoder extends MessageToByteEncoder<ByteBuf> {
public class MinecraftVarintLengthEncoder extends MessageToMessageEncoder<ByteBuf> {

public static final MinecraftVarintLengthEncoder INSTANCE = new MinecraftVarintLengthEncoder();
public static final boolean IS_JAVA_CIPHER = Natives.cipher.get() == JavaVelocityCipher.FACTORY;

static final boolean IS_JAVA_CIPHER = Natives.cipher.get() == JavaVelocityCipher.FACTORY;

private MinecraftVarintLengthEncoder() {
}

@Override
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, ByteBuf out) throws Exception {
ProtocolUtils.writeVarInt(out, msg.readableBytes());
out.writeBytes(msg);
}
protected void encode(ChannelHandlerContext ctx, ByteBuf buf,
List<Object> list) throws Exception {
final int length = buf.readableBytes();
final int varintLength = ProtocolUtils.varIntBytes(length);

@Override
protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, ByteBuf msg, boolean preferDirect) {
int anticipatedRequiredCapacity = ProtocolUtils.varIntBytes(msg.readableBytes())
+ msg.readableBytes();
return IS_JAVA_CIPHER
? ctx.alloc().heapBuffer(anticipatedRequiredCapacity)
: ctx.alloc().directBuffer(anticipatedRequiredCapacity);
final ByteBuf lenBuf = IS_JAVA_CIPHER
? ctx.alloc().heapBuffer(varintLength)
: ctx.alloc().directBuffer(varintLength);

ProtocolUtils.writeVarInt(lenBuf, length);
list.add(lenBuf);
list.add(buf.retain());
}
}

0 comments on commit cfc3c31

Please sign in to comment.