diff options
author | Roopesh Chander <roop@roopc.net> | 2018-10-19 09:15:37 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2018-10-27 15:13:01 +0530 |
commit | 8ec73025f2216e5c4c7e4170582cb2e4a16fd06d (patch) | |
tree | 2c62936d128e1c4b1a225c2c9a57c411dda8d86f /WireGuard/WireGuard/Model | |
parent | Model: Name should be part of the interface, not the tunnel (diff) | |
download | wireguard-apple-8ec73025f2216e5c4c7e4170582cb2e4a16fd06d.tar.xz wireguard-apple-8ec73025f2216e5c4c7e4170582cb2e4a16fd06d.zip |
Model: IPAddressRange: Converting to and from String
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/Model')
-rw-r--r-- | WireGuard/WireGuard/Model/IPAddressRange.swift | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/WireGuard/WireGuard/Model/IPAddressRange.swift b/WireGuard/WireGuard/Model/IPAddressRange.swift index 4498b58..ca4a7b9 100644 --- a/WireGuard/WireGuard/Model/IPAddressRange.swift +++ b/WireGuard/WireGuard/Model/IPAddressRange.swift @@ -15,6 +15,37 @@ struct IPAddressRange { var networkPrefixLength: UInt8 } +// MARK: Converting to and from String +// For use in the UI + +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]) + if let addr = IPv4Address(addressString) { + address = addr + } else if let addr = IPv6Address(addressString) { + address = addr + } else { + return nil + } + let networkPrefixLengthSubstring = string[indexOfNetworkPrefixLength ..< string.endIndex] + if let npl = UInt8(networkPrefixLengthSubstring) { + networkPrefixLength = npl + } else { + return nil + } + } + func stringRepresentation() -> String { + return "\(address)/\(networkPrefixLength)" + } +} + +// MARK: Codable +// For serializing to disk + @available(OSX 10.14, iOS 12.0, *) extension IPAddressRange: Codable { public func encode(to encoder: Encoder) throws { |