From 50593356e1725a6c123beb28c67eec2269a47ab1 Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Wed, 6 Aug 2025 18:51:25 +0200 Subject: rewrite version with InMessage --- src/main/kotlin/Connection.kt | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/Connection.kt b/src/main/kotlin/Connection.kt index 3f920e7..6233407 100644 --- a/src/main/kotlin/Connection.kt +++ b/src/main/kotlin/Connection.kt @@ -51,7 +51,7 @@ class Connection(transLay: TransportLayer) : ProtocolTranslator { } override fun version(msize: UInt, version: String): String? { - val msg = Message(NinePMessageType.TVERSION, this.NOTAG, listOf("msize", "version"), + val omsg = OutMessage(NinePMessageType.TVERSION, this.NOTAG, listOf("msize", "version"), mapOf( "msize" to BigInteger(msize.toString()) ), @@ -60,16 +60,22 @@ class Connection(transLay: TransportLayer) : ProtocolTranslator { ), this.maxSize ) - val error = responseError(msg) - if (error != null) { - return error + val imsg: InMessage + try { + imsg = InMessage(this.tl, msize, omsg.tag) + } catch (ime: InvalidMessageException) { + return ime.message + } + imsg.applySchema(listOf( + InMessage.Field("msize", InMessage.Field.Type.INTEGER, 4u), + InMessage.Field("version", InMessage.Field.Type.STRING, 0u) + )) + val remoteMaxSize = imsg.fieldsInt["msize"]!!.toInt().toUInt() + if (remoteMaxSize > this.maxSize) { + return "Invalid remote msize value (too big)." } - waitForTag(msg.tag) - val rmsize = readInteger(4u).toInt().toUInt() - val rversion = readString() - // this check should not be necessary, but you never know - this.maxSize = ( if (rmsize < msize) msize else rmsize ) - if (rversion == "unknown") { + this.maxSize = remoteMaxSize + if (imsg.fieldsStr["version"] == "unknown") { return "Unknown version." } return null -- cgit v1.2.3