From 8553723e04c4d63b99e669df2e43fc4a914b7f9d Mon Sep 17 00:00:00 2001 From: Eric Kuck Date: Thu, 20 Dec 2018 22:52:45 -0600 Subject: Updated NETunnelProvider save format Signed-off-by: Eric Kuck --- WireGuard/Shared/Model/DNSServer.swift | 62 ++++++++++++++++------------------ 1 file changed, 30 insertions(+), 32 deletions(-) (limited to 'WireGuard/Shared/Model/DNSServer.swift') 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 + } + } +} -- cgit v1.2.3-59-g8ed1b