webserver 0.1.1 → 0.2.0
raw patch · 7 files changed
+57/−16 lines, 7 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.Web.Utils: TCPInfo :: HostName -> ServiceName -> HostName -> ServiceName -> TCPInfo
+ Network.Web.Utils: data TCPInfo
+ Network.Web.Utils: getTCPInfo :: Socket -> IO TCPInfo
+ Network.Web.Utils: instance Eq TCPInfo
+ Network.Web.Utils: instance Show TCPInfo
+ Network.Web.Utils: myAddr :: TCPInfo -> HostName
+ Network.Web.Utils: myPort :: TCPInfo -> ServiceName
+ Network.Web.Utils: peerAddr :: TCPInfo -> HostName
+ Network.Web.Utils: peerPort :: TCPInfo -> ServiceName
Files
- Network/Web/HTTP.hs +6/−2
- Network/Web/Server.hs +1/−1
- Network/Web/Server/Basic.hs +0/−1
- Network/Web/Server/CGI.hs +0/−1
- Network/Web/Server/Params.hs +1/−1
- Network/Web/Utils.hs +36/−0
- webserver.cabal +13/−10
Network/Web/HTTP.hs view
@@ -24,6 +24,7 @@ import qualified Data.Map as Map hiding (Map) import Data.Maybe import IO hiding (try)+import System.IO.Error hiding (try) import Network.URI import Network.Web.Params import Text.Printf@@ -156,7 +157,8 @@ receive hdl = do mreq <- try $ receiveRequest hdl case mreq of- Left e -> if isEOFError e+ Left e -> if isEOFError e ||+ show (ioeGetErrorType e) == "resource vanished" then throw TerminatedByClient else return Nothing Right req -> return $ Just req@@ -228,7 +230,9 @@ sendResponseFields h ver persist rsp hPutStr h crlf sendResponseBody h ver rsp- hFlush h+ hFlush h `catch` ignore+ where+ ignore _ = return () sendStatusLine :: Handle -> Version -> Response -> IO () sendStatusLine h ver rsp = do
Network/Web/Server.hs view
@@ -1,5 +1,5 @@ {-|- A library for HTTP server.+ HTTP server library. -} module Network.Web.Server (connection, WebServer, WebConfig(..)) where
Network/Web/Server/Basic.hs view
@@ -15,7 +15,6 @@ import qualified Data.ByteString.Lazy.Char8 as LBS import Data.List import Data.Time-import Network.TCPInfo import Network.URI hiding (path) import Network.Web.Date import Network.Web.HTTP
Network/Web/Server/CGI.hs view
@@ -5,7 +5,6 @@ import Data.ByteString.Lazy.Char8 (ByteString) import qualified Data.ByteString.Lazy.Char8 as LBS import Data.Char-import Network.TCPInfo import Network.URI import Network.Web.HTTP import Network.Web.Server.Params
Network/Web/Server/Params.hs view
@@ -3,7 +3,7 @@ import Data.ByteString.Lazy.Char8 (ByteString) import Data.Time import Network.URI-import Network.TCPInfo+import Network.Web.Utils {-| The configuration for the basic web server.
Network/Web/Utils.hs view
@@ -3,7 +3,10 @@ -} module Network.Web.Utils where +import Data.List+import Network.Socket import Network.URI+import System.IO {-| Getting a hostname from 'URI'.@@ -16,3 +19,36 @@ -} toURLwoPort :: URI -> String toURLwoPort uri = uriScheme uri ++ "//" ++ uriHostName uri ++ uriPath uri ++ uriQuery uri++----------------------------------------------------------------++{-|+ TCP connection information.+-}+data TCPInfo = TCPInfo {+ -- | Local IP address+ myAddr :: HostName+ -- | Local port number+ , myPort :: ServiceName+ -- | Remote IP address+ , peerAddr :: HostName+ -- | Remote port number+ , peerPort :: ServiceName+ } deriving (Eq,Show)++{-|+ Getting TCP connection information.+-}+getTCPInfo :: Socket -> IO TCPInfo+getTCPInfo sock = do+ (Just vMyAddr, Just vMyPort) <- getSocketName sock >>= getInfo+ (Just vPeerAddr, Just vPeerPort) <- getPeerName sock >>= getInfo+ return TCPInfo { myAddr = strip vMyAddr+ , myPort = vMyPort+ , peerAddr = strip vPeerAddr+ , peerPort = vPeerPort}+ where+ getInfo = getNameInfo [NI_NUMERICHOST, NI_NUMERICSERV] True True+ strip x+ | "::ffff:" `isPrefixOf` x = drop 7 x+ | otherwise = x
webserver.cabal view
@@ -1,26 +1,29 @@ Name: webserver-Version: 0.1.1+Version: 0.2.0 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3 License-File: LICENSE Synopsis: HTTP server library-Description: A simple but practical library of HTTP server.+Description: A simple but practical library of HTTP server Category: Network Cabal-Version: >= 1.6 Build-Type: Simple library GHC-Options: -Wall -O2- Exposed-Modules: Network.Web.HTTP,- Network.Web.Server,- Network.Web.Server.Basic,+ Exposed-Modules: Network.Web.HTTP+ Network.Web.Server+ Network.Web.Server.Basic Network.Web.Utils- Other-Modules: Network.Web.Date,- Network.Web.Params,- Network.Web.Server.CGI,- Network.Web.Server.Lang,- Network.Web.Server.Params,+ Other-Modules: Network.Web.Date+ Network.Web.Params+ Network.Web.Server.CGI+ Network.Web.Server.Lang+ Network.Web.Server.Params Network.Web.Server.Range Build-Depends: base >= 4 && < 10, parsec >= 3, haskell98, network, bytestring, containers, filepath, time, unix, process, c10k+Source-Repository head+ Type: git+ Location: git://github.com/kazu-yamamoto/webserver.git