forked from quic-go/quic-go
Merge pull request #2652 from lucas-clemente/fix-retiring-of-active-conn-id
don't retire the conn ID that's in use when receiving a retransmission
This commit is contained in:
@@ -70,7 +70,7 @@ func (h *connIDManager) Add(f *wire.NewConnectionIDFrame) error {
|
||||
func (h *connIDManager) add(f *wire.NewConnectionIDFrame) error {
|
||||
// If the NEW_CONNECTION_ID frame is reordered, such that its sequence number is smaller than the currently active
|
||||
// connection ID or if it was already retired, send the RETIRE_CONNECTION_ID frame immediately.
|
||||
if f.SequenceNumber <= h.activeSequenceNumber || f.SequenceNumber < h.highestRetired {
|
||||
if f.SequenceNumber < h.activeSequenceNumber || f.SequenceNumber < h.highestRetired {
|
||||
h.queueControlFrame(&wire.RetireConnectionIDFrame{
|
||||
SequenceNumber: f.SequenceNumber,
|
||||
})
|
||||
|
||||
@@ -201,6 +201,27 @@ var _ = Describe("Connection ID Manager", func() {
|
||||
Expect(frameQueue[0].(*wire.RetireConnectionIDFrame).SequenceNumber).To(BeEquivalentTo(9))
|
||||
})
|
||||
|
||||
It("accepts retransmissions for the connection ID that is in use", func() {
|
||||
connID := protocol.ConnectionID{1, 2, 3, 4}
|
||||
|
||||
Expect(m.Add(&wire.NewConnectionIDFrame{
|
||||
SequenceNumber: 1,
|
||||
ConnectionID: connID,
|
||||
})).To(Succeed())
|
||||
Expect(frameQueue).To(BeEmpty())
|
||||
Expect(m.Get()).To(Equal(connID))
|
||||
Expect(frameQueue).To(HaveLen(1))
|
||||
Expect(frameQueue[0]).To(BeAssignableToTypeOf(&wire.RetireConnectionIDFrame{}))
|
||||
Expect(frameQueue[0].(*wire.RetireConnectionIDFrame).SequenceNumber).To(BeZero())
|
||||
frameQueue = nil
|
||||
|
||||
Expect(m.Add(&wire.NewConnectionIDFrame{
|
||||
SequenceNumber: 1,
|
||||
ConnectionID: connID,
|
||||
})).To(Succeed())
|
||||
Expect(frameQueue).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("errors when the peer sends too connection IDs", func() {
|
||||
for i := uint8(1); i < protocol.MaxActiveConnectionIDs; i++ {
|
||||
Expect(m.Add(&wire.NewConnectionIDFrame{
|
||||
|
||||
Reference in New Issue
Block a user