forked from quic-go/quic-go
introduce a UsesStopWaitingFrames() method for version numbers
This commit is contained in:
@@ -77,6 +77,11 @@ func (vn VersionNumber) UsesIETFFrameFormat() bool {
|
|||||||
return vn != Version39
|
return vn != Version39
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UsesStopWaitingFrames tells if this version uses STOP_WAITING frames
|
||||||
|
func (vn VersionNumber) UsesStopWaitingFrames() bool {
|
||||||
|
return vn == Version39
|
||||||
|
}
|
||||||
|
|
||||||
// StreamContributesToConnectionFlowControl says if a stream contributes to connection-level flow control
|
// StreamContributesToConnectionFlowControl says if a stream contributes to connection-level flow control
|
||||||
func (vn VersionNumber) StreamContributesToConnectionFlowControl(id StreamID) bool {
|
func (vn VersionNumber) StreamContributesToConnectionFlowControl(id StreamID) bool {
|
||||||
if id == vn.CryptoStreamID() {
|
if id == vn.CryptoStreamID() {
|
||||||
|
|||||||
@@ -70,6 +70,11 @@ var _ = Describe("Version", func() {
|
|||||||
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
|
Expect(VersionTLS.UsesIETFFrameFormat()).To(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("tells if a version uses STOP_WAITING frames", func() {
|
||||||
|
Expect(Version39.UsesStopWaitingFrames()).To(BeTrue())
|
||||||
|
Expect(VersionTLS.UsesStopWaitingFrames()).To(BeFalse())
|
||||||
|
})
|
||||||
|
|
||||||
It("says if a stream contributes to connection-level flowcontrol, for gQUIC", func() {
|
It("says if a stream contributes to connection-level flowcontrol, for gQUIC", func() {
|
||||||
Expect(Version39.StreamContributesToConnectionFlowControl(1)).To(BeFalse())
|
Expect(Version39.StreamContributesToConnectionFlowControl(1)).To(BeFalse())
|
||||||
Expect(Version39.StreamContributesToConnectionFlowControl(2)).To(BeTrue())
|
Expect(Version39.StreamContributesToConnectionFlowControl(2)).To(BeTrue())
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ func (p *packetPacker) PackRetransmission(packet *ackhandler.Packet) ([]*packedP
|
|||||||
maxSize := protocol.MaxPacketSize - protocol.ByteCount(sealer.Overhead()) - headerLength
|
maxSize := protocol.MaxPacketSize - protocol.ByteCount(sealer.Overhead()) - headerLength
|
||||||
|
|
||||||
// for gQUIC: add a STOP_WAITING for *every* retransmission
|
// for gQUIC: add a STOP_WAITING for *every* retransmission
|
||||||
if !p.version.UsesIETFFrameFormat() {
|
if p.version.UsesStopWaitingFrames() {
|
||||||
if p.stopWaiting == nil {
|
if p.stopWaiting == nil {
|
||||||
return nil, errors.New("PacketPacker BUG: Handshake retransmissions must contain a STOP_WAITING frame")
|
return nil, errors.New("PacketPacker BUG: Handshake retransmissions must contain a STOP_WAITING frame")
|
||||||
}
|
}
|
||||||
@@ -215,7 +215,7 @@ func (p *packetPacker) packHandshakeRetransmission(packet *ackhandler.Packet) (*
|
|||||||
}
|
}
|
||||||
header := p.getHeader(packet.EncryptionLevel)
|
header := p.getHeader(packet.EncryptionLevel)
|
||||||
var frames []wire.Frame
|
var frames []wire.Frame
|
||||||
if !p.version.UsesIETFFrameFormat() { // for gQUIC: pack a STOP_WAITING first
|
if p.version.UsesStopWaitingFrames() { // for gQUIC: pack a STOP_WAITING first
|
||||||
if p.stopWaiting == nil {
|
if p.stopWaiting == nil {
|
||||||
return nil, errors.New("PacketPacker BUG: Handshake retransmissions must contain a STOP_WAITING frame")
|
return nil, errors.New("PacketPacker BUG: Handshake retransmissions must contain a STOP_WAITING frame")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -796,7 +796,7 @@ func (s *session) maybeSendAckOnlyPacket() error {
|
|||||||
}
|
}
|
||||||
s.packer.QueueControlFrame(ack)
|
s.packer.QueueControlFrame(ack)
|
||||||
|
|
||||||
if !s.version.UsesIETFFrameFormat() { // for gQUIC, maybe add a STOP_WAITING
|
if s.version.UsesStopWaitingFrames() { // for gQUIC, maybe add a STOP_WAITING
|
||||||
if swf := s.sentPacketHandler.GetStopWaitingFrame(false); swf != nil {
|
if swf := s.sentPacketHandler.GetStopWaitingFrame(false); swf != nil {
|
||||||
s.packer.QueueControlFrame(swf)
|
s.packer.QueueControlFrame(swf)
|
||||||
}
|
}
|
||||||
@@ -845,7 +845,7 @@ func (s *session) sendPacket() (bool, error) {
|
|||||||
utils.Debugf("\tDequeueing retransmission for packet 0x%x", retransmitPacket.PacketNumber)
|
utils.Debugf("\tDequeueing retransmission for packet 0x%x", retransmitPacket.PacketNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.version.UsesIETFFrameFormat() {
|
if s.version.UsesStopWaitingFrames() {
|
||||||
s.packer.QueueControlFrame(s.sentPacketHandler.GetStopWaitingFrame(true))
|
s.packer.QueueControlFrame(s.sentPacketHandler.GetStopWaitingFrame(true))
|
||||||
}
|
}
|
||||||
packets, err := s.packer.PackRetransmission(retransmitPacket)
|
packets, err := s.packer.PackRetransmission(retransmitPacket)
|
||||||
@@ -860,7 +860,7 @@ func (s *session) sendPacket() (bool, error) {
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !s.version.UsesIETFFrameFormat() && ack != nil {
|
if s.version.UsesStopWaitingFrames() && ack != nil {
|
||||||
if swf := s.sentPacketHandler.GetStopWaitingFrame(false); swf != nil {
|
if swf := s.sentPacketHandler.GetStopWaitingFrame(false); swf != nil {
|
||||||
s.packer.QueueControlFrame(swf)
|
s.packer.QueueControlFrame(swf)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user