From 2cfbf21bd5663567cf652a05dbb04469bd10f54d Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Sun, 27 Sep 2020 19:47:38 -0300 Subject: [PATCH] idk, try to fix compression, but not works on 1.7 --- .../creeper123123321/viaaas/CloudProtocol.kt | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src/main/kotlin/com/github/creeper123123321/viaaas/CloudProtocol.kt b/src/main/kotlin/com/github/creeper123123321/viaaas/CloudProtocol.kt index 44fae00..17546c2 100644 --- a/src/main/kotlin/com/github/creeper123123321/viaaas/CloudProtocol.kt +++ b/src/main/kotlin/com/github/creeper123123321/viaaas/CloudProtocol.kt @@ -26,17 +26,20 @@ import javax.naming.directory.InitialDirContext class CloudPipeline(userConnection: UserConnection) : ProtocolPipeline(userConnection) { override fun registerPackets() { super.registerPackets() - add(CloudHandlerProtocol) + add(CloudHeadProtocol) + add(CloudTailProtocol) } override fun add(protocol: Protocol<*, *, *, *>?) { super.add(protocol) - pipes().remove(CloudHandlerProtocol) - pipes().add(CloudHandlerProtocol) // needs to be the last + pipes().remove(CloudHeadProtocol) + pipes().add(0, CloudHeadProtocol) + pipes().remove(CloudTailProtocol) + pipes().add(CloudTailProtocol) } } -object CloudHandlerProtocol : SimpleProtocol() { +object CloudHeadProtocol : SimpleProtocol() { val logger = Logger.getLogger("CloudHandlerProtocol") override fun registerPackets() { this.registerIncoming(State.HANDSHAKE, 0, 0, object : PacketRemapper() { @@ -124,26 +127,6 @@ object CloudHandlerProtocol : SimpleProtocol() { } }) - this.registerOutgoing(State.LOGIN, 3, 3, object : PacketRemapper() { - // set compression - override fun registerMap() { - handler { - val pipe = it.user().channel!!.pipeline() - val threshold = it.read(Type.VAR_INT) - it.cancel() - it.create(3) { - it.write(Type.VAR_INT, threshold) - }.send(CloudHandlerProtocol::class.java, true, true) // needs to be sent uncompressed - pipe.get(CloudCompressor::class.java).threshold = threshold - pipe.get(CloudDecompressor::class.java).threshold = threshold - - val backPipe = pipe.get(CloudSideForwarder::class.java).other!!.pipeline() - backPipe.get(CloudCompressor::class.java)?.threshold = threshold - backPipe.get(CloudDecompressor::class.java)?.threshold = threshold - } - } - }) - this.registerOutgoing(State.LOGIN, 1, 1, object : PacketRemapper() { // encryption request override fun registerMap() { @@ -157,6 +140,34 @@ object CloudHandlerProtocol : SimpleProtocol() { } } +object CloudTailProtocol : SimpleProtocol() { + override fun registerPackets() { + this.registerOutgoing(State.LOGIN, 3, 3, object : PacketRemapper() { + // set compression + override fun registerMap() { + handler { + val pipe = it.user().channel!!.pipeline() + val threshold = it.read(Type.VAR_INT) + it.cancel() + try { + it.create(3) { + it.write(Type.VAR_INT, threshold) + }.send(CloudTailProtocol::class.java, true, true) // needs to be sent uncompressed + } catch (ignored: Exception) { + // ViaRewind cancels it + } + pipe.get(CloudCompressor::class.java).threshold = threshold + pipe.get(CloudDecompressor::class.java).threshold = threshold + + val backPipe = pipe.get(CloudSideForwarder::class.java).other!!.pipeline() + backPipe.get(CloudCompressor::class.java)?.threshold = threshold + backPipe.get(CloudDecompressor::class.java)?.threshold = threshold + } + } + }) + } +} + fun Channel.setAutoRead(b: Boolean) { this.config().isAutoRead = b if (b) this.read()