From 4463ca0d43cbf60b9e0df891c54bdecb4af06013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=27=C3=A9lectron=20rare?= <108685187+electron-rare@users.noreply.github.com> Date: Mon, 18 May 2026 17:10:51 +0200 Subject: [PATCH] fix(ios): guard USBServer listener and payload Report .idle (not .listening) when NWListener creation fails, and drop payloads larger than the demuxer's 8 MB cap so the receiver never silently discards an oversized frame. --- .../Sources/ARBodyTracker/USBServer.swift | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/iphone-arbody/ARBodyTracker.swiftpm/Sources/ARBodyTracker/USBServer.swift b/iphone-arbody/ARBodyTracker.swiftpm/Sources/ARBodyTracker/USBServer.swift index 3406c7b..8ef902f 100644 --- a/iphone-arbody/ARBodyTracker.swiftpm/Sources/ARBodyTracker/USBServer.swift +++ b/iphone-arbody/ARBodyTracker.swiftpm/Sources/ARBodyTracker/USBServer.swift @@ -17,12 +17,16 @@ final class USBServer { func start() { let params = NWParameters.tcp params.allowLocalEndpointReuse = true - listener = try? NWListener(using: params, - on: NWEndpoint.Port(rawValue: Self.port)!) - listener?.newConnectionHandler = { [weak self] conn in + guard let l = try? NWListener(using: params, + on: NWEndpoint.Port(rawValue: Self.port)!) else { + onState?(.idle) + return + } + listener = l + l.newConnectionHandler = { [weak self] conn in self?.adopt(conn) } - listener?.start(queue: queue) + l.start(queue: queue) onState?(.listening) } @@ -43,6 +47,8 @@ final class USBServer { func send(tag: FrameTag, pid: Int16, timestamp: Double, payload: Data) { guard let conn = connection else { return } + guard payload.count <= Int(StreamDemuxer.maxPayloadLength) + else { return } let header = FrameHeader(tag: tag, pid: pid, timestamp: timestamp, length: UInt32(payload.count)) conn.send(content: header.encoded() + payload,