Better warning message when a packet is not fully read

This commit is contained in:
themode 2020-11-14 05:33:24 +01:00
parent facc43e550
commit 868f921b94
4 changed files with 34 additions and 8 deletions

View File

@ -16,6 +16,9 @@ public final class OptifineSupport {
private static volatile boolean enabled;
/**
* Enables optifine support by registering the required biomes.
*/
public static void enable() {
Check.stateCondition(enabled, "Optifine support is already enabled!");
OptifineSupport.enabled = true;

View File

@ -10,10 +10,14 @@ import net.minestom.server.network.PacketProcessor;
import net.minestom.server.network.netty.packet.InboundPacket;
import net.minestom.server.network.player.PlayerConnection;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Slf4j
public class ClientChannel extends SimpleChannelInboundHandler<InboundPacket> {
public final static Logger LOGGER = LoggerFactory.getLogger(ClientChannel.class);
private final ConnectionManager connectionManager = MinecraftServer.getConnectionManager();
private final PacketProcessor packetProcessor;
@ -34,9 +38,10 @@ public class ClientChannel extends SimpleChannelInboundHandler<InboundPacket> {
final int availableBytes = packet.body.readableBytes();
if (availableBytes > 0) {
// TODO log4j2
System.err.println("WARNING: Packet 0x" + Integer.toHexString(packet.packetId)
+ " not fully read (" + availableBytes + " bytes left)");
final PlayerConnection playerConnection = packetProcessor.getPlayerConnection(ctx);
LOGGER.warn("WARNING: Packet 0x" + Integer.toHexString(packet.packetId)
+ " not fully read (" + availableBytes + " bytes left), " + playerConnection);
packet.body.skipBytes(availableBytes);
}

View File

@ -5,7 +5,6 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageCodec;
import io.netty.handler.codec.CorruptedFrameException;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Player;
import net.minestom.server.network.PacketProcessor;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.utils.Utils;
@ -60,10 +59,7 @@ public class PacketFramer extends ByteToMessageCodec<ByteBuf> {
if (packetSize >= MinecraftServer.getMaxPacketSize()) {
final PlayerConnection playerConnection = packetProcessor.getPlayerConnection(ctx);
if (playerConnection != null) {
final Player player = playerConnection.getPlayer();
final String identifier = player != null ?
player.getUsername() :
playerConnection.getRemoteAddress().toString();
final String identifier = playerConnection.getIdentifier();
LOGGER.warn("An user (" + identifier + ") sent a packet over the maximum size (" + packetSize + ")");
} else {
LOGGER.warn("An unregistered user sent a packet over the maximum size (" + packetSize + ")");

View File

@ -73,6 +73,20 @@ public abstract class PlayerConnection {
}
}
/**
* Returns a printable identifier for this connection, will be the player username
* or the connection remote address.
*
* @return this connection identifier
*/
@NotNull
public String getIdentifier() {
final Player player = getPlayer();
return player != null ?
player.getUsername() :
getRemoteAddress().toString();
}
/**
* Serializes the packet and send it to the client.
* <p>
@ -156,4 +170,12 @@ public abstract class PlayerConnection {
public int getLastPacketCounter() {
return lastPacketCounter.get();
}
@Override
public String toString() {
return "PlayerConnection{" +
"connectionState=" + connectionState +
", identifier=" + getIdentifier() +
'}';
}
}