From ad22ed9d16c60fd8e9436ed6efab7594dd27b17d Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 30 Nov 2017 16:43:12 +0700 Subject: [PATCH] disable connection migration Connection migration is complicated: We need to verify the new path, and reset the congestion controller. In the IETF draft, connection migration is still work in progress. --- session.go | 8 -------- session_test.go | 21 ++++----------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/session.go b/session.go index 06d6916f..a163f7ee 100644 --- a/session.go +++ b/session.go @@ -448,14 +448,6 @@ func (s *session) handlePacketImpl(p *receivedPacket) error { hdr.Log() } // if the decryption failed, this might be a packet sent by an attacker - // don't update the remote address - if quicErr, ok := err.(*qerr.QuicError); ok && quicErr.ErrorCode == qerr.DecryptionFailure { - return err - } - if s.perspective == protocol.PerspectiveServer { - // update the remote address, even if unpacking failed for any other reason than a decryption error - s.conn.SetCurrentRemoteAddr(p.remoteAddr) - } if err != nil { return err } diff --git a/session_test.go b/session_test.go index c847b9de..b26b8ff4 100644 --- a/session_test.go +++ b/session_test.go @@ -739,16 +739,17 @@ var _ = Describe("Session", func() { }) Context("updating the remote address", func() { - It("sets the remote address", func() { + It("doesn't support connection migration", func() { + origAddr := sess.conn.(*mockConnection).remoteAddr remoteIP := &net.IPAddr{IP: net.IPv4(192, 168, 0, 100)} - Expect(sess.conn.(*mockConnection).remoteAddr).ToNot(Equal(remoteIP)) + Expect(origAddr).ToNot(Equal(remoteIP)) p := receivedPacket{ remoteAddr: remoteIP, header: &wire.Header{PacketNumber: 1337}, } err := sess.handlePacketImpl(&p) Expect(err).ToNot(HaveOccurred()) - Expect(sess.conn.(*mockConnection).remoteAddr).To(Equal(remoteIP)) + Expect(sess.conn.(*mockConnection).remoteAddr).To(Equal(origAddr)) }) It("doesn't change the remote address if authenticating the packet fails", func() { @@ -767,20 +768,6 @@ var _ = Describe("Session", func() { Expect(quicErr.ErrorCode).To(Equal(qerr.DecryptionFailure)) Expect(sess.conn.(*mockConnection).remoteAddr).To(Equal(remoteIP)) }) - - It("sets the remote address, if the packet is authenticated, but unpacking fails for another reason", func() { - testErr := errors.New("testErr") - remoteIP := &net.IPAddr{IP: net.IPv4(192, 168, 0, 100)} - Expect(sess.conn.(*mockConnection).remoteAddr).ToNot(Equal(remoteIP)) - p := receivedPacket{ - remoteAddr: remoteIP, - header: &wire.Header{PacketNumber: 1337}, - } - sess.unpacker.(*mockUnpacker).unpackErr = testErr - err := sess.handlePacketImpl(&p) - Expect(err).To(MatchError(testErr)) - Expect(sess.conn.(*mockConnection).remoteAddr).To(Equal(remoteIP)) - }) }) })