]> gitweb @ CieloNegro.org - Lucu.git/blob - Network/HTTP/Lucu/Httpd.hs
data/mime.types
[Lucu.git] / Network / HTTP / Lucu / Httpd.hs
1 module Network.HTTP.Lucu.Httpd
2     ( runHttpd        -- Config -> ResTree -> IO ()
3     )
4     where
5
6 import           Control.Concurrent
7 import           Control.Concurrent.STM
8 import qualified Data.ByteString.Lazy.Char8 as B
9 import           Data.ByteString.Lazy.Char8 (ByteString)
10 import           Network
11 import           Network.HTTP.Lucu.Config
12 import           Network.HTTP.Lucu.Interaction
13 import           Network.HTTP.Lucu.RequestReader
14 import           Network.HTTP.Lucu.Resource
15 import           Network.HTTP.Lucu.Resource.Tree
16 import           Network.HTTP.Lucu.ResponseWriter
17 import           System.IO
18
19
20 runHttpd :: Config -> ResTree -> IO ()
21 runHttpd cnf table
22     = withSocketsDo $
23       do so <- listenOn (cnfServerPort cnf)
24          loop so
25     where
26       loop :: Socket -> IO ()
27       loop so
28           = do (h, host, _) <- accept so
29                tQueue       <- newInteractionQueue
30                readerTID    <- forkIO $ requestReader cnf table h host tQueue
31                writerTID    <- forkIO $ responseWriter cnf h tQueue readerTID
32                loop so