summaryrefslogtreecommitdiff
path: root/src/main/kotlin/Connection.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/Connection.kt')
-rw-r--r--src/main/kotlin/Connection.kt24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/main/kotlin/Connection.kt b/src/main/kotlin/Connection.kt
index 587f5ee..d5330d7 100644
--- a/src/main/kotlin/Connection.kt
+++ b/src/main/kotlin/Connection.kt
@@ -193,8 +193,28 @@ class Connection(transLay: TransportLayer) : ProtocolTranslator {
return Pair(qid, iounit)
}
- override fun create(path: String) {
- TODO("Not yet implemented")
+ override fun create(fid: UInt, name: String, perm: FilePermissions, mode: FileMode): Pair<QID, UInt> {
+ val omsg = OutMessage(NinePMessageType.TCREATE, this.tagGen.generate(), listOf("fid", "name", "perm", "mode"),
+ mapOf(
+ "fid" to Pair(BigInteger(fid.toString()), 4u),
+ "perm" to Pair(BigInteger(perm.toPermissionInt().toString()), 4u),
+ "mode" to Pair(BigInteger(mode.toModeByte().toString()), 1u)
+ ),
+ mapOf(
+ "name" to name
+ ),
+ emptyMap(),
+ this.maxSize
+ )
+ omsg.write(this.tl)
+ val imsg = checkedInMessage(omsg.tag)
+ imsg.applySchema(listOf(
+ InMessage.Field("qid", InMessage.Field.Type.RAW, 13u),
+ InMessage.Field("iounit", InMessage.Field.Type.INTEGER, 4u)
+ ))
+ val qid = QID(imsg.fieldsRaw["qid"]!!.toList())
+ val iounit = imsg.fieldsInt["iounit"]!!.toInt().toUInt()
+ return Pair(qid, iounit)
}
override fun read(fid: UInt, offset: ULong, count: UInt): Array<UByte> {