summaryrefslogtreecommitdiff
path: root/src/main/kotlin/Utils.kt
blob: 2f5dbd4c18c2ad5bfe07780fe3c4f8adc31ac2c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.net.InetAddress

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<String, UShort> {
    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)
}

/**
 * Handy function that initializes the 9P connection.
 */
fun initNineP(npconn: NinePConnection) {
    // TODO: implement
}