quic 0.1.4 → 0.1.5
raw patch · 6 files changed
+37/−33 lines, 6 filesdep ~tls
Dependency ranges changed: tls
Files
- ChangeLog.md +5/−0
- Network/QUIC/Client/Run.hs +1/−1
- Network/QUIC/Handshake.hs +8/−1
- quic.cabal +1/−1
- test/HandshakeSpec.hs +18/−23
- test/IOSpec.hs +4/−7
ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.1.5++- Catching up "tls" v1.9.0.+- Fixing the timing to set resumption tokens.+ ## 0.1.4 - Fixing the race of socket closure.
Network/QUIC/Client/Run.hs view
@@ -66,13 +66,13 @@ } } setIncompatibleVN conn isICVN -- must be before handshaker+ setToken conn $ resumptionToken $ ccResumption conf handshaker <- handshakeClient conf' conn myAuthCIDs let client = do if ccUse0RTT conf then wait0RTTReady conn else wait1RTTReady conn- setToken conn $ resumptionToken $ ccResumption conf client0 conn ldcc = connLDCC conn supporters = foldr1 concurrently_ [handshaker
Network/QUIC/Handshake.hs view
@@ -86,8 +86,11 @@ convertLevel (CryptApplicationSecret, bs) = return (RTT1Level, bs) internalError :: String -> TLS.TLSError+#if MIN_VERSION_tls(1,9,0)+internalError msg = TLS.Error_Protocol msg TLS.InternalError+#else internalError msg = TLS.Error_Protocol (msg, True, TLS.InternalError)--- unexpectedMessage msg = TLS.Error_Protocol (msg, True, TLS.UnexpectedMessage)+#endif ---------------------------------------------------------------- @@ -316,4 +319,8 @@ #endif getErrorCause e = let msg = "unexpected TLS exception: " ++ show e+#if MIN_VERSION_tls(1,9,0)+ in TLS.Error_Protocol msg TLS.InternalError+#else in TLS.Error_Protocol (msg, True, TLS.InternalError)+#endif
quic.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: quic-version: 0.1.4+version: 0.1.5 license: BSD3 license-file: LICENSE maintainer: kazu@iij.ad.jp
test/HandshakeSpec.hs view
@@ -7,7 +7,6 @@ import Network.TLS (HandshakeMode13(..), Group(..)) import qualified Network.TLS as TLS import Test.Hspec-import UnliftIO.Async import UnliftIO.Concurrent import qualified UnliftIO.Exception as E @@ -89,26 +88,19 @@ testHandshake :: ClientConfig -> ServerConfig -> IO () -> HandshakeMode13 -> IO () testHandshake cc sc waitS mode = do- concurrently_ server client+ mvar <- newEmptyMVar+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where- client = do+ client mvar = do waitS C.run cc $ \conn -> do waitEstablished conn handshakeMode <$> getConnectionInfo conn `shouldReturn` mode- server = S.run sc $ \conn -> do+ takeMVar mvar+ server mvar = S.run sc $ \conn -> do waitEstablished conn handshakeMode <$> getConnectionInfo conn `shouldReturn` mode- delayedStop conn--delayedStop :: Connection -> IO ()-delayedStop conn = do- var <- newEmptyMVar- _ <- forkIO $ do- threadDelay 100- putMVar var ()- takeMVar var- stop conn+ putMVar mvar () query :: BS.ByteString -> Connection -> IO () query content conn = do@@ -120,14 +112,15 @@ testHandshake2 :: ClientConfig -> ServerConfig -> IO () -> (HandshakeMode13, HandshakeMode13) -> Bool -> IO () testHandshake2 cc1 sc waitS (mode1, mode2) use0RTT = do- concurrently_ server client+ mvar <- newEmptyMVar+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where runClient cc mode action = C.run cc $ \conn -> do void $ action conn handshakeMode <$> getConnectionInfo conn `shouldReturn` mode threadDelay 50000 getResumptionInfo conn- client = do+ client mvar = do waitS res <- runClient cc1 mode1 $ query "first" threadDelay 50000@@ -135,27 +128,29 @@ , ccUse0RTT = use0RTT } void $ runClient cc2 mode2 $ query "second"- server = S.run sc serv+ takeMVar mvar+ server mvar = S.run sc serv where serv conn = do s <- acceptStream conn bs <- recvStream s 1024 sendStream s "bye" closeStream s- when (bs == "second") $ do- delayedStop conn+ when (bs == "second") $ putMVar mvar () testHandshake3 :: ClientConfig -> ClientConfig -> ServerConfig -> IO () -> (QUICException -> Bool) -> IO () testHandshake3 cc1 cc2 sc waitS selector = do- concurrently_ server client+ mvar <- newEmptyMVar+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where- client = do+ client mvar = do waitS C.run cc1 (query "first") `shouldThrow` selector C.run cc2 (query "second") `shouldReturn` ()- server = S.run sc $ \conn -> do+ takeMVar mvar+ server mvar = S.run sc $ \conn -> do s <- acceptStream conn recvStream s 1024 `shouldReturn` "second" sendStream s "bye" closeStream s- delayedStop conn+ putMVar mvar ()
test/IOSpec.hs view
@@ -5,8 +5,8 @@ import Control.Monad import qualified Data.ByteString as BS import Test.Hspec-import UnliftIO.Async import UnliftIO.Concurrent+import qualified UnliftIO.Exception as E import Network.QUIC import qualified Network.QUIC.Client as C@@ -97,7 +97,7 @@ testRecvStreamClientStopFirst :: C.ClientConfig -> ServerConfig -> IO () -> IO () testRecvStreamClientStopFirst cc sc waitS = do mvar <- newEmptyMVar- void $ concurrently (client mvar) (server mvar)+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where aerr = ApplicationProtocolError 0 @@ -118,12 +118,11 @@ -- verify that client has stopped sending. assertEndOfStream strm putMVar mvar ()- stop conn testRecvStreamServerStopFirst :: C.ClientConfig -> ServerConfig -> IO () -> IO () testRecvStreamServerStopFirst cc sc waitS = do mvar <- newEmptyMVar- void $ concurrently (client mvar) (server mvar)+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where aerr = ApplicationProtocolError 0 @@ -142,12 +141,11 @@ assertEndOfStream strm resetStream strm aerr putMVar mvar ()- stop conn testSendRecv :: C.ClientConfig -> ServerConfig -> IO () -> Int -> IO () testSendRecv cc sc waitS times = do mvar <- newEmptyMVar- void $ concurrently (client mvar) (server mvar)+ E.bracket (forkIO $ server mvar) killThread $ \_ -> client mvar where client mvar = do waitS@@ -162,4 +160,3 @@ consumeBytes strm (10000 * times) assertEndOfStream strm putMVar mvar ()- stop conn