summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-11-09 10:25:30 +0100
committerAndrej Mihajlov <and@mullvad.net>2022-11-17 09:13:08 +0100
commit3f2d979c5b140f256b2cee8ba8b5238bda298f1b (patch)
tree62e0a7d8134fea971b4fe2c41d2d876f1814dcda
parentecb7e29d360810d8492715c8fbc524917b2fd1d1 (diff)
downloadmullvadvpn-3f2d979c5b140f256b2cee8ba8b5238bda298f1b.tar.xz
mullvadvpn-3f2d979c5b140f256b2cee8ba8b5238bda298f1b.zip
REST: replace transport registry with transport provider closure
-rw-r--r--ios/MullvadREST/RESTNetworkOperation.swift6
-rw-r--r--ios/MullvadREST/RESTProxy.swift8
-rw-r--r--ios/MullvadREST/RESTProxyFactory.swift4
-rw-r--r--ios/MullvadREST/RESTTransportRegistry.swift34
-rw-r--r--ios/MullvadVPN.xcodeproj/project.pbxproj4
-rw-r--r--ios/MullvadVPN/AppDelegate.swift10
-rw-r--r--ios/MullvadVPN/TransportMonitor/TransportMonitor.swift25
-rw-r--r--ios/PacketTunnel/PacketTunnelProvider.swift8
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()