From c281fd7338dce3d7cc7c7b64d9afda44c4b69ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Ch=C3=A9ron?= Date: Tue, 29 Jan 2019 19:03:45 +0100 Subject: [PATCH] Fix recvClientData with single Handshake packet Function recvClientData did not accept a client flight with messages ClientKeyXchg and CertVerify received from the same Handshake packet. This patch extends the state machine to transform remaining handshake messages as input to RecvStateNext. Resolves #350. --- core/Network/TLS/Handshake/Common.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/core/Network/TLS/Handshake/Common.hs b/core/Network/TLS/Handshake/Common.hs index 7b2ec43aa..c45d95cf1 100644 --- a/core/Network/TLS/Handshake/Common.hs +++ b/core/Network/TLS/Handshake/Common.hs @@ -125,6 +125,7 @@ recvPacketHandshake ctx = do -- | process a list of handshakes message in the recv state machine. onRecvStateHandshake :: Context -> RecvState IO -> [Handshake] -> IO (RecvState IO) onRecvStateHandshake _ recvState [] = return recvState +onRecvStateHandshake _ (RecvStateNext f) hms = f (Handshake hms) onRecvStateHandshake ctx (RecvStateHandshake f) (x:xs) = do nstate <- f x processHandshake ctx x