diff options
Diffstat (limited to 'src/main/kotlin/IPAddress.kt')
-rw-r--r-- | src/main/kotlin/IPAddress.kt | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main/kotlin/IPAddress.kt b/src/main/kotlin/IPAddress.kt new file mode 100644 index 0000000..91226f5 --- /dev/null +++ b/src/main/kotlin/IPAddress.kt @@ -0,0 +1,39 @@ +/** + * An IP address (v4 or v6). + */ +class IPAddress { + private var address4: Array<UByte> = Array(4) { 0u } + private var address6: Array<UByte> = Array(16) { 0u } + private var is4: Boolean + + /** + * @throws NumberFormatException if the IP address follows neither the IPv4 syntax, nor the IPv6 syntax. + */ + constructor(address: String) { + val split4 = address.split('.') + val split6 = address.split(':') + var bytes: List<UByte> = emptyList() + + if (split4.size == 4) { + bytes = split4.map { it.toUByte() } + this.address4 = bytes.toTypedArray() + this.is4 = true + } else if (split6.size == 16) { + bytes = split4.map { it.toUByte(16) } + this.address6 = bytes.toTypedArray() + this.is4 = false + } else { + throw NumberFormatException() + } + } + + override fun toString(): String { + val str: String + if (this.is4) { + str = address4.joinToString(separator = ".") { it.toString() } + } else { + str = address6.joinToString(separator = ":") { it.toString() } + } + return str + } +}
\ No newline at end of file |