]> git.feebdaed.xyz Git - 0xmirror/quic-go.git/commitdiff
ackhandler: remove ReceivedPacketHandler interface, use struct directly (#5472)
authorMarten Seemann <martenseemann@gmail.com>
Thu, 4 Dec 2025 02:38:48 +0000 (10:38 +0800)
committerGitHub <noreply@github.com>
Thu, 4 Dec 2025 02:38:48 +0000 (03:38 +0100)
connection.go
connection_test.go
internal/ackhandler/interfaces.go
internal/ackhandler/received_packet_handler.go

index bc89db459302d9a33ac33c1d873eaa656ce96bd0..24731d7af0deced8c90adf109eb71b4a75d943f8 100644 (file)
@@ -371,7 +371,7 @@ var newConnection = func(
                s.version,
        )
        s.cryptoStreamHandler = cs
-       s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective)
+       s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, &s.receivedPacketHandler, s.datagramQueue, s.perspective)
        s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen)
        s.cryptoStreamManager = newCryptoStreamManager(s.initialStream, s.handshakeStream, s.oneRTTStream)
        return &wrappedConn{Conn: s}
@@ -497,7 +497,7 @@ var newClientConnection = func(
        s.cryptoStreamHandler = cs
        s.cryptoStreamManager = newCryptoStreamManager(s.initialStream, s.handshakeStream, oneRTTStream)
        s.unpacker = newPacketUnpacker(cs, s.srcConnIDLen)
-       s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, s.receivedPacketHandler, s.datagramQueue, s.perspective)
+       s.packer = newPacketPacker(srcConnID, s.connIDManager.Get, s.initialStream, s.handshakeStream, s.sentPacketHandler, s.retransmissionQueue, cs, s.framer, &s.receivedPacketHandler, s.datagramQueue, s.perspective)
        if len(tlsConf.ServerName) > 0 {
                s.tokenStoreKey = tlsConf.ServerName
        } else {
@@ -557,7 +557,7 @@ func (c *Conn) preSetup() {
        c.lastPacketReceivedTime = now
        c.creationTime = now
 
-       c.receivedPacketHandler = ackhandler.NewReceivedPacketHandler(c.logger)
+       c.receivedPacketHandler = *ackhandler.NewReceivedPacketHandler(c.logger)
 
        c.datagramQueue = newDatagramQueue(c.scheduleSending, c.logger)
        c.connState.Version = c.version
index 4e6f3e024dffe2f994dbf13952d9f20db6a8455f..fea1b69af50fe77644bd8acb79beea5a7ceb0dc9 100644 (file)
@@ -51,10 +51,6 @@ func connectionOptSentPacketHandler(sph ackhandler.SentPacketHandler) testConnec
        return func(conn *Conn) { conn.sentPacketHandler = sph }
 }
 
-func connectionOptReceivedPacketHandler(rph ackhandler.ReceivedPacketHandler) testConnectionOpt {
-       return func(conn *Conn) { conn.receivedPacketHandler = rph }
-}
-
 func connectionOptUnpacker(u unpacker) testConnectionOpt {
        return func(conn *Conn) { conn.unpacker = u }
 }
@@ -90,6 +86,10 @@ type testConnection struct {
        remoteAddr *net.UDPAddr
 }
 
+func (tc *testConnection) receivedPacketHandler() *ackhandler.ReceivedPacketHandler {
+       return &tc.conn.receivedPacketHandler
+}
+
 func newServerTestConnection(
        t *testing.T,
        mockCtrl *gomock.Controller,
@@ -2109,13 +2109,11 @@ func TestConnectionACKTimer(t *testing.T) {
        synctest.Test(t, func(t *testing.T) {
                mockCtrl := gomock.NewController(t)
                sph := mockackhandler.NewMockSentPacketHandler(mockCtrl)
-               rph := ackhandler.NewReceivedPacketHandler(utils.DefaultLogger)
                tc := newServerTestConnection(t,
                        mockCtrl,
                        &Config{MaxIdleTimeout: time.Second},
                        false,
                        connectionOptHandshakeConfirmed(),
-                       connectionOptReceivedPacketHandler(rph),
                        connectionOptSentPacketHandler(sph),
                )
                const alarmTimeout = 500 * time.Millisecond
@@ -2127,7 +2125,7 @@ func TestConnectionACKTimer(t *testing.T) {
                tc.sendConn.EXPECT().Write(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes()
 
                // Set initial alarm timeout far in the future
-               _ = rph.ReceivedPacket(1, protocol.ECNNon, protocol.Encryption1RTT, monotime.Now().Add(time.Hour), true)
+               _ = tc.receivedPacketHandler().ReceivedPacket(1, protocol.ECNNon, protocol.Encryption1RTT, monotime.Now().Add(time.Hour), true)
 
                var times []monotime.Time
                done := make(chan struct{}, 5)
@@ -2138,6 +2136,7 @@ func TestConnectionACKTimer(t *testing.T) {
                                func(buf *packetBuffer, _ protocol.ByteCount, _ monotime.Time, _ protocol.Version) (shortHeaderPacket, error) {
                                        buf.Data = append(buf.Data, []byte("foobar")...)
                                        times = append(times, monotime.Now())
+                                       rph := tc.receivedPacketHandler()
                                        if len(times) == 1 {
                                                // After first packet is sent, set alarm timeout for the next iteration
                                                // Get the ACK frame to reset state, then receive a new packet to set alarm
index 6243786d044a66dc7b8d705e322a1e84dd1294a6..620a5e11f0eac3e31642255f7607091a1d118141 100644 (file)
@@ -37,14 +37,3 @@ type SentPacketHandler interface {
 
        MigratedPath(now monotime.Time, initialMaxPacketSize protocol.ByteCount)
 }
-
-// ReceivedPacketHandler handles ACKs needed to send for incoming packets
-type ReceivedPacketHandler interface {
-       IgnorePacketsBelow(protocol.PacketNumber)
-       IsPotentiallyDuplicate(protocol.PacketNumber, protocol.EncryptionLevel) bool
-       ReceivedPacket(pn protocol.PacketNumber, ecn protocol.ECN, encLevel protocol.EncryptionLevel, rcvTime monotime.Time, ackEliciting bool) error
-       DropPackets(protocol.EncryptionLevel)
-
-       GetAlarmTimeout() monotime.Time
-       GetAckFrame(_ protocol.EncryptionLevel, now monotime.Time, onlyIfQueued bool) *wire.AckFrame
-}
index 4d112f2d605171956c8cd3304fb3e44bc490095d..d0d24bf30addd305e06b828c71beabc88a63ea6a 100644 (file)
@@ -9,7 +9,7 @@ import (
        "github.com/quic-go/quic-go/internal/wire"
 )
 
-type receivedPacketHandler struct {
+type ReceivedPacketHandler struct {
        initialPackets   *receivedPacketTracker
        handshakePackets *receivedPacketTracker
        appDataPackets   appDataReceivedPacketTracker
@@ -17,10 +17,8 @@ type receivedPacketHandler struct {
        lowest1RTTPacket protocol.PacketNumber
 }
 
-var _ ReceivedPacketHandler = &receivedPacketHandler{}
-
-func NewReceivedPacketHandler(logger utils.Logger) ReceivedPacketHandler {
-       return &receivedPacketHandler{
+func NewReceivedPacketHandler(logger utils.Logger) *ReceivedPacketHandler {
+       return &ReceivedPacketHandler{
                initialPackets:   newReceivedPacketTracker(),
                handshakePackets: newReceivedPacketTracker(),
                appDataPackets:   *newAppDataReceivedPacketTracker(logger),
@@ -28,7 +26,7 @@ func NewReceivedPacketHandler(logger utils.Logger) ReceivedPacketHandler {
        }
 }
 
-func (h *receivedPacketHandler) ReceivedPacket(
+func (h *ReceivedPacketHandler) ReceivedPacket(
        pn protocol.PacketNumber,
        ecn protocol.ECN,
        encLevel protocol.EncryptionLevel,
@@ -60,11 +58,11 @@ func (h *receivedPacketHandler) ReceivedPacket(
        }
 }
 
-func (h *receivedPacketHandler) IgnorePacketsBelow(pn protocol.PacketNumber) {
+func (h *ReceivedPacketHandler) IgnorePacketsBelow(pn protocol.PacketNumber) {
        h.appDataPackets.IgnoreBelow(pn)
 }
 
-func (h *receivedPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) {
+func (h *ReceivedPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) {
        //nolint:exhaustive // 1-RTT packet number space is never dropped.
        switch encLevel {
        case protocol.EncryptionInitial:
@@ -79,11 +77,11 @@ func (h *receivedPacketHandler) DropPackets(encLevel protocol.EncryptionLevel) {
        }
 }
 
-func (h *receivedPacketHandler) GetAlarmTimeout() monotime.Time {
+func (h *ReceivedPacketHandler) GetAlarmTimeout() monotime.Time {
        return h.appDataPackets.GetAlarmTimeout()
 }
 
-func (h *receivedPacketHandler) GetAckFrame(encLevel protocol.EncryptionLevel, now monotime.Time, onlyIfQueued bool) *wire.AckFrame {
+func (h *ReceivedPacketHandler) GetAckFrame(encLevel protocol.EncryptionLevel, now monotime.Time, onlyIfQueued bool) *wire.AckFrame {
        //nolint:exhaustive // 0-RTT packets can't contain ACK frames.
        switch encLevel {
        case protocol.EncryptionInitial:
@@ -104,7 +102,7 @@ func (h *receivedPacketHandler) GetAckFrame(encLevel protocol.EncryptionLevel, n
        }
 }
 
-func (h *receivedPacketHandler) IsPotentiallyDuplicate(pn protocol.PacketNumber, encLevel protocol.EncryptionLevel) bool {
+func (h *ReceivedPacketHandler) IsPotentiallyDuplicate(pn protocol.PacketNumber, encLevel protocol.EncryptionLevel) bool {
        switch encLevel {
        case protocol.EncryptionInitial:
                if h.initialPackets != nil {