diff --git a/NearbyShare/Connection/NearbyConnection.swift b/NearbyShare/Connection/NearbyConnection.swift index e40ddc4..fedc789 100644 --- a/NearbyShare/Connection/NearbyConnection.swift +++ b/NearbyShare/Connection/NearbyConnection.swift @@ -46,7 +46,7 @@ class NearbyConnection { private var dataTransferInactivityTimer: DispatchSourceTimer? private let ackInterval: TimeInterval = 5 - private let ackTimeoutInterval: TimeInterval = 30 + private let ackTimeoutInterval: TimeInterval = 60 private var lastKeepAliveFrameSent = Date() // UKEY2-related state @@ -424,14 +424,29 @@ class NearbyConnection { let chunk = payloadTransfer.payloadChunk guard header.hasType, header.hasID else { throw NearbyError.requiredFieldMissing("payloadHeader.type|id") } - guard payloadTransfer.hasPayloadChunk, chunk.hasOffset, chunk.hasFlags else { - - if payloadTransfer.controlMessage.event == .payloadCanceled { + + if payloadTransfer.hasPayloadChunk { + guard chunk.hasOffset, chunk.hasFlags else { + log("[NearbyConnection \(self.id)] Payload transfer chunk is missing offset or flags. Frame is \(payloadTransfer.debugDescription)") + throw NearbyError.requiredFieldMissing("payloadChunk.offset|flags") + } + } else if payloadTransfer.hasControlMessage || payloadTransfer.packetType == .control { + switch payloadTransfer.controlMessage.event { + case .payloadCanceled: log("[NearbyConnection \(self.id)] Cancel control frame received.") throw NearbyError.canceled(reason: .userCanceled) + case .payloadReceivedAck: + // Legacy peers can send ACKs as control events instead of packetType=.payloadAck. + return + case .payloadError: + throw NearbyError.protocolError("Peer reported payload error") + case .unknownEventType: + return } - - log("[NearbyConnection \(self.id)] Payload transfer chunk is missing offset or flags. Frame is \(payloadTransfer.debugDescription)") + } else if payloadTransfer.packetType == .payloadAck { + return + } else { + log("[NearbyConnection \(self.id)] Payload transfer frame missing supported payload content. Frame is \(payloadTransfer.debugDescription)") throw NearbyError.requiredFieldMissing("payloadChunk.offset|flags") } diff --git a/QuickDrop.xcodeproj/project.pbxproj b/QuickDrop.xcodeproj/project.pbxproj index d1be771..e42a004 100644 --- a/QuickDrop.xcodeproj/project.pbxproj +++ b/QuickDrop.xcodeproj/project.pbxproj @@ -1773,8 +1773,8 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; - SHARED_BUILD = 139; - SHARED_VERSION = 3.0.1; + SHARED_BUILD = 142; + SHARED_VERSION = 3.0.3; STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_EMIT_LOC_STRINGS = YES; @@ -1836,8 +1836,8 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; - SHARED_BUILD = 139; - SHARED_VERSION = 3.0.1; + SHARED_BUILD = 142; + SHARED_VERSION = 3.0.3; STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_EMIT_LOC_STRINGS = YES; diff --git a/QuickDrop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/QuickDrop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 56f02ad..416beaa 100644 --- a/QuickDrop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/QuickDrop.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -52,7 +52,7 @@ "location" : "https://github.com/leonboe1/LUI.git", "state" : { "branch" : "main", - "revision" : "7554164b073a5d603e2e7fe92a55159658c67c8e" + "revision" : "939a58567a77fc9c9bb018ab7c4d6a9795c80f15" } }, {