only send the client version number until the handshake is complete

fixes #426
This commit is contained in:
Marten Seemann
2017-02-20 11:52:00 +07:00
parent 0d6647ed8c
commit d1c9d8e93d
2 changed files with 16 additions and 3 deletions

View File

@@ -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
} }

View File

@@ -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{}