diff options
| author | hallgren <hallgren@chalmers.se> | 2010-11-26 14:30:51 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2010-11-26 14:30:51 +0000 |
| commit | 72d2d9b204568b3683c29dea0ae794d3a524f2ee (patch) | |
| tree | f392cb3859e2a173d17a820ae3a6294f4386a755 /src/server/pgf-http.hs | |
| parent | 75ad59b1217e4b81d19fed6eadf4fc80d3ebd2f1 (diff) | |
Split pgf-server into pgf-fcgi and pgf-http.
The dependency on the fastcgi package made pgf-server difficult to compile, so
it is now split into
- pgf-fgci (main module in pgf-fcgi.hs), which is built only if fastcgi is
already installed or if you turn on the fastcgi flag (e.g. by doing
'cabal install -f fastcgi').
- pgf-http (main module in pgf-http.hs) which is always built (and hopefully
has no problematic dependencies.)
The modules FastCGIUtils and PGFService no longer depend on fastcgi.
Diffstat (limited to 'src/server/pgf-http.hs')
| -rw-r--r-- | src/server/pgf-http.hs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/server/pgf-http.hs b/src/server/pgf-http.hs new file mode 100644 index 000000000..ff356c6e7 --- /dev/null +++ b/src/server/pgf-http.hs @@ -0,0 +1,38 @@ + +import Network.CGI(requestMethod,getVarWithDefault,logCGI,handleErrors,liftIO) +import System.Environment(getArgs) +import System.Directory(getDirectoryContents) +import System.FilePath(takeExtension,takeFileName,takeDirectory) + +import RunHTTP(runHTTP) +import ServeStaticFile(serveStaticFile) +import PGFService(cgiMain',getPath,stderrToFile,logFile,newPGFCache) +import FastCGIUtils(outputJSONP,handleCGIErrors) + +main :: IO () +main = do stderrToFile logFile + cache <- newPGFCache + args <- getArgs + port <- case args of + [] -> return 41296 + [port] -> readIO port + httpMain cache port + +httpMain cache port = runHTTP port (do log ; serve =<< getPath) + where + log = do method <- requestMethod + uri <- getVarWithDefault "REQUEST_URI" "-" + logCGI $ method++" "++uri + + serve path = + handleErrors . handleCGIErrors $ + if takeExtension path==".pgf" + then cgiMain' cache path + else if takeFileName path=="grammars.cgi" + then grammarList (takeDirectory path) + else serveStaticFile path + + grammarList dir = + do paths <- liftIO $ getDirectoryContents dir + let pgfs = [path|path<-paths, takeExtension path==".pgf"] + outputJSONP pgfs |
