retire old connection IDs when the peers sends us too many new ones

This commit is contained in:
Marten Seemann
2019-09-15 13:44:14 +07:00
parent 37600e049d
commit 8db230753f
2 changed files with 31 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ package quic
import (
"fmt"
"github.com/lucas-clemente/quic-go/internal/protocol"
"github.com/lucas-clemente/quic-go/internal/utils"
"github.com/lucas-clemente/quic-go/internal/wire"
)
@@ -18,6 +19,20 @@ func newConnIDManager(queueControlFrame func(wire.Frame)) *connIDManager {
}
func (h *connIDManager) Add(f *wire.NewConnectionIDFrame) error {
if err := h.add(f); err != nil {
return err
}
if h.queue.Len() > protocol.MaxActiveConnectionIDs {
// delete the first connection ID in the queue
val := h.queue.Remove(h.queue.Front())
h.queueControlFrame(&wire.RetireConnectionIDFrame{
SequenceNumber: val.SequenceNumber,
})
}
return nil
}
func (h *connIDManager) add(f *wire.NewConnectionIDFrame) error {
var next *utils.NewConnectionIDElement
for el := h.queue.Front(); el != nil; el = next {
if el.Value.SequenceNumber >= f.RetirePriorTo {