From cffaabc076368c345ff865b492181baf97b76715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6ttger?= Date: Sun, 8 Mar 2026 15:39:17 +0100 Subject: [PATCH] Fail fast on outbound rejection --- .../Connection/OutboundNearbyConnection.swift | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/NearbyShare/Connection/OutboundNearbyConnection.swift b/NearbyShare/Connection/OutboundNearbyConnection.swift index 9a76cd6..8e2fa96 100644 --- a/NearbyShare/Connection/OutboundNearbyConnection.swift +++ b/NearbyShare/Connection/OutboundNearbyConnection.swift @@ -157,10 +157,20 @@ class OutboundNearbyConnection: NearbyConnection { return } if frame.hasV1, frame.v1.hasType { - if frame.v1.type == .progressUpdate || frame.v1.type == .response { + if frame.v1.type == .progressUpdate { log("[OutboundNearbyConnection \(self.id)] Ignoring duplicate/intermediate transfer setup frame \(frame.v1.type) while waiting for pairedKeyEncryption.") return } + if frame.v1.type == .response { + let status = frame.v1.connectionResponse.status + if status == .accept { + log("[OutboundNearbyConnection \(self.id)] Ignoring out-of-order accept response while waiting for pairedKeyEncryption.") + return + } + log("[OutboundNearbyConnection \(self.id)] Received terminal response \(status) while waiting for pairedKeyEncryption.") + try processConsent(frame: frame) + return + } } throw NearbyError.requiredFieldMissing("sharingNearbyFrame.v1.pairedKeyEncryption") case .sentPairedKeyResult: @@ -169,10 +179,20 @@ class OutboundNearbyConnection: NearbyConnection { return } if frame.hasV1, frame.v1.hasType { - if frame.v1.type == .pairedKeyEncryption || frame.v1.type == .progressUpdate || frame.v1.type == .response { + if frame.v1.type == .pairedKeyEncryption || frame.v1.type == .progressUpdate { log("[OutboundNearbyConnection \(self.id)] Ignoring duplicate/intermediate transfer setup frame \(frame.v1.type) while waiting for pairedKeyResult.") return } + if frame.v1.type == .response { + let status = frame.v1.connectionResponse.status + if status == .accept { + log("[OutboundNearbyConnection \(self.id)] Ignoring out-of-order accept response while waiting for pairedKeyResult.") + return + } + log("[OutboundNearbyConnection \(self.id)] Received terminal response \(status) while waiting for pairedKeyResult.") + try processConsent(frame: frame) + return + } } throw NearbyError.requiredFieldMissing("sharingNearbyFrame.v1.pairedKeyResult") case .sentIntroduction: