aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-10-30 13:45:16 +0530
committerRoopesh Chander <roop@roopc.net>2018-10-30 13:45:16 +0530
commit7e4597e0d78083d60feb0e12bbc3f9335ae591d7 (patch)
treebf3912085f166b16ffefd66a89a6bcf3a94c12b4 /WireGuard
parentFix error message: s/atleast/at least/g; (diff)
downloadwireguard-apple-7e4597e0d78083d60feb0e12bbc3f9335ae591d7.tar.xz
wireguard-apple-7e4597e0d78083d60feb0e12bbc3f9335ae591d7.zip
Model: IP address can be specified without '/cidr'
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard')
-rw-r--r--WireGuard/WireGuard/Model/IPAddressRange.swift30
1 files changed, 15 insertions, 15 deletions
diff --git a/WireGuard/WireGuard/Model/IPAddressRange.swift b/WireGuard/WireGuard/Model/IPAddressRange.swift
index 06f6c00..1e181d7 100644
--- a/WireGuard/WireGuard/Model/IPAddressRange.swift
+++ b/WireGuard/WireGuard/Model/IPAddressRange.swift
@@ -15,29 +15,29 @@ struct IPAddressRange {
extension IPAddressRange {
init?(from string: String) {
- guard let indexOfSlash = string.lastIndex(of: "/") else { return nil }
- let indexOfNetworkPrefixLength = string.index(after: indexOfSlash)
- guard (indexOfNetworkPrefixLength < string.endIndex) else { return nil }
- let addressString = String(string[string.startIndex ..< indexOfSlash])
+ let endOfIPAddress = string.lastIndex(of: "/") ?? string.endIndex
+ let addressString = String(string[string.startIndex ..< endOfIPAddress])
+ let address: IPAddress
if let addr = IPv4Address(addressString) {
- address = addr
+ address = addr
} else if let addr = IPv6Address(addressString) {
address = addr
} else {
return nil
}
- let networkPrefixLengthSubstring = string[indexOfNetworkPrefixLength ..< string.endIndex]
- if let npl = UInt8(networkPrefixLengthSubstring) {
- if (address is IPv4Address) {
- networkPrefixLength = min(npl, 32)
- } else if (address is IPv6Address) {
- networkPrefixLength = min(npl, 128)
- } else {
- fatalError()
- }
+ let maxNetworkPrefixLength: UInt8 = (address is IPv4Address) ? 32 : 128
+ var networkPrefixLength: UInt8
+ if (endOfIPAddress < string.endIndex) { // "/" was located
+ let indexOfNetworkPrefixLength = string.index(after: endOfIPAddress)
+ guard (indexOfNetworkPrefixLength < string.endIndex) else { return nil }
+ let networkPrefixLengthSubstring = string[indexOfNetworkPrefixLength ..< string.endIndex]
+ guard let npl = UInt8(networkPrefixLengthSubstring) else { return nil }
+ networkPrefixLength = min(npl, maxNetworkPrefixLength)
} else {
- return nil
+ networkPrefixLength = maxNetworkPrefixLength
}
+ self.address = address
+ self.networkPrefixLength = networkPrefixLength
}
func stringRepresentation() -> String {
return "\(address)/\(networkPrefixLength)"