diff options
| author | Emīls <emils@mullvad.net> | 2025-03-05 09:22:37 +0100 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2025-03-05 09:46:37 +0100 |
| commit | a69ab9e4291f93268a4572d00a8ab96a067a97ec (patch) | |
| tree | d87db1db2ba09d14a14c3f7e830f71baff307f2c | |
| parent | 085ee06b24180e105cad7fcbd0ead7c9d547b343 (diff) | |
| download | mullvadvpn-repro-tcp-connection-not-working.tar.xz mullvadvpn-repro-tcp-connection-not-working.zip | |
Try spawning TCP connection in tunnelrepro-tcp-connection-not-working
| -rw-r--r-- | ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift index 5ce1d92eff..73c95f5654 100644 --- a/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift +++ b/ios/PacketTunnel/PacketTunnelProvider/PacketTunnelProvider.swift @@ -30,6 +30,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable { private let tunnelSettingsUpdater: SettingsUpdater! private var encryptedDNSTransport: EncryptedDNSTransport! private var migrationManager: MigrationManager! + private var connection: InTunnelConnection? let migrationFailureIterator = REST.RetryStrategy.failedMigrationRecovery.makeDelayIterator() private let tunnelSettingsListener = TunnelSettingsListener() @@ -87,6 +88,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider, @unchecked Sendable { relayCache: ipOverrideWrapper ) + actor = PacketTunnelActor( timings: PacketTunnelActorTimings(), tunnelAdapter: adapter, @@ -321,7 +323,13 @@ extension PacketTunnelProvider { observedConnectionState, privateKey: privateKey ) - case .initial, .connected, .disconnecting, .disconnected, .error: + case .connected(_): + if #available(iOSApplicationExtension 18.0, *) { + if let virtualInterface { + connection = InTunnelConnection(logger: providerLogger, bindTo: virtualInterface) + } + } + case .initial, .disconnecting, .disconnected, .error: break } } @@ -405,3 +413,20 @@ extension PacketTunnelProvider: EphemeralPeerReceiving { actor.reconnect(to: .random, reconnectReason: .connectionLoss) } } +class InTunnelConnection { + let connection: NWConnection + let queue: DispatchQueue + + init(logger: Logger, bindTo: NWInterface) { + let parameters = NWParameters.tcp + parameters.requiredInterface = bindTo + self.connection = NWConnection(to: Network.NWEndpoint.hostPort(host: "10.64.0.1", port: 1337), using: parameters) + self.connection.stateUpdateHandler = { state in + logger.critical("TCP connection state changed to \(state)") + } + self.queue = DispatchQueue(label: "mullvad.net.NWConnection") + self.connection.start(queue: self.queue) + + } +} + |
