diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-11-09 10:25:30 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-11-17 09:13:08 +0100 |
| commit | 3f2d979c5b140f256b2cee8ba8b5238bda298f1b (patch) | |
| tree | 62e0a7d8134fea971b4fe2c41d2d876f1814dcda | |
| parent | ecb7e29d360810d8492715c8fbc524917b2fd1d1 (diff) | |
| download | mullvadvpn-3f2d979c5b140f256b2cee8ba8b5238bda298f1b.tar.xz mullvadvpn-3f2d979c5b140f256b2cee8ba8b5238bda298f1b.zip | |
REST: replace transport registry with transport provider closure
| -rw-r--r-- | ios/MullvadREST/RESTNetworkOperation.swift | 6 | ||||
| -rw-r--r-- | ios/MullvadREST/RESTProxy.swift | 8 | ||||
| -rw-r--r-- | ios/MullvadREST/RESTProxyFactory.swift | 4 | ||||
| -rw-r--r-- | ios/MullvadREST/RESTTransportRegistry.swift | 34 | ||||
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 4 | ||||
| -rw-r--r-- | ios/MullvadVPN/AppDelegate.swift | 10 | ||||
| -rw-r--r-- | ios/MullvadVPN/TransportMonitor/TransportMonitor.swift | 25 | ||||
| -rw-r--r-- | ios/PacketTunnel/PacketTunnelProvider.swift | 8 |
8 files changed, 34 insertions, 65 deletions
diff --git a/ios/MullvadREST/RESTNetworkOperation.swift b/ios/MullvadREST/RESTNetworkOperation.swift index 3e188094c9..9c8e0cbf2a 100644 --- a/ios/MullvadREST/RESTNetworkOperation.swift +++ b/ios/MullvadREST/RESTNetworkOperation.swift @@ -17,7 +17,7 @@ extension REST { private let responseHandler: AnyResponseHandler<Success> private let logger: Logger - private let transportRegistry: TransportRegistry + private let transportProvider: () -> RESTTransport? private let addressCacheStore: AddressCache private var networkTask: Cancellable? @@ -41,7 +41,7 @@ extension REST { completionHandler: @escaping CompletionHandler ) { addressCacheStore = configuration.addressCacheStore - transportRegistry = configuration.transportRegistry + transportProvider = configuration.transportProvider self.retryStrategy = retryStrategy retryDelayIterator = retryStrategy.makeDelayIterator() self.requestHandler = requestHandler @@ -139,7 +139,7 @@ extension REST { private func didReceiveURLRequest(_ restRequest: REST.Request, endpoint: AnyIPEndpoint) { dispatchPrecondition(condition: .onQueue(dispatchQueue)) - guard let transport = transportRegistry.getTransport() else { + guard let transport = transportProvider() else { logger.error("Failed to obtain transport.") finish(completion: .failure(.transport(NoTransportError()))) return diff --git a/ios/MullvadREST/RESTProxy.swift b/ios/MullvadREST/RESTProxy.swift index 7c4e336a34..fe9bf7386a 100644 --- a/ios/MullvadREST/RESTProxy.swift +++ b/ios/MullvadREST/RESTProxy.swift @@ -68,14 +68,14 @@ extension REST { } public class ProxyConfiguration { - public let transportRegistry: TransportRegistry + public let transportProvider: () -> RESTTransport? public let addressCacheStore: AddressCache public init( - transportRegistry: TransportRegistry, + transportProvider: @escaping () -> RESTTransport?, addressCacheStore: AddressCache ) { - self.transportRegistry = transportRegistry + self.transportProvider = transportProvider self.addressCacheStore = addressCacheStore } } @@ -90,7 +90,7 @@ extension REST { self.accessTokenManager = accessTokenManager super.init( - transportRegistry: proxyConfiguration.transportRegistry, + transportProvider: proxyConfiguration.transportProvider, addressCacheStore: proxyConfiguration.addressCacheStore ) } diff --git a/ios/MullvadREST/RESTProxyFactory.swift b/ios/MullvadREST/RESTProxyFactory.swift index 211d32b9aa..6bc793a722 100644 --- a/ios/MullvadREST/RESTProxyFactory.swift +++ b/ios/MullvadREST/RESTProxyFactory.swift @@ -13,11 +13,11 @@ extension REST { public let configuration: AuthProxyConfiguration public class func makeProxyFactory( - transportRegistry: REST.TransportRegistry, + transportProvider: @escaping () -> RESTTransport?, addressCache: AddressCache ) -> ProxyFactory { let basicConfiguration = REST.ProxyConfiguration( - transportRegistry: transportRegistry, + transportProvider: transportProvider, addressCacheStore: addressCache ) diff --git a/ios/MullvadREST/RESTTransportRegistry.swift b/ios/MullvadREST/RESTTransportRegistry.swift deleted file mode 100644 index 1dcac36962..0000000000 --- a/ios/MullvadREST/RESTTransportRegistry.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// RESTTransportRegistry.swift -// MullvadREST -// -// Created by Sajad Vishkai on 2022-10-06. -// Copyright © 2022 Mullvad VPN AB. All rights reserved. -// - -import Foundation - -extension REST { - public final class TransportRegistry { - private var transport: RESTTransport? - private let nslock = NSLock() - - public init(transport: RESTTransport?) { - self.transport = transport - } - - public func setTransport(_ transport: RESTTransport) { - nslock.lock() - defer { nslock.unlock() } - - self.transport = transport - } - - public func getTransport() -> RESTTransport? { - nslock.lock() - defer { nslock.unlock() } - - return transport - } - } -} diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index 9f6bd376f1..cd0e4f5d84 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -43,7 +43,6 @@ 06799AE728F98E4800ACD94E /* RESTURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE66528F83CA30033DD93 /* RESTURLSession.swift */; }; 06799AEA28F98E4800ACD94E /* RESTProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE66E28F83CA40033DD93 /* RESTProxy.swift */; }; 06799AEC28F98E4800ACD94E /* RESTTaskIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67528F83CA40033DD93 /* RESTTaskIdentifier.swift */; }; - 06799AED28F98E4800ACD94E /* RESTTransportRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE66D28F83CA40033DD93 /* RESTTransportRegistry.swift */; }; 06799AEE28F98E4800ACD94E /* URLSessionTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67C28F83CA50033DD93 /* URLSessionTransport.swift */; }; 06799AEF28F98E4800ACD94E /* RESTRetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67628F83CA40033DD93 /* RESTRetryStrategy.swift */; }; 06799AF028F98E4800ACD94E /* REST.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06FAE67B28F83CA50033DD93 /* REST.swift */; }; @@ -539,7 +538,6 @@ 06FAE66A28F83CA30033DD93 /* RESTRequestFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTRequestFactory.swift; sourceTree = "<group>"; }; 06FAE66B28F83CA30033DD93 /* SSLPinningURLSessionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SSLPinningURLSessionDelegate.swift; sourceTree = "<group>"; }; 06FAE66C28F83CA40033DD93 /* RESTCoding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTCoding.swift; sourceTree = "<group>"; }; - 06FAE66D28F83CA40033DD93 /* RESTTransportRegistry.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTTransportRegistry.swift; sourceTree = "<group>"; }; 06FAE66E28F83CA40033DD93 /* RESTProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTProxy.swift; sourceTree = "<group>"; }; 06FAE66F28F83CA40033DD93 /* RESTNetworkOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTNetworkOperation.swift; sourceTree = "<group>"; }; 06FAE67028F83CA40033DD93 /* RESTAuthenticationProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RESTAuthenticationProxy.swift; sourceTree = "<group>"; }; @@ -999,7 +997,6 @@ 5897F1732913EAF800AF5695 /* ExponentialBackoff.swift */, 06FAE67528F83CA40033DD93 /* RESTTaskIdentifier.swift */, 06FAE67D28F83CA50033DD93 /* RESTTransport.swift */, - 06FAE66D28F83CA40033DD93 /* RESTTransportRegistry.swift */, 06FAE66528F83CA30033DD93 /* RESTURLSession.swift */, 06FAE67728F83CA40033DD93 /* ServerRelaysResponse.swift */, 06FAE66B28F83CA30033DD93 /* SSLPinningURLSessionDelegate.swift */, @@ -2024,7 +2021,6 @@ 06799AF328F98E4800ACD94E /* RESTAuthenticationProxy.swift in Sources */, 06799AE628F98E4800ACD94E /* ServerRelaysResponse.swift in Sources */, 06799AF128F98E4800ACD94E /* RESTAPIProxy.swift in Sources */, - 06799AED28F98E4800ACD94E /* RESTTransportRegistry.swift in Sources */, 06799AE528F98E4800ACD94E /* HTTP.swift in Sources */, 06799AE028F98E4800ACD94E /* RESTCoding.swift in Sources */, 06799AFC28F98EE300ACD94E /* AddressCache.swift in Sources */, diff --git a/ios/MullvadVPN/AppDelegate.swift b/ios/MullvadVPN/AppDelegate.swift index 1d5141bc61..00165f9021 100644 --- a/ios/MullvadVPN/AppDelegate.swift +++ b/ios/MullvadVPN/AppDelegate.swift @@ -63,9 +63,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD isReadOnly: false )! - let transportRegistry = REST.TransportRegistry(transport: nil) proxyFactory = REST.ProxyFactory.makeProxyFactory( - transportRegistry: transportRegistry, + transportProvider: { [weak self] in + return self?.transportMonitor.transport + }, addressCache: addressCache ) @@ -94,10 +95,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD accountsProxy: accountsProxy ) - transportMonitor = TransportMonitor( - tunnelManager: tunnelManager, - transportRegistry: transportRegistry - ) + transportMonitor = TransportMonitor(tunnelManager: tunnelManager) #if targetEnvironment(simulator) // Configure mock tunnel provider on simulator diff --git a/ios/MullvadVPN/TransportMonitor/TransportMonitor.swift b/ios/MullvadVPN/TransportMonitor/TransportMonitor.swift index 9b98cecfe0..972faef6b0 100644 --- a/ios/MullvadVPN/TransportMonitor/TransportMonitor.swift +++ b/ios/MullvadVPN/TransportMonitor/TransportMonitor.swift @@ -11,13 +11,21 @@ import MullvadREST class TransportMonitor: TunnelObserver { private let tunnelManager: TunnelManager - private let transportRegistry: REST.TransportRegistry private let packetTunnelTransport: PacketTunnelTransport private let urlSessionTransport: REST.URLSessionTransport - init(tunnelManager: TunnelManager, transportRegistry: REST.TransportRegistry) { + private let nslock = NSLock() + private var _transport: RESTTransport? + + var transport: RESTTransport? { + nslock.lock() + defer { nslock.unlock() } + + return _transport + } + + init(tunnelManager: TunnelManager) { self.tunnelManager = tunnelManager - self.transportRegistry = transportRegistry packetTunnelTransport = PacketTunnelTransport(tunnelManager: tunnelManager) urlSessionTransport = REST.URLSessionTransport(urlSession: REST.makeURLSession()) @@ -51,11 +59,12 @@ class TransportMonitor: TunnelObserver { // MARK: - Private private func setTransports() { - transportRegistry.setTransport( - stateUpdated( - tunnelState: tunnelManager.tunnelStatus.state, - deviceState: tunnelManager.deviceState - ) + nslock.lock() + defer { nslock.unlock() } + + _transport = stateUpdated( + tunnelState: tunnelManager.tunnelStatus.state, + deviceState: tunnelManager.deviceState ) } diff --git a/ios/PacketTunnel/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider.swift index d91f6b1193..b83271ad82 100644 --- a/ios/PacketTunnel/PacketTunnelProvider.swift +++ b/ios/PacketTunnel/PacketTunnelProvider.swift @@ -113,11 +113,11 @@ class PacketTunnelProvider: NEPacketTunnelProvider, TunnelMonitorDelegate { securityGroupIdentifier: ApplicationConfiguration.securityGroupIdentifier, isReadOnly: true )! - let transportRegistry = REST.TransportRegistry( - transport: REST.URLSessionTransport(urlSession: urlSession) - ) + let urlSessionTransport = REST.URLSessionTransport(urlSession: urlSession) let proxyFactory = REST.ProxyFactory.makeProxyFactory( - transportRegistry: transportRegistry, + transportProvider: { () -> RESTTransport? in + return urlSessionTransport + }, addressCache: addressCache ) accountsProxy = proxyFactory.createAccountsProxy() |
