summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/IPAddress.kt18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/main/kotlin/IPAddress.kt b/src/main/kotlin/IPAddress.kt
index 4d3967d..5e3cb0c 100644
--- a/src/main/kotlin/IPAddress.kt
+++ b/src/main/kotlin/IPAddress.kt
@@ -11,18 +11,26 @@ class IPAddress {
constructor(address: String) {
val split4 = address.split('.')
val split6 = address.split(':')
- var bytes: List<Byte> = emptyList()
- if (split4.size == 4) {
- bytes = split4.map { it.toByte() }
+ val isV4 = split4.size == 4 &&
+ split4.size == split4.filter { it.matches(Regex("^[0-9]$")) }.size
+
+ val isV6 = split6.size == 16 &&
+ split6.size == split6.filter { it.contains(Regex("^[0-9][a-f]$")) }.size
+
+ if (isV4) {
this.is4 = true
- } else if (split6.size == 16) {
- bytes = split4.map { it.toByte(16) }
+ } else if (isV6) {
this.is4 = false
} else {
throw NumberFormatException()
}
+ var bytes: List<Byte> = if (this.is4) {
+ split4.map { it.toByte(10) }
+ } else {
+ split6.map { it.toByte(16) }
+ }
this.address = bytes.toTypedArray()
}