aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Kuck <eric@bluelinelabs.com>2018-12-21 22:41:54 -0600
committerEric Kuck <eric@bluelinelabs.com>2018-12-21 22:57:17 -0600
commit0bec5b04b0b76fef7eeafc6609ffa05c61117df8 (patch)
tree25792a2b8448d529867fd4a8f9370dddf258177a
parentClean up trailing whitespace (diff)
downloadwireguard-apple-0bec5b04b0b76fef7eeafc6609ffa05c61117df8.tar.xz
wireguard-apple-0bec5b04b0b76fef7eeafc6609ffa05c61117df8.zip
All models now Equatable
Signed-off-by: Eric Kuck <eric@bluelinelabs.com>
-rw-r--r--.gitignore1
-rw-r--r--WireGuard/Shared/Model/DNSServer.swift6
-rw-r--r--WireGuard/Shared/Model/Endpoint.swift13
-rw-r--r--WireGuard/Shared/Model/IPAddressRange.swift13
-rw-r--r--WireGuard/Shared/Model/InterfaceConfiguration.swift14
-rw-r--r--WireGuard/Shared/Model/PeerConfiguration.swift21
-rw-r--r--WireGuard/Shared/Model/TunnelConfiguration.swift8
-rw-r--r--WireGuard/WireGuard.xcodeproj/project.pbxproj19
-rw-r--r--WireGuard/WireGuard/Tunnel/TunnelsManager.swift2
-rw-r--r--WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift4
10 files changed, 100 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index d2032062..f7262ca0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@ DerivedData
*.perspectivev3
!default.perspectivev3
xcuserdata
+*.xcscheme
## Other
*.xccheckout
diff --git a/WireGuard/Shared/Model/DNSServer.swift b/WireGuard/Shared/Model/DNSServer.swift
index 710c656c..5a509cba 100644
--- a/WireGuard/Shared/Model/DNSServer.swift
+++ b/WireGuard/Shared/Model/DNSServer.swift
@@ -12,6 +12,12 @@ struct DNSServer {
}
}
+extension DNSServer: Equatable {
+ static func == (lhs: DNSServer, rhs: DNSServer) -> Bool {
+ return lhs.address.rawValue == rhs.address.rawValue
+ }
+}
+
extension DNSServer {
var stringRepresentation: String {
return "\(address)"
diff --git a/WireGuard/Shared/Model/Endpoint.swift b/WireGuard/Shared/Model/Endpoint.swift
index 03de1318..bcc74cf7 100644
--- a/WireGuard/Shared/Model/Endpoint.swift
+++ b/WireGuard/Shared/Model/Endpoint.swift
@@ -14,6 +14,19 @@ struct Endpoint {
}
}
+extension Endpoint: Equatable {
+ static func == (lhs: Endpoint, rhs: Endpoint) -> Bool {
+ return lhs.host == rhs.host && lhs.port == rhs.port
+ }
+}
+
+extension Endpoint: Hashable {
+ func hash(into hasher: inout Hasher) {
+ hasher.combine(host)
+ hasher.combine(port)
+ }
+}
+
extension Endpoint {
var stringRepresentation: String {
switch host {
diff --git a/WireGuard/Shared/Model/IPAddressRange.swift b/WireGuard/Shared/Model/IPAddressRange.swift
index 7d3e5eca..26dccc34 100644
--- a/WireGuard/Shared/Model/IPAddressRange.swift
+++ b/WireGuard/Shared/Model/IPAddressRange.swift
@@ -14,6 +14,19 @@ struct IPAddressRange {
}
}
+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 {
var stringRepresentation: String {
return "\(address)/\(networkPrefixLength)"
diff --git a/WireGuard/Shared/Model/InterfaceConfiguration.swift b/WireGuard/Shared/Model/InterfaceConfiguration.swift
index ef33907a..e28046b4 100644
--- a/WireGuard/Shared/Model/InterfaceConfiguration.swift
+++ b/WireGuard/Shared/Model/InterfaceConfiguration.swift
@@ -2,6 +2,7 @@
// Copyright © 2018 WireGuard LLC. All Rights Reserved.
import Foundation
+import Network
struct InterfaceConfiguration {
var privateKey: Data
@@ -17,3 +18,16 @@ struct InterfaceConfiguration {
self.privateKey = privateKey
}
}
+
+extension InterfaceConfiguration: Equatable {
+ static func == (lhs: InterfaceConfiguration, rhs: InterfaceConfiguration) -> Bool {
+ let lhsAddresses = lhs.addresses.filter { $0.address is IPv4Address } + lhs.addresses.filter { $0.address is IPv6Address }
+ let rhsAddresses = rhs.addresses.filter { $0.address is IPv4Address } + rhs.addresses.filter { $0.address is IPv6Address }
+
+ return lhs.privateKey == rhs.privateKey &&
+ lhsAddresses == rhsAddresses &&
+ lhs.listenPort == rhs.listenPort &&
+ lhs.mtu == rhs.mtu &&
+ lhs.dns == rhs.dns
+ }
+}
diff --git a/WireGuard/Shared/Model/PeerConfiguration.swift b/WireGuard/Shared/Model/PeerConfiguration.swift
index 2e969e6c..a684fa69 100644
--- a/WireGuard/Shared/Model/PeerConfiguration.swift
+++ b/WireGuard/Shared/Model/PeerConfiguration.swift
@@ -25,3 +25,24 @@ struct PeerConfiguration {
}
}
}
+
+extension PeerConfiguration: Equatable {
+ static func == (lhs: PeerConfiguration, rhs: PeerConfiguration) -> Bool {
+ return lhs.publicKey == rhs.publicKey &&
+ lhs.preSharedKey == rhs.preSharedKey &&
+ Set(lhs.allowedIPs) == Set(rhs.allowedIPs) &&
+ lhs.endpoint == rhs.endpoint &&
+ lhs.persistentKeepAlive == rhs.persistentKeepAlive
+ }
+}
+
+extension PeerConfiguration: Hashable {
+ func hash(into hasher: inout Hasher) {
+ hasher.combine(publicKey)
+ hasher.combine(preSharedKey)
+ hasher.combine(Set(allowedIPs))
+ hasher.combine(endpoint)
+ hasher.combine(persistentKeepAlive)
+
+ }
+}
diff --git a/WireGuard/Shared/Model/TunnelConfiguration.swift b/WireGuard/Shared/Model/TunnelConfiguration.swift
index bee3c9dc..532212e5 100644
--- a/WireGuard/Shared/Model/TunnelConfiguration.swift
+++ b/WireGuard/Shared/Model/TunnelConfiguration.swift
@@ -22,3 +22,11 @@ final class TunnelConfiguration {
}
}
}
+
+extension TunnelConfiguration: Equatable {
+ static func == (lhs: TunnelConfiguration, rhs: TunnelConfiguration) -> Bool {
+ return lhs.name == rhs.name &&
+ lhs.interface == rhs.interface &&
+ Set(lhs.peers) == Set(rhs.peers)
+ }
+}
diff --git a/WireGuard/WireGuard.xcodeproj/project.pbxproj b/WireGuard/WireGuard.xcodeproj/project.pbxproj
index 7bdc5e87..2ef4bd28 100644
--- a/WireGuard/WireGuard.xcodeproj/project.pbxproj
+++ b/WireGuard/WireGuard.xcodeproj/project.pbxproj
@@ -477,6 +477,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 6FF4AC26211EC472002C96EB /* Build configuration list for PBXNativeTarget "WireGuard" */;
buildPhases = (
+ 5F784E5721CDF6DD00B8D9A0 /* Strip Trailing Whitespace */,
5F45417A21C0902400994C13 /* Swiftlint */,
6B87860E2189532500C099FB /* Extract wireguard-go Version */,
6FF4AC10211EC46F002C96EB /* Sources */,
@@ -606,6 +607,24 @@
shellPath = /bin/sh;
shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
};
+ 5F784E5721CDF6DD00B8D9A0 /* Strip Trailing Whitespace */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Strip Trailing Whitespace";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "find . -name '*.swift' -exec sed -i '' -E 's/[[:space:]]+$//g' {} +\n";
+ };
6B87860E2189532500C099FB /* Extract wireguard-go Version */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
diff --git a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
index 86f57d94..8b5311da 100644
--- a/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
+++ b/WireGuard/WireGuard/Tunnel/TunnelsManager.swift
@@ -64,7 +64,7 @@ class TunnelsManager {
}
let newTunnels = managers.map { TunnelContainer(tunnel: $0) }.sorted { $0.name < $1.name }
- let hasChanges = self.tunnels.map { $0.name } != newTunnels.map { $0.name }
+ let hasChanges = self.tunnels.map { $0.tunnelConfiguration } != newTunnels.map { $0.tunnelConfiguration }
if hasChanges {
self.tunnels = newTunnels
completionHandler(true)
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
index e44d2985..ca8902f2 100644
--- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -13,6 +13,10 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
private var lastFirstInterface: NWInterface?
private var packetTunnelSettingsGenerator: PacketTunnelSettingsGenerator?
+ deinit {
+ networkMonitor?.cancel()
+ }
+
override func startTunnel(options: [String: NSObject]?, completionHandler startTunnelCompletionHandler: @escaping (Error?) -> Void) {
let activationAttemptId = options?["activationAttemptId"] as? String
let errorNotifier = ErrorNotifier(activationAttemptId: activationAttemptId)