#3808: Do not decode packets that we don't handle
This commit is contained in:
parent
5e59b6dc85
commit
bdd32d5a58
@ -8,7 +8,6 @@ import net.md_5.bungee.protocol.packet.ClearTitles;
|
|||||||
import net.md_5.bungee.protocol.packet.ClientChat;
|
import net.md_5.bungee.protocol.packet.ClientChat;
|
||||||
import net.md_5.bungee.protocol.packet.ClientCommand;
|
import net.md_5.bungee.protocol.packet.ClientCommand;
|
||||||
import net.md_5.bungee.protocol.packet.ClientSettings;
|
import net.md_5.bungee.protocol.packet.ClientSettings;
|
||||||
import net.md_5.bungee.protocol.packet.ClientStatus;
|
|
||||||
import net.md_5.bungee.protocol.packet.Commands;
|
import net.md_5.bungee.protocol.packet.Commands;
|
||||||
import net.md_5.bungee.protocol.packet.CookieRequest;
|
import net.md_5.bungee.protocol.packet.CookieRequest;
|
||||||
import net.md_5.bungee.protocol.packet.CookieResponse;
|
import net.md_5.bungee.protocol.packet.CookieResponse;
|
||||||
@ -128,10 +127,6 @@ public abstract class AbstractPacketHandler
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(ClientStatus clientStatus) throws Exception
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void handle(PlayerListItem playerListItem) throws Exception
|
public void handle(PlayerListItem playerListItem) throws Exception
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,8 @@ public enum Protocol
|
|||||||
map( ProtocolConstants.MINECRAFT_1_21_2, 0x2C ),
|
map( ProtocolConstants.MINECRAFT_1_21_2, 0x2C ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_5, 0x2B )
|
map( ProtocolConstants.MINECRAFT_1_21_5, 0x2B )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket( Chat.class,
|
TO_CLIENT.registerPacket(
|
||||||
|
Chat.class,
|
||||||
Chat::new,
|
Chat::new,
|
||||||
map( ProtocolConstants.MINECRAFT_1_8, 0x02 ),
|
map( ProtocolConstants.MINECRAFT_1_8, 0x02 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_9, 0x0F ),
|
map( ProtocolConstants.MINECRAFT_1_9, 0x0F ),
|
||||||
@ -337,6 +338,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
Title.class,
|
Title.class,
|
||||||
Title::new,
|
Title::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_8, 0x45 ),
|
map( ProtocolConstants.MINECRAFT_1_8, 0x45 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_12, 0x47 ),
|
map( ProtocolConstants.MINECRAFT_1_12, 0x47 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_12_1, 0x48 ),
|
map( ProtocolConstants.MINECRAFT_1_12_1, 0x48 ),
|
||||||
@ -358,6 +360,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ClearTitles.class,
|
ClearTitles.class,
|
||||||
ClearTitles::new,
|
ClearTitles::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_17, 0x10 ),
|
map( ProtocolConstants.MINECRAFT_1_17, 0x10 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19, 0x0D ),
|
map( ProtocolConstants.MINECRAFT_1_19, 0x0D ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
|
map( ProtocolConstants.MINECRAFT_1_19_3, 0x0C ),
|
||||||
@ -368,6 +371,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
Subtitle.class,
|
Subtitle.class,
|
||||||
Subtitle::new,
|
Subtitle::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_17, 0x57 ),
|
map( ProtocolConstants.MINECRAFT_1_17, 0x57 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_18, 0x58 ),
|
map( ProtocolConstants.MINECRAFT_1_18, 0x58 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5B ),
|
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5B ),
|
||||||
@ -382,6 +386,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
TitleTimes.class,
|
TitleTimes.class,
|
||||||
TitleTimes::new,
|
TitleTimes::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_17, 0x5A ),
|
map( ProtocolConstants.MINECRAFT_1_17, 0x5A ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_18, 0x5B ),
|
map( ProtocolConstants.MINECRAFT_1_18, 0x5B ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5E ),
|
map( ProtocolConstants.MINECRAFT_1_19_1, 0x5E ),
|
||||||
@ -396,6 +401,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
SystemChat.class,
|
SystemChat.class,
|
||||||
SystemChat::new,
|
SystemChat::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_19, 0x5F ),
|
map( ProtocolConstants.MINECRAFT_1_19, 0x5F ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19_1, 0x62 ),
|
map( ProtocolConstants.MINECRAFT_1_19_1, 0x62 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 ),
|
map( ProtocolConstants.MINECRAFT_1_19_3, 0x60 ),
|
||||||
@ -409,6 +415,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
PlayerListHeaderFooter.class,
|
PlayerListHeaderFooter.class,
|
||||||
PlayerListHeaderFooter::new,
|
PlayerListHeaderFooter::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_8, 0x47 ),
|
map( ProtocolConstants.MINECRAFT_1_8, 0x47 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_9, 0x48 ),
|
map( ProtocolConstants.MINECRAFT_1_9, 0x48 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_9_4, 0x47 ),
|
map( ProtocolConstants.MINECRAFT_1_9_4, 0x47 ),
|
||||||
@ -433,6 +440,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
EntityStatus.class,
|
EntityStatus.class,
|
||||||
EntityStatus::new,
|
EntityStatus::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_8, 0x1A ),
|
map( ProtocolConstants.MINECRAFT_1_8, 0x1A ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_9, 0x1B ),
|
map( ProtocolConstants.MINECRAFT_1_9, 0x1B ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_13, 0x1C ),
|
map( ProtocolConstants.MINECRAFT_1_13, 0x1C ),
|
||||||
@ -466,6 +474,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
GameState.class,
|
GameState.class,
|
||||||
GameState::new,
|
GameState::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
|
map( ProtocolConstants.MINECRAFT_1_15, 0x1F ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
|
map( ProtocolConstants.MINECRAFT_1_16, 0x1E ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ),
|
map( ProtocolConstants.MINECRAFT_1_16_2, 0x1D ),
|
||||||
@ -482,6 +491,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ViewDistance.class,
|
ViewDistance.class,
|
||||||
ViewDistance::new,
|
ViewDistance::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_14, 0x41 ),
|
map( ProtocolConstants.MINECRAFT_1_14, 0x41 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_15, 0x42 ),
|
map( ProtocolConstants.MINECRAFT_1_15, 0x42 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_16, 0x41 ),
|
map( ProtocolConstants.MINECRAFT_1_16, 0x41 ),
|
||||||
@ -547,6 +557,7 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
StoreCookie.class,
|
StoreCookie.class,
|
||||||
StoreCookie::new,
|
StoreCookie::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_20_5, 0x6B ),
|
map( ProtocolConstants.MINECRAFT_1_20_5, 0x6B ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_2, 0x72 ),
|
map( ProtocolConstants.MINECRAFT_1_21_2, 0x72 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_5, 0x71 )
|
map( ProtocolConstants.MINECRAFT_1_21_5, 0x71 )
|
||||||
@ -554,29 +565,34 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
Transfer.class,
|
Transfer.class,
|
||||||
Transfer::new,
|
Transfer::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_20_5, 0x73 ),
|
map( ProtocolConstants.MINECRAFT_1_20_5, 0x73 ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_2, 0x7A )
|
map( ProtocolConstants.MINECRAFT_1_21_2, 0x7A )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
DisconnectReportDetails.class,
|
DisconnectReportDetails.class,
|
||||||
DisconnectReportDetails::new,
|
DisconnectReportDetails::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21, 0x7A ),
|
map( ProtocolConstants.MINECRAFT_1_21, 0x7A ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_2, 0x81 )
|
map( ProtocolConstants.MINECRAFT_1_21_2, 0x81 )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ServerLinks.class,
|
ServerLinks.class,
|
||||||
ServerLinks::new,
|
ServerLinks::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21, 0x7B ),
|
map( ProtocolConstants.MINECRAFT_1_21, 0x7B ),
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_2, 0x82 )
|
map( ProtocolConstants.MINECRAFT_1_21_2, 0x82 )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ClearDialog.class,
|
ClearDialog.class,
|
||||||
ClearDialog::new,
|
ClearDialog::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_6, 0x84 )
|
map( ProtocolConstants.MINECRAFT_1_21_6, 0x84 )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ShowDialog.class,
|
ShowDialog.class,
|
||||||
ShowDialog::new,
|
ShowDialog::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_6, 0x85 )
|
map( ProtocolConstants.MINECRAFT_1_21_6, 0x85 )
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -841,31 +857,37 @@ public enum Protocol
|
|||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
StoreCookie.class,
|
StoreCookie.class,
|
||||||
StoreCookie::new,
|
StoreCookie::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_20_5, 0x0A )
|
map( ProtocolConstants.MINECRAFT_1_20_5, 0x0A )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
Transfer.class,
|
Transfer.class,
|
||||||
Transfer::new,
|
Transfer::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_20_5, 0x0B )
|
map( ProtocolConstants.MINECRAFT_1_20_5, 0x0B )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
DisconnectReportDetails.class,
|
DisconnectReportDetails.class,
|
||||||
DisconnectReportDetails::new,
|
DisconnectReportDetails::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21, 0x0F )
|
map( ProtocolConstants.MINECRAFT_1_21, 0x0F )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ServerLinks.class,
|
ServerLinks.class,
|
||||||
ServerLinks::new,
|
ServerLinks::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21, 0x10 )
|
map( ProtocolConstants.MINECRAFT_1_21, 0x10 )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ClearDialog.class,
|
ClearDialog.class,
|
||||||
ClearDialog::new,
|
ClearDialog::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_6, 0x11 )
|
map( ProtocolConstants.MINECRAFT_1_21_6, 0x11 )
|
||||||
);
|
);
|
||||||
TO_CLIENT.registerPacket(
|
TO_CLIENT.registerPacket(
|
||||||
ShowDialogDirect.class,
|
ShowDialogDirect.class,
|
||||||
ShowDialogDirect::new,
|
ShowDialogDirect::new,
|
||||||
|
RegisterType.ENCODE,
|
||||||
map( ProtocolConstants.MINECRAFT_1_21_6, 0x12 )
|
map( ProtocolConstants.MINECRAFT_1_21_6, 0x12 )
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -957,6 +979,26 @@ public enum Protocol
|
|||||||
private final int packetID;
|
private final int packetID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private enum RegisterType
|
||||||
|
{
|
||||||
|
// packet is registered to be encoded (only sent, never handled)
|
||||||
|
ENCODE,
|
||||||
|
// packet is registered to be decoded (only handled never modified)
|
||||||
|
DECODE,
|
||||||
|
// packet is registered to be both, encoded and decoded
|
||||||
|
BOTH;
|
||||||
|
|
||||||
|
public boolean encode()
|
||||||
|
{
|
||||||
|
return this == BOTH || this == ENCODE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean decode()
|
||||||
|
{
|
||||||
|
return this == BOTH || this == DECODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helper method
|
// Helper method
|
||||||
private static ProtocolMapping map(int protocol, int id)
|
private static ProtocolMapping map(int protocol, int id)
|
||||||
{
|
{
|
||||||
@ -1010,6 +1052,11 @@ public enum Protocol
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerPacket(Class<? extends DefinedPacket> packetClass, Supplier<? extends DefinedPacket> constructor, ProtocolMapping... mappings)
|
private void registerPacket(Class<? extends DefinedPacket> packetClass, Supplier<? extends DefinedPacket> constructor, ProtocolMapping... mappings)
|
||||||
|
{
|
||||||
|
registerPacket( packetClass, constructor, RegisterType.BOTH, mappings );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerPacket(Class<? extends DefinedPacket> packetClass, Supplier<? extends DefinedPacket> constructor, RegisterType registerType, ProtocolMapping... mappings)
|
||||||
{
|
{
|
||||||
int mappingIndex = 0;
|
int mappingIndex = 0;
|
||||||
ProtocolMapping mapping = mappings[mappingIndex];
|
ProtocolMapping mapping = mappings[mappingIndex];
|
||||||
@ -1042,11 +1089,18 @@ public enum Protocol
|
|||||||
|
|
||||||
ProtocolData data = protocols.get( protocol );
|
ProtocolData data = protocols.get( protocol );
|
||||||
Preconditions.checkState( data.packetConstructors[mapping.packetID] == null, "Duplicate packet mapping (%s)", mapping.packetID );
|
Preconditions.checkState( data.packetConstructors[mapping.packetID] == null, "Duplicate packet mapping (%s)", mapping.packetID );
|
||||||
|
Preconditions.checkState( !data.packetMap.containsKey( packetClass ), "Duplicate packet mapping (%s)", mapping.packetID );
|
||||||
|
|
||||||
|
if ( registerType.encode() )
|
||||||
|
{
|
||||||
data.packetMap.put( packetClass, mapping.packetID );
|
data.packetMap.put( packetClass, mapping.packetID );
|
||||||
|
}
|
||||||
|
if ( registerType.decode() )
|
||||||
|
{
|
||||||
data.packetConstructors[mapping.packetID] = constructor;
|
data.packetConstructors[mapping.packetID] = constructor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasPacket(Class<? extends DefinedPacket> packet, int version)
|
public boolean hasPacket(Class<? extends DefinedPacket> packet, int version)
|
||||||
{
|
{
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package net.md_5.bungee.protocol.packet;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import net.md_5.bungee.protocol.AbstractPacketHandler;
|
|
||||||
import net.md_5.bungee.protocol.DefinedPacket;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
@EqualsAndHashCode(callSuper = false)
|
|
||||||
public class ClientStatus extends DefinedPacket
|
|
||||||
{
|
|
||||||
|
|
||||||
private byte payload;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void read(ByteBuf buf)
|
|
||||||
{
|
|
||||||
payload = buf.readByte();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void write(ByteBuf buf)
|
|
||||||
{
|
|
||||||
buf.writeByte( payload );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void handle(AbstractPacketHandler handler) throws Exception
|
|
||||||
{
|
|
||||||
handler.handle( this );
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user