Skip to content

Commit 76d7587

Browse files
authored
Merge pull request #46 from apple/agnosticdev/UsableDatagramFrameSize
SwiftQUIC: Expose remote datagram frame size through connection metadata
2 parents 8d21798 + 72a6981 commit 76d7587

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

Sources/SwiftNetwork/Protocols/QUICConnectionProtocol.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,7 @@ public struct QUICConnectionProtocol: NetworkProtocol {
753753
public var applicationErrorReason: String?
754754

755755
public var activeConnectionIDLimit: Int = 0
756+
public var remoteMaxDatagramFrameSize: UInt16 = 0
756757
#if NETWORK_PRIVATE
757758
var privateStorage = QUICConnectionMetadataPrivateStorage()
758759
#endif

Sources/SwiftNetwork/QUIC/QUICConnection.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4246,13 +4246,15 @@ public final class QUICConnection: ManyToManyApplicationStreamProtocol,
42464246
}
42474247
guard let remoteTPMaxDatagramFrameSize else {
42484248
self.remoteMaxDatagramFrameSize = 0
4249+
self.connectionMetadata.remoteMaxDatagramFrameSize = 0
42494250
return
42504251
}
42514252
if remoteTPMaxDatagramFrameSize > TransportParameters.maxDatagramFrameSize {
42524253
self.remoteMaxDatagramFrameSize = Int(TransportParameters.maxDatagramFrameSize)
42534254
} else {
42544255
self.remoteMaxDatagramFrameSize = remoteTPMaxDatagramFrameSize
42554256
}
4257+
self.connectionMetadata.remoteMaxDatagramFrameSize = UInt16(truncatingIfNeeded: remoteMaxDatagramFrameSize)
42564258
}
42574259

42584260
private func discardKeys(keyState: PacketKeyState, discardRecoveryState: Bool = true) {

Tests/SwiftNetworkTests/SwiftNetworkQUICHarnessTests.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,36 @@ final class SwiftNetworkQUICHarnessTests: NetTestCase {
653653
QUICTestHarness().runQUICTest(datagram: true, blockSize: 1000, blockCount: 10)
654654
}
655655

656+
func testQUICDatagramRemoteMaxDatagramFrameSize() {
657+
QUICTestHarness().runQUICTest(
658+
datagram: true,
659+
blockSize: 1000,
660+
blockCount: 1,
661+
afterData: { harness in
662+
let expectation = XCTestExpectation(description: "Wait for remote datagram frame size to be fetched")
663+
harness.context.async {
664+
let clientMetadata: ProtocolMetadata<QUICProtocol>? = harness.state?.clientHarness.getMetadata()
665+
XCTAssertNotNil(clientMetadata)
666+
if let clientMetadata {
667+
let clientRemoteSize = clientMetadata.connectionMetadata?.remoteMaxDatagramFrameSize
668+
XCTAssertNotNil(clientRemoteSize)
669+
XCTAssertEqual(clientRemoteSize, 65535)
670+
}
671+
let serverMetadata: ProtocolMetadata<QUICProtocol>? = harness.state?.serverHarness.getMetadata()
672+
XCTAssertNotNil(serverMetadata)
673+
if let serverMetadata {
674+
let serverRemoteSize = serverMetadata.connectionMetadata?.remoteMaxDatagramFrameSize
675+
XCTAssertNotNil(serverRemoteSize)
676+
XCTAssertEqual(serverRemoteSize, 65535)
677+
}
678+
expectation.fulfill()
679+
}
680+
let waitResult = XCTWaiter.wait(for: [expectation], timeout: 2.0)
681+
XCTAssertEqual(waitResult, .completed, "Remote datagram frame size fetch should complete")
682+
}
683+
)
684+
}
685+
656686
// MARK: Unidirectional tests
657687

658688
func testQUICHelloWorldUnidirectional() {

0 commit comments

Comments
 (0)