network-conduit-tls 1.0.4.2 → 1.1.0
raw patch · 4 files changed
+44/−42 lines, 4 filesdep +conduit-extradep +streaming-commonsdep −network-conduitdep ~conduitdep ~network
Dependencies added: conduit-extra, streaming-commons
Dependencies removed: network-conduit
Dependency ranges changed: conduit, network
Files
- Data/Conduit/Network/TLS.hs +34/−33
- Data/Conduit/Network/TLS/Internal.hs +1/−1
- network-conduit-tls.cabal +5/−4
- test/main.hs +4/−4
Data/Conduit/Network/TLS.hs view
@@ -37,8 +37,9 @@ import Filesystem (readFile) import qualified Data.ByteString.Lazy as L import qualified Network.TLS as TLS-import Data.Conduit.Network (HostPreference, Application, sinkSocket, runTCPServerWithHandle, ConnectionHandle(..), serverSettings, sourceSocket)-import Data.Conduit.Network.Internal (AppData (..))+import Data.Conduit.Network (sinkSocket, runTCPServerWithHandle, serverSettings, sourceSocket)+import Data.Streaming.Network.Internal (AppData (..), HostPreference)+import Data.Streaming.Network (ConnectionHandle, safeRecv) import Data.Conduit.Network.TLS.Internal import Data.Conduit (yield, awaitForever, Producer, Consumer) import qualified Data.Conduit.List as CL@@ -112,7 +113,7 @@ } } -runTCPServerTLS :: TLSConfig -> Application IO -> IO ()+runTCPServerTLS :: TLSConfig -> (AppData -> IO ()) -> IO () runTCPServerTLS TLSConfig{..} app = do creds <- readCreds tlsCertData @@ -122,14 +123,14 @@ -- convert tls settings to regular conduit network ones settings = serverSettings tlsPort tlsHost -- (const $ return () ) tlsNeedLocalAddr - wrapApp creds = ConnectionHandle app'+ wrapApp creds = app' where app' socket addr mlocal = do ctx <- serverHandshake socket creds app (tlsAppData ctx addr mlocal) -type ApplicationStartTLS = (AppData IO, Application IO -> IO ()) -> IO ()+type ApplicationStartTLS = (AppData, (AppData -> IO ()) -> IO ()) -> IO () -- | run a server un-crypted but also pass a call-back to trigger a StartTLS handshake -- on the underlying connection@@ -151,14 +152,14 @@ -- convert tls settings to regular conduit network ones settings = serverSettings tlsPort tlsHost -- (const $ return () ) tlsNeedLocalAddr - wrapApp creds = ConnectionHandle clearapp+ wrapApp creds = clearapp where clearapp socket addr mlocal = let -- setup app data for the clear part of the connection clearData = AppData- { appSource = sourceSocket socket- , appSink = sinkSocket socket- , appSockAddr = addr- , appLocalAddr = mlocal+ { appRead' = safeRecv socket 4096+ , appWrite' = sendAll socket+ , appSockAddr' = addr+ , appLocalAddr' = mlocal } -- wrap up the current connection with TLS startTls = \app' -> do@@ -184,12 +185,12 @@ tlsAppData :: TLS.Context -- ^ a TLS context -> SockAddr -- ^ remote address -> Maybe SockAddr -- ^ local address- -> AppData IO+ -> AppData tlsAppData ctx addr mlocal = AppData- { appSource = forever $ lift (TLS.recvData ctx) >>= yield- , appSink = CL.mapM_ $ TLS.sendData ctx . L.fromChunks . return- , appSockAddr = addr- , appLocalAddr = mlocal+ { appRead' = TLS.recvData ctx+ , appWrite' = TLS.sendData ctx . L.fromChunks . return+ , appSockAddr' = addr+ , appLocalAddr' = mlocal } -- taken from stunnel example in tls-extra@@ -225,7 +226,7 @@ -- | Settings type for TLS client connection. -- -- Since 1.0.2-data TLSClientConfig (m :: * -> *) = TLSClientConfig+data TLSClientConfig = TLSClientConfig { tlsClientPort :: Int -- ^ --@@ -259,7 +260,7 @@ -- Since 1.0.2 tlsClientConfig :: Int -- ^ port -> S.ByteString -- ^ host- -> TLSClientConfig m+ -> TLSClientConfig tlsClientConfig port host = TLSClientConfig { tlsClientPort = port , tlsClientHost = host@@ -273,9 +274,9 @@ -- -- Since 1.0.2 runTLSClient :: (MonadIO m, MonadBaseControl IO m)- => TLSClientConfig m- -> Application m- -> m ()+ => TLSClientConfig+ -> (AppData -> m a)+ -> m a runTLSClient TLSClientConfig {..} app = do context <- maybe (liftIO NC.initConnectionContext) return tlsClientConnectionContext let params = NC.ConnectionParams@@ -291,10 +292,10 @@ (NC.connectTo context params) NC.connectionClose (\conn -> run $ app AppData- { appSource = sourceConnection conn- , appSink = sinkConnection conn- , appSockAddr = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME- , appLocalAddr = Nothing+ { appRead' = NC.connectionGetChunk conn+ , appWrite' = NC.connectionPut conn+ , appSockAddr' = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME+ , appLocalAddr' = Nothing }) @@ -302,7 +303,7 @@ -- but provide also a call back to trigger a StartTLS handshake on the connection -- -- Since 1.0.2-runTLSClientStartTLS :: TLSClientConfig IO+runTLSClientStartTLS :: TLSClientConfig -> ApplicationStartTLS -> IO () runTLSClientStartTLS TLSClientConfig {..} app = do@@ -318,18 +319,18 @@ NC.connectionClose (\conn -> run $ app ( AppData- { appSource = sourceConnection conn- , appSink = sinkConnection conn- , appSockAddr = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME- , appLocalAddr = Nothing+ { appRead' = NC.connectionGetChunk conn+ , appWrite' = NC.connectionPut conn+ , appSockAddr' = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME+ , appLocalAddr' = Nothing } , \app' -> do NC.connectionSetSecure context conn tlsClientTLSSettings app' AppData- { appSource = sourceConnection conn- , appSink = sinkConnection conn- , appSockAddr = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME- , appLocalAddr = Nothing+ { appRead' = NC.connectionGetChunk conn+ , appWrite' = NC.connectionPut conn+ , appSockAddr' = SockAddrInet (fromIntegral tlsClientPort) 0 -- FIXME+ , appLocalAddr' = Nothing } ) )
Data/Conduit/Network/TLS/Internal.hs view
@@ -5,7 +5,7 @@ ) where import Prelude hiding (FilePath)-import Data.Conduit.Network (HostPreference)+import Data.Streaming.Network (HostPreference) import qualified Data.ByteString as S -- structure providing access to certificate and key data through call backs
network-conduit-tls.cabal view
@@ -1,5 +1,5 @@ name: network-conduit-tls-version: 1.0.4.2+version: 1.1.0 synopsis: Create TLS-aware network code with conduits description: Uses the tls package for a pure-Haskell implementation. homepage: https://github.com/snoyberg/conduit@@ -19,14 +19,15 @@ , system-fileio >= 0.3 , bytestring >= 0.9 , tls >= 1.2.2- , network-conduit >= 1.0- , conduit >= 1.0+ , conduit-extra >= 1.1+ , conduit >= 1.1 , network , transformers , cprng-aes , connection , monad-control , data-default+ , streaming-commons test-suite test hs-source-dirs: test@@ -34,7 +35,7 @@ type: exitcode-stdio-1.0 cpp-options: -DTEST build-depends: conduit- , network-conduit+ , conduit-extra , connection , base , mtl
test/main.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} import Test.HUnit import Data.Conduit-import Data.Conduit.Network (HostPreference(..), appSource, appSink)+import Data.Conduit.Network (appSource, appSink) import Data.Conduit.Network.TLS import Control.Concurrent (forkIO, threadDelay, killThread) import qualified Network.Connection as NC@@ -19,12 +19,12 @@ serverConfig :: TLSConfig-serverConfig = tlsConfigBS HostIPv4 4242 testCertificateRaw testKeyRaw +serverConfig = tlsConfigBS "*4" 4242 testCertificateRaw testKeyRaw -clientConfig :: TLSClientConfig IO+clientConfig :: TLSClientConfig clientConfig = tlsClientConfig 4242 "127.0.0.1" -clientConfigNoCA :: TLSClientConfig IO +clientConfigNoCA :: TLSClientConfig clientConfigNoCA = clientConfig {tlsClientTLSSettings = NC.TLSSettingsSimple True False False} testSimpleServerClient :: IO ()