@@ -38,6 +38,7 @@ import Control.Monad (unless)
3838import Crypto.Random.API (getSystemRandomGen)
3939import Control.Exception (Exception, throwIO)
4040import Data.Typeable (Typeable)
41+import qualified Data.Conduit.Binary as CB
4142
4243data TLSSettings = TLSSettings
4344 { certFile :: FilePath
@@ -104,7 +105,7 @@ runTLSSocket TLSSettings {..} set sock app = do
104105 { TLS.backendFlush = return ()
105106 , TLS.backendClose = return ()
106107 , TLS.backendSend = \bs -> C.yield bs C.$$ toClient
107− , TLS.backendRecv = getNext . takeMost
108+ , TLS.backendRecv = getNext . fmap (B.concat . L.toChunks) . CB.take
108109 }
109110 params
110111 gen
@@ -177,13 +178,3 @@ readPrivateKey filepath = do
177178 where parseKey (Right pems) = map (fmap (TLS.PrivRSA . snd) . KeyRSA.decodePrivate . L.fromChunks . (:[]) . PEM.pemContent)
178179 $ filter ((== "RSA PRIVATE KEY") . PEM.pemName) pems
179180 parseKey (Left err) = error $ "Cannot parse PEM file: " ++ err
180−
181−takeMost :: Monad m => Int -> C.Sink B.ByteString m B.ByteString
182−takeMost i =
183− C.await >>= maybe (return B.empty) go
184− where
185− go bs = do
186− unless (B.null y) $ C.leftover y
187− return x
188− where
189− (x, y) = B.splitAt i bs