diff options
author | Edoardo La Greca | 2025-08-06 18:51:25 +0200 |
---|---|---|
committer | Edoardo La Greca | 2025-08-06 18:51:25 +0200 |
commit | 50593356e1725a6c123beb28c67eec2269a47ab1 (patch) | |
tree | 1a77f6136c219455294ed155cd3c29512420f529 /src/main | |
parent | 5fece9e1e1439ed650dc7db6211a9cb1052e358d (diff) |
rewrite version with InMessage
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/kotlin/Connection.kt | 26 |
1 files 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 |