From 53706049c7d981b85f2be505e921bbb3a5acdbb9 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 21 Dec 2016 15:53:11 +0700 Subject: [PATCH] read connection parameters when receiving a SHLO --- handshake/crypto_setup_client.go | 5 +++++ handshake/crypto_setup_client_test.go | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/handshake/crypto_setup_client.go b/handshake/crypto_setup_client.go index a297e06a4..4e550eeda 100644 --- a/handshake/crypto_setup_client.go +++ b/handshake/crypto_setup_client.go @@ -226,6 +226,11 @@ func (h *cryptoSetupClient) handleSHLOMessage(cryptoData map[Tag][]byte) error { return err } + err = h.connectionParameters.SetFromMap(cryptoData) + if err != nil { + return qerr.InvalidCryptoMessageParameter + } + h.aeadChanged <- struct{}{} return nil diff --git a/handshake/crypto_setup_client_test.go b/handshake/crypto_setup_client_test.go index 786cdfb3f..2a1bcacec 100644 --- a/handshake/crypto_setup_client_test.go +++ b/handshake/crypto_setup_client_test.go @@ -385,6 +385,19 @@ var _ = Describe("Crypto setup", func() { Expect(cs.HandshakeComplete()).To(BeTrue()) Expect(cs.aeadChanged).To(Receive()) }) + + It("reads the connection paramaters", func() { + tagMap[TagICSL] = []byte{3, 0, 0, 0} // 3 seconds + err := cs.handleSHLOMessage(tagMap) + Expect(err).ToNot(HaveOccurred()) + Expect(cs.connectionParameters.GetIdleConnectionStateLifetime()).To(Equal(3 * time.Second)) + }) + + It("errors if it can't read a connection parameter", func() { + tagMap[TagICSL] = []byte{3, 0, 0} // 1 byte too short + err := cs.handleSHLOMessage(tagMap) + Expect(err).To(MatchError(qerr.InvalidCryptoMessageParameter)) + }) }) Context("CHLO generation", func() {