diff options
author | Eric Kuck <eric@bluelinelabs.com> | 2018-12-20 22:52:45 -0600 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-12-21 16:42:16 +0100 |
commit | 8553723e04c4d63b99e669df2e43fc4a914b7f9d (patch) | |
tree | e3b7b25777e47455a787fa590cf00d1c25cbdc5d /WireGuard/Shared/Model/DNSServer.swift | |
parent | NE: simplify logic (diff) | |
download | wireguard-apple-8553723e04c4d63b99e669df2e43fc4a914b7f9d.tar.xz wireguard-apple-8553723e04c4d63b99e669df2e43fc4a914b7f9d.zip |
Updated NETunnelProvider save format
Signed-off-by: Eric Kuck <eric@bluelinelabs.com>
Diffstat (limited to 'WireGuard/Shared/Model/DNSServer.swift')
-rw-r--r-- | WireGuard/Shared/Model/DNSServer.swift | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/WireGuard/Shared/Model/DNSServer.swift b/WireGuard/Shared/Model/DNSServer.swift index d1c75fc..8703fbb 100644 --- a/WireGuard/Shared/Model/DNSServer.swift +++ b/WireGuard/Shared/Model/DNSServer.swift @@ -4,52 +4,50 @@ import Foundation import Network -@available(OSX 10.14, iOS 12.0, *) struct DNSServer { let address: IPAddress -} - -// MARK: Converting to and from String - -extension DNSServer { - init?(from addressString: String) { - if let addr = IPv4Address(addressString) { - address = addr - } else if let addr = IPv6Address(addressString) { - address = addr - } else { - return nil - } - } - func stringRepresentation() -> String { - return "\(address)" + + init(address: IPAddress) { + self.address = address } } -// MARK: Codable - -@available(OSX 10.14, iOS 12.0, *) extension DNSServer: Codable { public func encode(to encoder: Encoder) throws { var container = encoder.singleValueContainer() - try container.encode(address.rawValue) + try container.encode(stringRepresentation) } + public init(from decoder: Decoder) throws { - let container = try decoder.singleValueContainer() - var data = try container.decode(Data.self) - let ipAddressFromData: IPAddress? = { - switch data.count { - case 4: return IPv4Address(data) - case 16: return IPv6Address(data) - default: return nil - } - }() - guard let ipAddress = ipAddressFromData else { + let values = try decoder.singleValueContainer() + let addressString = try values.decode(String.self) + + if let address = IPv4Address(addressString) { + self.address = address + } else if let address = IPv6Address(addressString) { + self.address = address + } else { throw DecodingError.invalidData } - address = ipAddress } + enum DecodingError: Error { case invalidData } } + +extension DNSServer { + var stringRepresentation: String { + return "\(address)" + } + + init?(from addressString: String) { + if let addr = IPv4Address(addressString) { + address = addr + } else if let addr = IPv6Address(addressString) { + address = addr + } else { + return nil + } + } +} |