summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2025-03-05 09:22:37 +0100
committerEmīls <emils@mullvad.net>2025-03-05 09:46:37 +0100
commita69ab9e4291f93268a4572d00a8ab96a067a97ec (patch)
treed87db1db2ba09d14a14c3f7e830f71baff307f2c
parent085ee06b24180e105cad7fcbd0ead7c9d547b343 (diff)
downloadmullvadvpn-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.swift27
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)
+
+ }
+}
+