@@ -148,16 +148,6 @@ public actor PacketTunnelActor {
148
148
// MARK: -
149
149
150
150
extension PacketTunnelActor {
151
- /// Describes the reason for reconnection request.
152
- enum ReconnectReason : Equatable {
153
- /// Initiated by user.
154
- case userInitiated
155
-
156
- /// Initiated by tunnel monitor due to loss of connectivity.
157
- /// Actor will increment the connection attempt counter before picking next relay.
158
- case connectionLoss
159
- }
160
-
161
151
/**
162
152
Start the tunnel.
163
153
@@ -221,7 +211,7 @@ extension PacketTunnelActor {
221
211
- nextRelay: next relay to connect to
222
212
- reason: reason for reconnect
223
213
*/
224
- private func reconnect( to nextRelay: NextRelay , reason: ReconnectReason ) async {
214
+ private func reconnect( to nextRelay: NextRelay , reason: ActorReconnectReason ) async {
225
215
do {
226
216
switch state {
227
217
// There is no connection monitoring going on when exchanging keys.
@@ -256,7 +246,7 @@ extension PacketTunnelActor {
256
246
*/
257
247
private func tryStart(
258
248
nextRelay: NextRelay ,
259
- reason: ReconnectReason = . userInitiated
249
+ reason: ActorReconnectReason = . userInitiated
260
250
) async throws {
261
251
let settings : Settings = try settingsReader. read ( )
262
252
@@ -284,7 +274,7 @@ extension PacketTunnelActor {
284
274
private func tryStartConnection(
285
275
withSettings settings: Settings ,
286
276
nextRelay: NextRelay ,
287
- reason: ReconnectReason
277
+ reason: ActorReconnectReason
288
278
) async throws {
289
279
guard let connectionState = try obfuscateConnection ( nextRelay: nextRelay, settings: settings, reason: reason) ,
290
280
let targetState = state. targetStateForReconnect else { return }
@@ -341,7 +331,7 @@ extension PacketTunnelActor {
341
331
internal func makeConnectionState(
342
332
nextRelay: NextRelay ,
343
333
settings: Settings ,
344
- reason: ReconnectReason
334
+ reason: ActorReconnectReason
345
335
) throws -> State . ConnectionData ? {
346
336
var keyPolicy : State . KeyPolicy = . useCurrent
347
337
var networkReachability = defaultPathObserver. defaultPath? . networkReachability ?? . undetermined
@@ -359,19 +349,23 @@ extension PacketTunnelActor {
359
349
switch state {
360
350
case . initial:
361
351
break
362
- case var . connecting( connectionState) , var . reconnecting( connectionState) :
352
+ // Handle PQ PSK separately as it doesn't interfere with either the `.connecting` or `.reconnecting` states.
353
+ case var . negotiatingPostQuantumKey( connectionState, _) :
363
354
if reason == . connectionLoss {
364
355
connectionState. incrementAttemptCount ( )
365
356
}
366
- fallthrough
367
- case var . negotiatingPostQuantumKey( connectionState, _) :
368
357
let selectedRelay = try callRelaySelector (
369
358
connectionState. selectedRelay,
370
359
connectionState. connectionAttemptCount
371
360
)
372
361
connectionState. selectedRelay = selectedRelay
373
362
connectionState. relayConstraints = settings. relayConstraints
374
363
return connectionState
364
+ case var . connecting( connectionState) , var . reconnecting( connectionState) :
365
+ if reason == . connectionLoss {
366
+ connectionState. incrementAttemptCount ( )
367
+ }
368
+ fallthrough
375
369
case var . connected( connectionState) :
376
370
let selectedRelay = try callRelaySelector (
377
371
connectionState. selectedRelay,
@@ -416,7 +410,7 @@ extension PacketTunnelActor {
416
410
internal func obfuscateConnection(
417
411
nextRelay: NextRelay ,
418
412
settings: Settings ,
419
- reason: ReconnectReason
413
+ reason: ActorReconnectReason
420
414
) throws -> State . ConnectionData ? {
421
415
guard let connectionState = try makeConnectionState ( nextRelay: nextRelay, settings: settings, reason: reason)
422
416
else { return nil }
0 commit comments