diff options
Diffstat (limited to 'src/main/kotlin/IPAddress.kt')
-rw-r--r-- | src/main/kotlin/IPAddress.kt | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/src/main/kotlin/IPAddress.kt b/src/main/kotlin/IPAddress.kt deleted file mode 100644 index 8eb7414..0000000 --- a/src/main/kotlin/IPAddress.kt +++ /dev/null @@ -1,73 +0,0 @@ -/** - * An IP address (v4 or v6). - */ -class IPAddress { - private var address: Array<UByte> - private var is4: Boolean - - /** - * @throws NumberFormatException if the IP address follows neither the IPv4 syntax, nor the IPv6 syntax. - */ - constructor(address: String) { - if (isAddressV4(address)) { - this.is4 = true - } else if (isAddressV6(address)) { - this.is4 = false - } else { - throw NumberFormatException() - } - - val split4 = address.split('.') - val split6 = address.split(':') - val bytes: List<UByte> - if (this.is4) { - bytes = split4.map { it.toUByte(10) } - } else { - val shorts = split6.map { it.toShort(16) } - bytes = shorts.flatMap { - listOf( - it.toInt().and(0xFF00).shr(0x08).toUByte(), - it.toInt().and(0x00FF).toUByte() - ) - } - } - this.address = bytes.toTypedArray() - } - - private fun isAddressV4(address: String): Boolean { - val split4 = address.split('.') - var isOK = split4.size == 4 - isOK = isOK && split4.size == split4.filter { it.matches(Regex("^[0-9]+$")) }.size - return isOK - } - - private fun isAddressV6(address: String): Boolean { - val split6 = address.split(':') - var isOK = split6.size == 8 - isOK = isOK && split6.size == split6.filter { it.contains(Regex("^[0-9][a-f]+$")) }.size - if (isOK) { - return true - } - - // try with "::" - val split6Double = address.split("::") - if (split6Double.size != 2) { - return false - } - val omitted = 8 - split6Double[0].split(':').size - split6Double[1].split(':').size - if (omitted < 0) { - return false - } - return true - } - - override fun toString(): String { - val str: String - if (this.is4) { - str = this.address.joinToString(separator = ".") { it.toString() } - } else { - str = this.address.joinToString(separator = ":") { it.toString() } - } - return str - } -}
\ No newline at end of file |