webserver 0.6.0.1 → 0.7.0.0
raw patch · 5 files changed
+30/−11 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.Web.Server.Basic: serveHTTPMapIO :: Maybe FilePath -> Int -> ByteString -> (Request -> IO Path) -> IO ()
- Network.Web.Server.Params: BasicConfig :: (Request -> Path) -> (FilePath -> Maybe (Integer, Integer) -> IO ByteString) -> (FilePath -> IO (Maybe (Integer, UTCTime))) -> ByteString -> TCPInfo -> BasicConfig
+ Network.Web.Server.Params: BasicConfig :: (Request -> IO Path) -> (FilePath -> Maybe (Integer, Integer) -> IO ByteString) -> (FilePath -> IO (Maybe (Integer, UTCTime))) -> ByteString -> TCPInfo -> BasicConfig
- Network.Web.Server.Params: mapper :: BasicConfig -> Request -> Path
+ Network.Web.Server.Params: mapper :: BasicConfig -> Request -> IO Path
Files
- Network/Web/HTTP.hs +1/−1
- Network/Web/Server/Basic.hs +26/−8
- Network/Web/Server/CGI.hs +1/−0
- Network/Web/Server/Params.hs +1/−1
- webserver.cabal +1/−1
Network/Web/HTTP.hs view
@@ -26,7 +26,7 @@ import Network.Web.Params import Network.Web.URI import System.IO-import System.IO.Error hiding (try)+import System.IO.Error (isEOFError, ioeGetErrorType) import Text.Printf ----------------------------------------------------------------
Network/Web/Server/Basic.hs view
@@ -10,6 +10,7 @@ {-# OPTIONS -Wall #-} module Network.Web.Server.Basic (serveHTTP,+ serveHTTPMapIO, basicServer, module Network.Web.Server.Params) where @@ -46,6 +47,7 @@ {-| Run an HTTP server, using a default BasicConfig.+ If you need to perform IO in the site mapping function (e.g. to check for the existence of files), use 'serveHTTPMapIO', -} serveHTTP :: Maybe FilePath -- ^ Directory to write logfiles, "access.log" and "error.log". Will be created if it doesn't exist. -- if Nothing, errors will be written to stderr@@ -53,7 +55,20 @@ -> S.ByteString -- ^ Server name -> (Request -> Path) -- ^ site mapping function -> IO ()-serveHTTP m'logPath httpPort servName sitemap = do+serveHTTP m'logPath httpPort servName sitemap =+ serveHTTPMapIO m'logPath httpPort servName (return . sitemap)++{-|+ Run an HTTP server, using a default BasicConfig.+ Can perform IO in the site mapping function.+-}+serveHTTPMapIO :: Maybe FilePath -- ^ Directory to write logfiles, "access.log" and "error.log". Will be created if it doesn't exist.+ -- if Nothing, errors will be written to stderr+ -> Int -- ^ HTTP port+ -> S.ByteString -- ^ Server name+ -> (Request -> IO Path) -- ^ site mapping function, in IO+ -> IO ()+serveHTTPMapIO m'logPath httpPort servName sitemapIO = do (accHandler,errHandler,logwait) <- case m'logPath of Nothing -> return (const (return ()), hPutStrLn stderr, return ()) Just logPath -> do@@ -85,7 +100,7 @@ topHandler tcpi = basicServer $ defaultConfig { serverName = servName , tcpInfo = tcpi- , mapper = sitemap+ , mapper = sitemapIO } runserver = withSocketsDo $ do sock <- listenOn (PortNumber $ fromIntegral httpPort)@@ -204,7 +219,7 @@ lookupAndParseDate key req = lookupField key req >>= parseDate tryGet :: BasicConfig -> Request -> [String] -> IO (Maybe Response)-tryGet cnf req langs = tryGet' $ mapper cnf req+tryGet cnf req langs = tryGet' =<< mapper cnf req where tryGet' None = return Nothing tryGet' (File file) = tryGetFile cnf req file langs@@ -276,7 +291,7 @@ ---------------------------------------------------------------- tryHead :: BasicConfig -> Request -> [String] -> IO (Maybe Response)-tryHead cnf req langs = tryHead' (mapper cnf req)+tryHead cnf req langs = tryHead' =<< mapper cnf req where tryHead' None = return Nothing tryHead' (PathCGI _) = return Nothing@@ -308,9 +323,10 @@ else Just uri { uriPath = path `S.append` "/" } tryRedirect :: BasicConfig -> Request -> [String] -> IO (Maybe Response)-tryRedirect cnf req langs = maybe (return Nothing)- (\ruri -> tryRedirect' (mapper cnf $ rreq ruri) ruri)- (redirectURI uri)+tryRedirect cnf req langs = case redirectURI uri of+ Nothing -> return Nothing+ Just ruri -> do path <- mapper cnf $ rreq ruri+ tryRedirect' path ruri where uri = reqURI req rreq ruri = req {reqURI = ruri}@@ -330,7 +346,9 @@ ---------------------------------------------------------------- tryPost :: BasicConfig -> Request -> IO Response-tryPost cnf req = case mapper cnf req of+tryPost cnf req = do+ path <- mapper cnf req+ case path of PathCGI cgi -> fromMaybe undefined <$> tryGetCGI cnf req cgi Handler resp-> resp _ -> return responseBadRequest
Network/Web/Server/CGI.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE OverloadedStrings, CPP #-} +{-# OPTIONS_GHC -fno-warn-dodgy-imports #-} module Network.Web.Server.CGI (tryGetCGI) where import Prelude hiding (catch)
Network/Web/Server/Params.hs view
@@ -17,7 +17,7 @@ -} data BasicConfig = BasicConfig { -- | A mapper from 'URI' to 'Path'.- mapper :: Request -> Path+ mapper :: Request -> IO Path -- | Resource obtaining function. The second argument is -- (offset of the resource, and length from the offset). , obtain :: FilePath -> Maybe (Integer,Integer) -> IO L.ByteString
webserver.cabal view
@@ -1,5 +1,5 @@ Name: webserver-Version: 0.6.0.1+Version: 0.7.0.0 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: John W. Lato <jwlato@gmail.com> License: BSD3