register stateless reset tokens for connection IDs used on paths (#5023)

* register stateless reset tokens for connection IDs used on paths

* retire path stateless reset tokens on closing
This commit is contained in:
Marten Seemann
2025-04-09 09:31:41 +07:00
committed by GitHub
parent 84aba71c86
commit e76621f75a
3 changed files with 44 additions and 7 deletions

View File

@@ -93,6 +93,7 @@ func (h *connIDManager) add(f *wire.NewConnectionIDFrame) error {
h.queueControlFrame(&wire.RetireConnectionIDFrame{
SequenceNumber: entry.SequenceNumber,
})
h.removeStatelessResetToken(entry.StatelessResetToken)
delete(h.pathProbing, id)
}
}
@@ -189,6 +190,11 @@ func (h *connIDManager) Close() {
if h.activeStatelessResetToken != nil {
h.removeStatelessResetToken(*h.activeStatelessResetToken)
}
if h.pathProbing != nil {
for _, entry := range h.pathProbing {
h.removeStatelessResetToken(entry.StatelessResetToken)
}
}
}
// is called when the server performs a Retry
@@ -266,6 +272,7 @@ func (h *connIDManager) GetConnIDForPath(id pathID) (protocol.ConnectionID, bool
h.queue = h.queue[1:]
h.pathProbing[id] = front
h.highestProbingID = front.SequenceNumber
h.addStatelessResetToken(front.StatelessResetToken)
return front.ConnectionID, true
}
@@ -283,6 +290,7 @@ func (h *connIDManager) RetireConnIDForPath(pathID pathID) {
h.queueControlFrame(&wire.RetireConnectionIDFrame{
SequenceNumber: entry.SequenceNumber,
})
h.removeStatelessResetToken(entry.StatelessResetToken)
delete(h.pathProbing, pathID)
}