From 7341ead2aade10ea1b833e94275277658741883a Mon Sep 17 00:00:00 2001 From: Edoardo La Greca Date: Mon, 18 Aug 2025 21:09:11 +0200 Subject: switch to multi-module project structure --- lib/src/main/kotlin/Utils.kt | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/src/main/kotlin/Utils.kt (limited to 'lib/src/main/kotlin/Utils.kt') diff --git a/lib/src/main/kotlin/Utils.kt b/lib/src/main/kotlin/Utils.kt new file mode 100644 index 0000000..45185de --- /dev/null +++ b/lib/src/main/kotlin/Utils.kt @@ -0,0 +1,38 @@ +const val DEFAULT_9P_PORT: UShort = 564u +const val DEFAULT_9P_TLS_PORT: UShort = 17020u + +/** + * The [nineAddressToValues] function translates an address from one of the dial(2) formats into the respective data. + * For the sake of my sanity, the following list highlights differences from the typical dial(2) formats: + * 1. The "network" part is ignored. + * 2. If nothing is specified in the place of "service", the default unencrypted 9P port is used: 564. + * 3. "Service" can only contain port numbers. + * All the rest is the same. + * + * @return A Pair (A, P) containing the host address (A) and the port (P). + * + * @throws IllegalArgumentException If the address is improperly formatted or has invalid values. + * @throws NumberFormatException If the port's value can't be parsed into an [UShort]. + */ +fun nineAddressToValues(nineAddress: String): Pair { + val parts = nineAddress.split('!', limit = 3) + val address: String + val port: UShort + when (parts.size) { + 1 -> { + address = parts[0] + port = DEFAULT_9P_PORT + } + 2 -> { + address = parts[1] + port = DEFAULT_9P_PORT + } + 3 -> { + address = parts[1] + port = parts[2].toUShort() + } + else -> throw IllegalArgumentException() + } + + return Pair(address, port) +} \ No newline at end of file -- cgit v1.2.3