module HSP.CGI.RunCGI (runCGI) where
import Prelude hiding (catch)
import System.IO (stdout, hPutStr)
import Control.Exception
import HSP hiding (catch)
import HSP.Env.Request (Request)
import HSP.CGI.CGIEnv (getCGIReq)
import HSP.CGI.NumberGen (mkNumberGen)
runCGI :: HSP XML -> IO ()
runCGI page
= (getCGIReq >>= evalCGI page >>= sendCGIResponse)
`catch` handleError
`finally` return ()
evalCGI :: HSP XML -> Request -> IO CGIResponse
evalCGI page req = do
gen <- mkNumberGen
runHSP page (HSPEnv req gen) >>= return . cgiResponse . renderXML
type CGIResponse = String
cgiResponse :: String -> CGIResponse
cgiResponse body =
"Content-length: " ++ show (length body) ++
"\nContent-type: text/html" ++
"\n\n" ++
body
sendCGIResponse :: CGIResponse -> IO ()
sendCGIResponse = hPutStr stdout
handleError :: Exception -> IO ()
handleError ex = case ex of
_ -> sendCGIResponse $ "Error: " ++ show ex