summaryrefslogtreecommitdiffhomepage
path: root/ios/PacketTunnel
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2023-04-19 11:08:52 +0100
committerEmīls <emils@mullvad.net>2023-05-22 10:18:27 +0200
commite5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2 (patch)
tree4e0c6cf3336c69c1c97b0640d5c06bc27819594c /ios/PacketTunnel
parent77f51e690b26346ff4b251c27eb2ece493820d85 (diff)
downloadmullvadvpn-e5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2.tar.xz
mullvadvpn-e5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2.zip
Add shadowsocks-proxy crate
Diffstat (limited to 'ios/PacketTunnel')
-rw-r--r--ios/PacketTunnel/PacketTunnelProvider.swift14
-rw-r--r--ios/PacketTunnel/TunnelTransportProvider.swift55
2 files changed, 65 insertions, 4 deletions
diff --git a/ios/PacketTunnel/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider.swift
index 4a0a341aba..fcae0e4ec4 100644
--- a/ios/PacketTunnel/PacketTunnelProvider.swift
+++ b/ios/PacketTunnel/PacketTunnelProvider.swift
@@ -152,14 +152,20 @@ class PacketTunnelProvider: NEPacketTunnelProvider, TunnelMonitorDelegate {
let urlSession = REST.makeURLSession()
let urlSessionTransport = REST.URLSessionTransport(urlSession: urlSession)
+ let transportProvider = TunnelTransportProvider(
+ urlSessionTransport: urlSessionTransport,
+ relayCache: relayCache
+ )
+
let proxyFactory = REST.ProxyFactory.makeProxyFactory(
- transportProvider: { () -> RESTTransport? in
- return urlSessionTransport
- },
+ transportProvider: { transportProvider },
addressCache: addressCache
)
- urlRequestProxy = URLRequestProxy(urlSession: urlSession, dispatchQueue: dispatchQueue)
+ urlRequestProxy = URLRequestProxy(
+ dispatchQueue: dispatchQueue,
+ transportProvider: { transportProvider }
+ )
accountsProxy = proxyFactory.createAccountsProxy()
devicesProxy = proxyFactory.createDevicesProxy()
diff --git a/ios/PacketTunnel/TunnelTransportProvider.swift b/ios/PacketTunnel/TunnelTransportProvider.swift
new file mode 100644
index 0000000000..85e0600c49
--- /dev/null
+++ b/ios/PacketTunnel/TunnelTransportProvider.swift
@@ -0,0 +1,55 @@
+//
+// TunnelTransportProvider.swift
+// PacketTunnel
+//
+// Created by Marco Nikic on 2023-04-25.
+// Copyright © 2023 Mullvad VPN AB. All rights reserved.
+//
+
+import Foundation
+import Logging
+import MullvadREST
+import RelayCache
+import RelaySelector
+
+final class TunnelTransportProvider: RESTTransportProvider {
+ private let urlSessionTransport: REST.URLSessionTransport
+ private let relayCache: RelayCache
+ private let logger = Logger(label: "TunnelTransportProvider")
+
+ init(urlSessionTransport: REST.URLSessionTransport, relayCache: RelayCache) {
+ self.urlSessionTransport = urlSessionTransport
+ self.relayCache = relayCache
+ }
+
+ func transport() -> MullvadREST.RESTTransport? {
+ urlSessionTransport
+ }
+
+ func shadowSocksTransport() -> MullvadREST.RESTTransport? {
+ do {
+ let cachedRelays = try relayCache.read()
+ let shadowSocksConfiguration = RelaySelector.getShadowsocksTCPBridge(relays: cachedRelays.relays)
+ let shadowSocksBridgeRelay = RelaySelector.getShadowSocksRelay(relays: cachedRelays.relays)
+
+ guard let shadowSocksConfiguration = shadowSocksConfiguration,
+ let shadowSocksBridgeRelay = shadowSocksBridgeRelay
+ else {
+ logger.error("Could not get shadow socks bridge information.")
+ return nil
+ }
+
+ let shadowSocksURLSession = urlSessionTransport.urlSession
+ let shadowSocksTransport = REST.URLSessionShadowSocksTransport(
+ urlSession: shadowSocksURLSession,
+ shadowSocksConfiguration: shadowSocksConfiguration,
+ shadowSocksBridgeRelay: shadowSocksBridgeRelay
+ )
+
+ return shadowSocksTransport
+ } catch {
+ logger.error(error: error)
+ }
+ return nil
+ }
+}