put server/client in core

This commit is contained in:
Vincent Hanquez 2011-03-01 20:01:40 +00:00
parent f4cc8999db
commit 353783abdf
5 changed files with 17 additions and 21 deletions

View file

@ -25,17 +25,12 @@ import Network.TLS.Cipher
import Network.TLS.Compression
import Network.TLS.Struct
import Network.TLS.State
import Network.TLS.SRandom
import Network.TLS.Core
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
import System.IO (Handle, hFlush)
import System.IO (hFlush)
import Data.List (find)
client :: MonadIO m => TLSParams -> SRandomGen -> Handle -> m TLSCtx
client params rng handle = liftIO $ newCtx handle params state
where state = (newTLSState rng) { stClientContext = True }
processServerInfo :: MonadIO m => TLSCtx -> Packet -> m ()
processServerInfo ctx (Handshake (ServerHello ver _ _ cipher _ _)) = do
let ciphers = pCiphers $ getParams ctx

View file

@ -16,6 +16,8 @@ module Network.TLS.Core
, whileStatus
, sendPacket
, recvPacket
, client
, server
, bye
, getParams
, getHandle
@ -36,7 +38,6 @@ import qualified Data.ByteString as B
import Control.Applicative ((<$>))
import Control.Concurrent.MVar
--import Control.Monad (when, unless)
import Control.Monad.State
import System.IO (Handle, hSetBuffering, BufferMode(..))
@ -127,6 +128,14 @@ sendPacket ctx pkt = do
dataToSend <- usingState_ ctx $ writePacket pkt
liftIO $ B.hPut (ctxHandle ctx) dataToSend
client :: MonadIO m => TLSParams -> SRandomGen -> Handle -> m TLSCtx
client params rng handle = liftIO $ newCtx handle params state
where state = (newTLSState rng) { stClientContext = True }
server :: MonadIO m => TLSParams -> SRandomGen -> Handle -> m TLSCtx
server params rng handle = liftIO $ newCtx handle params state
where state = (newTLSState rng) { stClientContext = False }
getParams :: TLSCtx -> TLSParams
getParams = ctxParams

View file

@ -11,9 +11,7 @@
--
module Network.TLS.Server
( server
-- * API, warning probably subject to change
, listen
( listen
, sendData
, recvData
) where
@ -27,14 +25,9 @@ import Network.TLS.Core
import Network.TLS.Cipher
import Network.TLS.Struct
import Network.TLS.State
import Network.TLS.SRandom
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
import System.IO (Handle, hFlush)
server :: MonadIO m => TLSParams -> SRandomGen -> Handle -> m TLSCtx
server params rng handle = liftIO $ newCtx handle params state
where state = (newTLSState rng) { stClientContext = False }
import System.IO (hFlush)
handleClientHello :: MonadIO m => TLSCtx -> Handshake -> m ()
handleClientHello ctx (ClientHello ver _ _ ciphers compressionID _) = do

View file

@ -11,7 +11,6 @@ import qualified Data.ByteString.Lazy as L
import Control.Concurrent (forkIO)
import Control.Exception (finally, try, throw)
import Control.Monad (when, forever)
import Control.Monad.Trans (lift)
import Data.Char (isDigit)
@ -90,7 +89,7 @@ clientProcess certs handle dsthandle _ = do
, pCertificates = certs
, pWantClientCert = False
}
ctx <- S.server serverstate rng handle
ctx <- server serverstate rng handle
tlsserver ctx dsthandle
--S.runTLSServer (tlsserver handle dsthandle) serverstate rng
@ -230,7 +229,7 @@ doClient pargs = do
(StunnelSocket dst) <- connectAddressDescription dstaddr
dsth <- socketToHandle dst ReadWriteMode
dstctx <- C.client clientstate rng dsth
dstctx <- client clientstate rng dsth
_ <- forkIO $ finally
(tlsclient srch dstctx)
(hClose srch >> hClose dsth)

View file

@ -135,8 +135,8 @@ setup (clientState, serverState) = do
startQueue <- newChan
resultQueue <- newChan
cCtx <- C.client clientState clientRNG cHandle
sCtx <- S.server serverState serverRNG sHandle
cCtx <- client clientState clientRNG cHandle
sCtx <- server serverState serverRNG sHandle
return (cCtx, sCtx, startQueue, resultQueue)