diff --git a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnection.kt b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnection.kt index 7b6b17d67..2056c7779 100644 --- a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnection.kt +++ b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnection.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quic.crypto.InitialSecrets import com.vitorpamplona.quic.crypto.PlatformAesOneBlock import com.vitorpamplona.quic.crypto.bestAes128GcmAead import com.vitorpamplona.quic.observability.QlogObserver +import com.vitorpamplona.quic.packet.QuicVersion import com.vitorpamplona.quic.stream.QuicStream import com.vitorpamplona.quic.stream.StreamId import com.vitorpamplona.quic.tls.TlsClient @@ -74,6 +75,30 @@ class QuicConnection( .toEpochMilliseconds() }, val alpnList: List = listOf(TlsConstants.ALPN_H3), + /** + * Optional second listener invoked after the connection's own + * key-installation listener. Used by the interop runner endpoint to + * dump SSLKEYLOG lines so Wireshark can decrypt captured pcaps. + * Default `null` keeps production callers unaffected. + */ + val extraSecretsListener: TlsSecretsListener? = null, + /** + * TLS cipher suites to offer in the ClientHello. Override to e.g. + * `intArrayOf(TlsConstants.CIPHER_TLS_CHACHA20_POLY1305_SHA256)` for the + * `chacha20` interop testcase. Default matches [TlsClient]'s default. + */ + val cipherSuites: IntArray = + intArrayOf( + TlsConstants.CIPHER_TLS_AES_128_GCM_SHA256, + TlsConstants.CIPHER_TLS_CHACHA20_POLY1305_SHA256, + ), + /** + * Version this connection puts in the FIRST Initial it sends. Defaults + * to [QuicVersion.V1]; the interop runner sets it to + * [QuicVersion.FORCE_VERSION_NEGOTIATION] for the `versionnegotiation` + * testcase, which drives the client through the RFC 9000 ยง6 VN flow. + */ + val initialVersion: Int = QuicVersion.V1, /** * Optional qlog observer (draft-marx-qlog). Production callers * leave this at [QlogObserver.NoOp] (zero overhead). Interop / diff --git a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionParser.kt b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionParser.kt index ca41d3046..cfb3e315d 100644 --- a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionParser.kt +++ b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionParser.kt @@ -22,7 +22,6 @@ package com.vitorpamplona.quic.connection import com.vitorpamplona.quic.QuicCodecException import com.vitorpamplona.quic.connection.recovery.drainAckedSentPackets -import com.vitorpamplona.quic.packet.RetryPacket import com.vitorpamplona.quic.frame.AckFrame import com.vitorpamplona.quic.frame.ConnectionCloseFrame import com.vitorpamplona.quic.frame.CryptoFrame @@ -42,6 +41,7 @@ import com.vitorpamplona.quic.observability.qlogFrameName import com.vitorpamplona.quic.packet.LongHeaderPacket import com.vitorpamplona.quic.packet.LongHeaderType import com.vitorpamplona.quic.packet.QuicVersion +import com.vitorpamplona.quic.packet.RetryPacket import com.vitorpamplona.quic.packet.ShortHeaderPacket import com.vitorpamplona.quic.stream.StreamId import com.vitorpamplona.quic.tls.TlsClient diff --git a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionWriter.kt b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionWriter.kt index 8a77edf3c..675167144 100644 --- a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionWriter.kt +++ b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/QuicConnectionWriter.kt @@ -42,6 +42,7 @@ import com.vitorpamplona.quic.observability.qlogFrameName import com.vitorpamplona.quic.packet.LongHeaderPacket import com.vitorpamplona.quic.packet.LongHeaderPlaintextPacket import com.vitorpamplona.quic.packet.LongHeaderType +import com.vitorpamplona.quic.packet.QuicVersion import com.vitorpamplona.quic.packet.ShortHeaderPacket import com.vitorpamplona.quic.packet.ShortHeaderPlaintextPacket diff --git a/quic/src/jvmTest/kotlin/com/vitorpamplona/quic/interop/InteropRunner.kt b/quic/src/jvmTest/kotlin/com/vitorpamplona/quic/interop/InteropRunner.kt index 9a40f2a29..33f308471 100644 --- a/quic/src/jvmTest/kotlin/com/vitorpamplona/quic/interop/InteropRunner.kt +++ b/quic/src/jvmTest/kotlin/com/vitorpamplona/quic/interop/InteropRunner.kt @@ -24,6 +24,7 @@ import com.vitorpamplona.quic.connection.QuicConnection import com.vitorpamplona.quic.connection.QuicConnectionConfig import com.vitorpamplona.quic.connection.QuicConnectionDriver import com.vitorpamplona.quic.observability.QlogObserver +import com.vitorpamplona.quic.packet.QuicVersion import com.vitorpamplona.quic.tls.PermissiveCertificateValidator import com.vitorpamplona.quic.transport.UdpSocket import kotlinx.coroutines.CoroutineScope