diff options
| author | Emīls <emils@mullvad.net> | 2023-04-19 11:08:52 +0100 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2023-05-22 10:18:27 +0200 |
| commit | e5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2 (patch) | |
| tree | 4e0c6cf3336c69c1c97b0640d5c06bc27819594c /ios/PacketTunnel | |
| parent | 77f51e690b26346ff4b251c27eb2ece493820d85 (diff) | |
| download | mullvadvpn-e5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2.tar.xz mullvadvpn-e5b73d7abc1b50cfbb9c6f056bf66fef28fef5b2.zip | |
Add shadowsocks-proxy crate
Diffstat (limited to 'ios/PacketTunnel')
| -rw-r--r-- | ios/PacketTunnel/PacketTunnelProvider.swift | 14 | ||||
| -rw-r--r-- | ios/PacketTunnel/TunnelTransportProvider.swift | 55 |
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 + } +} |
