diff options
Diffstat (limited to 'ios/MullvadRustRuntime')
| -rw-r--r-- | ios/MullvadRustRuntime/TunnelObfuscator.swift | 40 | ||||
| -rw-r--r-- | ios/MullvadRustRuntime/include/mullvad_rust_runtime.h | 31 |
2 files changed, 42 insertions, 29 deletions
diff --git a/ios/MullvadRustRuntime/TunnelObfuscator.swift b/ios/MullvadRustRuntime/TunnelObfuscator.swift index 495930b222..6f74089265 100644 --- a/ios/MullvadRustRuntime/TunnelObfuscator.swift +++ b/ios/MullvadRustRuntime/TunnelObfuscator.swift @@ -14,7 +14,7 @@ import Network public enum TunnelObfuscationProtocol { case udpOverTcp case shadowsocks - case quic + case quic(hostname: String, token: String) } public protocol TunnelObfuscation { @@ -74,22 +74,34 @@ public final class TunnelObfuscator: TunnelObfuscation { stateLock.withLock { guard !isStarted else { return } - let obfuscationProtocol = switch obfuscationProtocol { - case .udpOverTcp: TunnelObfuscatorProtocol(0) - case .shadowsocks: TunnelObfuscatorProtocol(1) - case .quic: TunnelObfuscatorProtocol(2) - } - let result = withUnsafeMutablePointer(to: &proxyHandle) { proxyHandlePointer in let addressData = remoteAddress.rawValue - return start_tunnel_obfuscator_proxy( - addressData.map { $0 }, - UInt(addressData.count), - tcpPort, - obfuscationProtocol, - proxyHandlePointer - ) + return switch obfuscationProtocol { + case .udpOverTcp: + start_udp2tcp_obfuscator_proxy( + addressData.map { $0 }, + UInt(addressData.count), + tcpPort, + proxyHandlePointer + ) + case .shadowsocks: + start_shadowsocks_obfuscator_proxy( + addressData.map { $0 }, + UInt(addressData.count), + tcpPort, + proxyHandlePointer + ) + case let .quic(hostname, token): + start_quic_obfuscator_proxy( + addressData.map { $0 }, + UInt(addressData.count), + tcpPort, + hostname, + token, + proxyHandlePointer + ) + } } assert(result == 0) diff --git a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h index d4c0bf334f..ad15b43d39 100644 --- a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h +++ b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h @@ -17,16 +17,6 @@ enum SwiftAccessMethodKind { }; typedef uint8_t SwiftAccessMethodKind; -/** - * SAFETY: `TunnelObfuscatorProtocol` values must either be `0` or `1` - */ -enum TunnelObfuscatorProtocol { - UdpOverTcp = 0, - Shadowsocks, - Quic, -}; -typedef uint8_t TunnelObfuscatorProtocol; - typedef struct ApiContext ApiContext; /** @@ -930,10 +920,21 @@ int32_t start_shadowsocks_proxy(const uint8_t *forward_address, */ int32_t stop_shadowsocks_proxy(struct ProxyHandle *proxy_config); -int32_t start_tunnel_obfuscator_proxy(const uint8_t *peer_address, - uintptr_t peer_address_len, - uint16_t peer_port, - TunnelObfuscatorProtocol obfuscation_protocol, - struct ProxyHandle *proxy_handle); +int32_t start_udp2tcp_obfuscator_proxy(const uint8_t *peer_address, + uintptr_t peer_address_len, + uint16_t peer_port, + struct ProxyHandle *proxy_handle); + +int32_t start_shadowsocks_obfuscator_proxy(const uint8_t *peer_address, + uintptr_t peer_address_len, + uint16_t peer_port, + struct ProxyHandle *proxy_handle); + +int32_t start_quic_obfuscator_proxy(const uint8_t *peer_address, + uintptr_t peer_address_len, + uint16_t peer_port, + const char *hostname, + const char *token, + struct ProxyHandle *proxy_handle); int32_t stop_tunnel_obfuscator_proxy(struct ProxyHandle *proxy_handle); |
