forked from quic-go/quic-go
save the max_datagram_frame_size transport parameter in the session ticket (#4013)
* Add MaxDatagramFrameSize parameter in session ticket * fix gofumpt issues * Update integrationtests/self/zero_rtt_test.go Co-authored-by: Marten Seemann <martenseemann@gmail.com> * fix: correct comparsion of max_datagram_frame_size * test: use constant MaxDatagramFrameSize for session ticket test * fix grammar --------- Co-authored-by: Marten Seemann <martenseemann@gmail.com>
This commit is contained in:
@@ -503,6 +503,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
MaxBidiStreamNum: protocol.StreamNum(getRandomValueUpTo(int64(protocol.MaxStreamCount))),
|
||||
MaxUniStreamNum: protocol.StreamNum(getRandomValueUpTo(int64(protocol.MaxStreamCount))),
|
||||
ActiveConnectionIDLimit: 2 + getRandomValueUpTo(math.MaxInt64-2),
|
||||
MaxDatagramFrameSize: protocol.ByteCount(getRandomValueUpTo(int64(protocol.MaxDatagramFrameSize))),
|
||||
}
|
||||
Expect(params.ValidFor0RTT(params)).To(BeTrue())
|
||||
b := params.MarshalForSessionTicket(nil)
|
||||
@@ -515,6 +516,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
Expect(tp.MaxBidiStreamNum).To(Equal(params.MaxBidiStreamNum))
|
||||
Expect(tp.MaxUniStreamNum).To(Equal(params.MaxUniStreamNum))
|
||||
Expect(tp.ActiveConnectionIDLimit).To(Equal(params.ActiveConnectionIDLimit))
|
||||
Expect(tp.MaxDatagramFrameSize).To(Equal(params.MaxDatagramFrameSize))
|
||||
})
|
||||
|
||||
It("rejects the parameters if it can't parse them", func() {
|
||||
@@ -540,6 +542,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
MaxBidiStreamNum: 5,
|
||||
MaxUniStreamNum: 6,
|
||||
ActiveConnectionIDLimit: 7,
|
||||
MaxDatagramFrameSize: 1000,
|
||||
}
|
||||
|
||||
BeforeEach(func() {
|
||||
@@ -611,6 +614,16 @@ var _ = Describe("Transport Parameters", func() {
|
||||
p.ActiveConnectionIDLimit = 0
|
||||
Expect(p.ValidFor0RTT(saved)).To(BeFalse())
|
||||
})
|
||||
|
||||
It("accepts the parameters if the MaxDatagramFrameSize was increased", func() {
|
||||
p.MaxDatagramFrameSize = saved.MaxDatagramFrameSize + 1
|
||||
Expect(p.ValidFor0RTT(saved)).To(BeTrue())
|
||||
})
|
||||
|
||||
It("rejects the parameters if the MaxDatagramFrameSize reduced", func() {
|
||||
p.MaxDatagramFrameSize = saved.MaxDatagramFrameSize - 1
|
||||
Expect(p.ValidFor0RTT(saved)).To(BeFalse())
|
||||
})
|
||||
})
|
||||
|
||||
Context("client checks the parameters after successfully sending 0-RTT data", func() {
|
||||
@@ -623,6 +636,7 @@ var _ = Describe("Transport Parameters", func() {
|
||||
MaxBidiStreamNum: 5,
|
||||
MaxUniStreamNum: 6,
|
||||
ActiveConnectionIDLimit: 7,
|
||||
MaxDatagramFrameSize: 1000,
|
||||
}
|
||||
|
||||
BeforeEach(func() {
|
||||
@@ -699,6 +713,16 @@ var _ = Describe("Transport Parameters", func() {
|
||||
p.ActiveConnectionIDLimit = saved.ActiveConnectionIDLimit + 1
|
||||
Expect(p.ValidForUpdate(saved)).To(BeTrue())
|
||||
})
|
||||
|
||||
It("rejects the parameters if the MaxDatagramFrameSize reduced", func() {
|
||||
p.MaxDatagramFrameSize = saved.MaxDatagramFrameSize - 1
|
||||
Expect(p.ValidForUpdate(saved)).To(BeFalse())
|
||||
})
|
||||
|
||||
It("doesn't reject the parameters if the MaxDatagramFrameSize increased", func() {
|
||||
p.MaxDatagramFrameSize = saved.MaxDatagramFrameSize + 1
|
||||
Expect(p.ValidForUpdate(saved)).To(BeTrue())
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -454,6 +454,10 @@ func (p *TransportParameters) MarshalForSessionTicket(b []byte) []byte {
|
||||
b = p.marshalVarintParam(b, initialMaxStreamsBidiParameterID, uint64(p.MaxBidiStreamNum))
|
||||
// initial_max_uni_streams
|
||||
b = p.marshalVarintParam(b, initialMaxStreamsUniParameterID, uint64(p.MaxUniStreamNum))
|
||||
// max_datagram_frame_size
|
||||
if p.MaxDatagramFrameSize != protocol.InvalidByteCount {
|
||||
b = p.marshalVarintParam(b, maxDatagramFrameSizeParameterID, uint64(p.MaxDatagramFrameSize))
|
||||
}
|
||||
// active_connection_id_limit
|
||||
return p.marshalVarintParam(b, activeConnectionIDLimitParameterID, p.ActiveConnectionIDLimit)
|
||||
}
|
||||
@@ -472,6 +476,9 @@ func (p *TransportParameters) UnmarshalFromSessionTicket(r *bytes.Reader) error
|
||||
|
||||
// ValidFor0RTT checks if the transport parameters match those saved in the session ticket.
|
||||
func (p *TransportParameters) ValidFor0RTT(saved *TransportParameters) bool {
|
||||
if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) {
|
||||
return false
|
||||
}
|
||||
return p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal &&
|
||||
p.InitialMaxStreamDataBidiRemote >= saved.InitialMaxStreamDataBidiRemote &&
|
||||
p.InitialMaxStreamDataUni >= saved.InitialMaxStreamDataUni &&
|
||||
@@ -484,6 +491,9 @@ func (p *TransportParameters) ValidFor0RTT(saved *TransportParameters) bool {
|
||||
// ValidForUpdate checks that the new transport parameters don't reduce limits after resuming a 0-RTT connection.
|
||||
// It is only used on the client side.
|
||||
func (p *TransportParameters) ValidForUpdate(saved *TransportParameters) bool {
|
||||
if saved.MaxDatagramFrameSize != protocol.InvalidByteCount && (p.MaxDatagramFrameSize == protocol.InvalidByteCount || p.MaxDatagramFrameSize < saved.MaxDatagramFrameSize) {
|
||||
return false
|
||||
}
|
||||
return p.ActiveConnectionIDLimit >= saved.ActiveConnectionIDLimit &&
|
||||
p.InitialMaxData >= saved.InitialMaxData &&
|
||||
p.InitialMaxStreamDataBidiLocal >= saved.InitialMaxStreamDataBidiLocal &&
|
||||
|
||||
Reference in New Issue
Block a user