diff --git a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/ViaFabricPlusVLBPipeline.java b/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/ViaFabricPlusVLBPipeline.java index b08c98c1..d965c593 100644 --- a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/ViaFabricPlusVLBPipeline.java +++ b/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/ViaFabricPlusVLBPipeline.java @@ -23,8 +23,6 @@ import de.florianmichael.viafabricplus.protocolhack.ProtocolHack; import de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.DisconnectAdapter; import de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.PingEncapsulationCodec; import de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.RakMessageEncapsulationCodec; -import de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.library_fix.FixedUnconnectedPingEncoder; -import de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.library_fix.FixedUnconnectedPongDecoder; import de.florianmichael.vialoadingbase.model.ComparableProtocolVersion; import de.florianmichael.vialoadingbase.netty.VLBPipeline; import de.florianmichael.vialoadingbase.netty.event.CompressionReorderEvent; @@ -38,9 +36,6 @@ import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.netty.PreNettyLengthPrepender; import net.raphimc.vialegacy.netty.PreNettyLengthRemover; import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.baseprotocols.PreNettyBaseProtocol; -import org.cloudburstmc.netty.channel.raknet.RakClientChannel; -import org.cloudburstmc.netty.handler.codec.raknet.common.UnconnectedPingEncoder; -import org.cloudburstmc.netty.handler.codec.raknet.common.UnconnectedPongDecoder; import java.net.InetSocketAddress; @@ -99,13 +94,6 @@ public class ViaFabricPlusVLBPipeline extends VLBPipeline { // Pinging in RakNet is something different if (ProtocolHack.getRakNetPingSessions().contains(address)) { - { // Temporary fix for the ping encoder - final RakClientChannel rakChannel = (RakClientChannel) ctx.channel(); - - rakChannel.parent().pipeline().replace(UnconnectedPingEncoder.NAME, UnconnectedPingEncoder.NAME, new FixedUnconnectedPingEncoder(rakChannel)); - rakChannel.parent().pipeline().replace(UnconnectedPongDecoder.NAME, UnconnectedPongDecoder.NAME, new FixedUnconnectedPongDecoder(rakChannel)); - } - pipeline.replace(VIA_BEDROCK_FRAME_ENCAPSULATION_HANDLER_NAME, VIA_BEDROCK_PING_ENCAPSULATION_HANDLER_NAME, new PingEncapsulationCodec(address)); pipeline.remove(VIA_BEDROCK_PACKET_ENCAPSULATION_HANDLER_NAME); diff --git a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPingEncoder.java b/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPingEncoder.java deleted file mode 100644 index c64e1a8a..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPingEncoder.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock - * Copyright (C) 2023 RK_01/RaphiMC and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.library_fix; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import io.netty.channel.socket.DatagramPacket; -import org.cloudburstmc.netty.channel.raknet.RakClientChannel; -import org.cloudburstmc.netty.channel.raknet.RakPing; -import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption; - -import static org.cloudburstmc.netty.channel.raknet.RakConstants.ID_UNCONNECTED_PING; - -// Temporary fix until the library fixes the issue -public class FixedUnconnectedPingEncoder extends ChannelOutboundHandlerAdapter { - - private final RakClientChannel rakClientChannel; - - public FixedUnconnectedPingEncoder(final RakClientChannel rakClientChannel) { - this.rakClientChannel = rakClientChannel; - } - - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (!(msg instanceof RakPing)) { - ctx.write(msg, promise); - return; - } - - RakPing ping = (RakPing) msg; - ByteBuf magicBuf = this.rakClientChannel.config().getOption(RakChannelOption.RAK_UNCONNECTED_MAGIC); - long guid = this.rakClientChannel.config().getOption(RakChannelOption.RAK_GUID); - - ByteBuf pingBuffer = ctx.alloc().ioBuffer(magicBuf.readableBytes() + 17); - pingBuffer.writeByte(ID_UNCONNECTED_PING); - pingBuffer.writeLong(ping.getPingTime()); - pingBuffer.writeBytes(magicBuf, magicBuf.readerIndex(), magicBuf.readableBytes()); - pingBuffer.writeLong(guid); - ctx.write(new DatagramPacket(pingBuffer, ping.getSender())); - } - -} diff --git a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPongDecoder.java b/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPongDecoder.java deleted file mode 100644 index 245486ed..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/protocolhack/netty/viabedrock/codec/library_fix/FixedUnconnectedPongDecoder.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * This file is part of ViaBedrock - https://github.com/RaphiMC/ViaBedrock - * Copyright (C) 2023 RK_01/RaphiMC and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package de.florianmichael.viafabricplus.protocolhack.netty.viabedrock.codec.library_fix; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufUtil; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.socket.DatagramPacket; -import org.cloudburstmc.netty.channel.raknet.RakClientChannel; -import org.cloudburstmc.netty.channel.raknet.RakPong; -import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption; -import org.cloudburstmc.netty.handler.codec.raknet.AdvancedChannelInboundHandler; - -import static org.cloudburstmc.netty.channel.raknet.RakConstants.ID_UNCONNECTED_PONG; - -// Temporary fix until the library fixes the issue -public class FixedUnconnectedPongDecoder extends AdvancedChannelInboundHandler { - - private final RakClientChannel rakClientChannel; - - public FixedUnconnectedPongDecoder(final RakClientChannel rakClientChannel) { - this.rakClientChannel = rakClientChannel; - } - - @Override - protected boolean acceptInboundMessage(ChannelHandlerContext ctx, Object msg) throws Exception { - if (!super.acceptInboundMessage(ctx, msg)) { - return false; - } - - DatagramPacket packet = (DatagramPacket) msg; - ByteBuf buf = packet.content(); - return buf.isReadable() && buf.getUnsignedByte(buf.readerIndex()) == ID_UNCONNECTED_PONG; - } - - @Override - protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception { - ByteBuf buf = packet.content(); - buf.readUnsignedByte(); // Packet ID - - long pingTime = buf.readLong(); - long guid = buf.readLong(); - - ByteBuf magicBuf = this.rakClientChannel.config().getOption(RakChannelOption.RAK_UNCONNECTED_MAGIC); - if (!buf.isReadable(magicBuf.readableBytes()) || !ByteBufUtil.equals(buf.readSlice(magicBuf.readableBytes()), magicBuf)) { - // Magic does not match - return; - } - - ByteBuf pongData = Unpooled.EMPTY_BUFFER; - if (buf.isReadable(2)) { // Length - pongData = buf.readRetainedSlice(buf.readUnsignedShort()); - } - ctx.fireChannelRead(new RakPong(pingTime, guid, pongData, packet.sender())); - } - -}