From 35242394e10abc559a904accf2b66cae7541a88b Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Mon, 6 Feb 2017 15:42:37 +0700 Subject: [PATCH] generate new connection ID after version negotiation fixes #404 --- client.go | 7 ++++++- client_test.go | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client.go b/client.go index e5e6abe1c..c3772b632 100644 --- a/client.go +++ b/client.go @@ -175,9 +175,14 @@ func (c *Client) handlePacket(packet []byte) error { return qerr.VersionNegotiationMismatch } - utils.Infof("Switching to QUIC version %d", highestSupportedVersion) + // switch to negotiated version c.version = highestSupportedVersion c.versionNegotiated = true + c.connectionID, err = utils.GenerateConnectionID() + if err != nil { + return err + } + utils.Infof("Switching to QUIC version %d. New connection ID: %x", highestSupportedVersion, c.connectionID) c.session.Close(errCloseSessionForNewVersion) err = c.createNewSession(hdr.SupportedVersions) diff --git a/client_test.go b/client_test.go index 4a38f187c..f21b6e928 100644 --- a/client_test.go +++ b/client_test.go @@ -211,12 +211,14 @@ var _ = Describe("Client", func() { newVersion := protocol.Version35 Expect(newVersion).ToNot(Equal(client.version)) Expect(session.packetCount).To(BeZero()) + client.connectionID = 0x1337 err := client.handlePacket(getVersionNegotiation([]protocol.VersionNumber{newVersion})) Expect(client.version).To(Equal(newVersion)) Expect(client.versionNegotiated).To(BeTrue()) Expect(versionNegotiateCallbackCalled).To(BeTrue()) // it swapped the sessions Expect(client.session).ToNot(Equal(session)) + Expect(client.connectionID).ToNot(Equal(0x1337)) // it generated a new connection ID Expect(err).ToNot(HaveOccurred()) // it didn't pass the version negoation packet to the session (since it has no payload) Expect(session.packetCount).To(BeZero())