tighttp-0.0.0.0: examples/servers.hs
{-# LANGUAGE OverloadedStrings, PackageImports #-}
import Control.Applicative
import "monads-tf" Control.Monad.State
import Control.Concurrent
import Data.HandleLike
import Data.Pipe
import System.IO
import System.Environment
import Network
import Network.PeyoTLS.Server
import Network.PeyoTLS.ReadFile
import Network.TigHTTP.Server
import Network.TigHTTP.Types
import "crypto-random" Crypto.Random
import qualified Data.ByteString.Char8 as BSC
import qualified Data.ByteString.Lazy as LBS
main :: IO ()
main = do
as <- getArgs
k <- readKey "localhost.sample_key"
c <- readCertificateChain ["localhost.sample_crt"]
g0 <- cprgCreate <$> createEntropyPool :: IO SystemRNG
soc <- listenOn $ PortNumber 443
void . (`runStateT` g0) . forever $ do
(h, _, _) <- liftIO $ accept soc
g <- StateT $ return . cprgFork
void . liftIO . forkIO . (`run` g) $ do
t <- open h ["TLS_RSA_WITH_AES_128_CBC_SHA"] [(k, c)]
Nothing
_ <- getRequest t
putResponse t
. (response :: LBS.ByteString -> Response Pipe (TlsHandle Handle SystemRNG))
. LBS.fromChunks $ map BSC.pack as
hlClose t