From e6340665df6da8737b90e4d8446fa11aadde3826 Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Wed, 6 Aug 2025 18:52:47 +0200 Subject: rewrite read with InMessage --- src/main/kotlin/Connection.kt | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/Connection.kt b/src/main/kotlin/Connection.kt index 6233407..203b5e2 100644 --- a/src/main/kotlin/Connection.kt +++ b/src/main/kotlin/Connection.kt @@ -106,8 +106,8 @@ class Connection(transLay: TransportLayer) : ProtocolTranslator { TODO("Not yet implemented") } - override fun read(fid: UInt, offset: ULong, count: UInt): String? { - val msg = Message(NinePMessageType.TREAD, tagGen.generate(), listOf("fid", "offset", "count"), + override fun read(fid: UInt, offset: ULong, count: UInt): Pair> { + val omsg = OutMessage(NinePMessageType.TREAD, this.tagGen.generate(), listOf("fid", "offset", "count"), mapOf( "fid" to BigInteger(fid.toString()), "offset" to BigInteger(offset.toString()), @@ -116,12 +116,21 @@ class Connection(transLay: TransportLayer) : ProtocolTranslator { emptyMap(), this.maxSize ) - val error = responseError(msg) - if (error != null) { - return error + val imsg: InMessage + try { + imsg = InMessage(this.tl, this.maxSize, omsg.tag) + } catch (ime: InvalidMessageException) { + return Pair(ime.message, emptyArray()) } + if (imsg.type == NinePMessageType.RERROR) { + imsg.applyField(InMessage.Field("ename", InMessage.Field.Type.STRING, 0u)) + return Pair(imsg.fieldsStr["ename"], emptyArray()) + } + imsg.applyField(InMessage.Field("count", InMessage.Field.Type.INTEGER, 4u)) + val count = imsg.fieldsInt["count"]!!.toInt().toUInt() + imsg.applyField(InMessage.Field("data", InMessage.Field.Type.RAW, count)) - return null + return Pair(null, imsg.fieldsRaw["data"]!!) } override fun write(fid: UInt, offset: ULong, count: UInt, data: Iterable): String? { -- cgit v1.2.3