summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/IPAddressRange.swift
diff options
context:
space:
mode:
Diffstat (limited to 'ios/MullvadVPN/IPAddressRange.swift')
-rw-r--r--ios/MullvadVPN/IPAddressRange.swift136
1 files changed, 0 insertions, 136 deletions
diff --git a/ios/MullvadVPN/IPAddressRange.swift b/ios/MullvadVPN/IPAddressRange.swift
deleted file mode 100644
index 712dc4d39e..0000000000
--- a/ios/MullvadVPN/IPAddressRange.swift
+++ /dev/null
@@ -1,136 +0,0 @@
-//
-// IPAddressRange.swift
-// MullvadVPN
-//
-// Created by pronebird on 20/06/2019.
-// Copyright © 2019 Mullvad VPN AB. All rights reserved.
-// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved.
-//
-
-import Foundation
-import Network
-
-/// A struct describing an IP address range
-struct IPAddressRange {
- let address: IPAddress
- let networkPrefixLength: UInt8
-
- init(address: IPAddress, networkPrefixLength: UInt8) {
- self.address = address
- self.networkPrefixLength = min(networkPrefixLength, address.maxNetworkPrefixLength)
- }
-
- init(string: String) throws {
- let separatorIndex = string.lastIndex(of: "/") ?? string.endIndex
- let prefixStartIndex = string.index(separatorIndex, offsetBy: 1, limitedBy: string.endIndex)
-
- let prefixSubstring = prefixStartIndex.flatMap { string[$0...] }
- var prefix: UInt8?
- if let prefixSubstring = prefixSubstring {
- if let parsedPrefix = UInt8(prefixSubstring) {
- prefix = parsedPrefix
- } else {
- throw IPAddressRangeParseError.parsePrefix(String(prefixSubstring))
- }
- }
-
- let addressString = String(string[..<separatorIndex])
- if let ipv4Address = IPv4Address(addressString) {
- self = IPAddressRange(
- address: ipv4Address,
- networkPrefixLength: prefix ?? ipv4Address.maxNetworkPrefixLength
- )
- } else if let ipv6Address = IPv6Address(addressString) {
- self = IPAddressRange(
- address: ipv6Address,
- networkPrefixLength: prefix ?? ipv6Address.maxNetworkPrefixLength
- )
- } else {
- throw IPAddressRangeParseError.parseAddress(addressString)
- }
- }
-}
-
-extension IPAddressRange: Equatable {
- static func == (lhs: IPAddressRange, rhs: IPAddressRange) -> Bool {
- return lhs.address.rawValue == rhs.address.rawValue &&
- lhs.networkPrefixLength == rhs.networkPrefixLength
- }
-}
-
-extension IPAddressRange: Hashable {
- func hash(into hasher: inout Hasher) {
- hasher.combine(address.rawValue)
- hasher.combine(networkPrefixLength)
- }
-}
-
-extension IPAddressRange: CustomStringConvertible {
- var description: String {
- return "\(address)/\(networkPrefixLength)"
- }
-}
-
-private extension IPv4Address {
- var maxNetworkPrefixLength: UInt8 {
- return 32
- }
-}
-
-private extension IPv6Address {
- var maxNetworkPrefixLength: UInt8 {
- return 128
- }
-}
-
-private extension IPAddress {
- var maxNetworkPrefixLength: UInt8 {
- if let ipv4Address = self as? IPv4Address {
- return ipv4Address.maxNetworkPrefixLength
- } else if let ipv6Address = self as? IPv6Address {
- return ipv6Address.maxNetworkPrefixLength
- } else {
- fatalError()
- }
- }
-}
-
-extension IPAddressRange: Codable {
- func encode(to encoder: Encoder) throws {
- var container = encoder.singleValueContainer()
-
- try container.encode("\(self)")
- }
-
- init(from decoder: Decoder) throws {
- let container = try decoder.singleValueContainer()
- let value = try container.decode(String.self)
-
- do {
- self = try IPAddressRange(string: value)
- } catch {
- let context = DecodingError.Context(
- codingPath: container.codingPath,
- debugDescription: "Invalid IPAddressRange representation",
- underlyingError: error)
- throw DecodingError.dataCorrupted(context)
- }
- }
-}
-
-enum IPAddressRangeParseError: LocalizedError, Equatable {
- /// A failure to parse the IP address
- case parseAddress(String)
-
- /// A failure to parse the network prefix
- case parsePrefix(String)
-
- var errorDescription: String? {
- switch self {
- case .parseAddress(let addressString):
- return "Failure to parse the IP address: \(addressString)"
- case .parsePrefix(let prefixString):
- return "Failure to parse the network prefix: \(prefixString)"
- }
- }
-}