forked from quic-go/quic-go
only send the client version number until the handshake is complete
fixes #426
This commit is contained in:
@@ -77,8 +77,7 @@ func (p *packetPacker) packPacket(stopWaitingFrame *frames.StopWaitingFrame, lea
|
|||||||
responsePublicHeader.DiversificationNonce = p.cryptoSetup.DiversificationNonce()
|
responsePublicHeader.DiversificationNonce = p.cryptoSetup.DiversificationNonce()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: stop sending version numbers once a version has been negotiated
|
if p.perspective == protocol.PerspectiveClient && !p.cryptoSetup.HandshakeComplete() {
|
||||||
if p.perspective == protocol.PerspectiveClient {
|
|
||||||
responsePublicHeader.VersionFlag = true
|
responsePublicHeader.VersionFlag = true
|
||||||
responsePublicHeader.VersionNumber = p.version
|
responsePublicHeader.VersionNumber = p.version
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,8 +167,9 @@ var _ = Describe("Packet packer", func() {
|
|||||||
Expect(p).ToNot(BeNil())
|
Expect(p).ToNot(BeNil())
|
||||||
})
|
})
|
||||||
|
|
||||||
It("adds the version flag to the public header", func() {
|
It("adds the version flag to the public header before the crypto handshake is finished", func() {
|
||||||
packer.perspective = protocol.PerspectiveClient
|
packer.perspective = protocol.PerspectiveClient
|
||||||
|
packer.cryptoSetup.(*mockCryptoSetup).handshakeComplete = false
|
||||||
packer.controlFrames = []frames.Frame{&frames.BlockedFrame{StreamID: 0}}
|
packer.controlFrames = []frames.Frame{&frames.BlockedFrame{StreamID: 0}}
|
||||||
packer.connectionID = 0x1337
|
packer.connectionID = 0x1337
|
||||||
packer.version = 123
|
packer.version = 123
|
||||||
@@ -181,6 +182,19 @@ var _ = Describe("Packet packer", func() {
|
|||||||
Expect(hdr.VersionNumber).To(Equal(packer.version))
|
Expect(hdr.VersionNumber).To(Equal(packer.version))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("doesn't add the version flag to the public header after the crypto handshake is completed", func() {
|
||||||
|
packer.perspective = protocol.PerspectiveClient
|
||||||
|
packer.cryptoSetup.(*mockCryptoSetup).handshakeComplete = true
|
||||||
|
packer.controlFrames = []frames.Frame{&frames.BlockedFrame{StreamID: 0}}
|
||||||
|
packer.connectionID = 0x1337
|
||||||
|
p, err := packer.PackPacket(nil, []frames.Frame{}, 0)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(p).ToNot(BeNil())
|
||||||
|
hdr, err := ParsePublicHeader(bytes.NewReader(p.raw), protocol.PerspectiveClient)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(hdr.VersionFlag).To(BeFalse())
|
||||||
|
})
|
||||||
|
|
||||||
It("packs many control frames into 1 packets", func() {
|
It("packs many control frames into 1 packets", func() {
|
||||||
f := &frames.AckFrame{LargestAcked: 1}
|
f := &frames.AckFrame{LargestAcked: 1}
|
||||||
b := &bytes.Buffer{}
|
b := &bytes.Buffer{}
|
||||||
|
|||||||
Reference in New Issue
Block a user