happstack-server 7.1.3 → 7.1.4
raw patch · 2 files changed
+40/−39 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Happstack.Server.Internal.Socket: sockAddrToHostName :: SockAddr -> HostName
+ Happstack.Server.Internal.Socket: sockAddrToPeer :: SockAddr -> (HostName, PortNumber)
Files
happstack-server.cabal view
@@ -1,5 +1,5 @@ Name: happstack-server-Version: 7.1.3+Version: 7.1.4 Synopsis: Web related tools and services. Description: Happstack Server provides an HTTP server and a rich set of functions for routing requests, handling query parameters, generating responses, working with cookies, serving files, and more. For in-depth documentation see the Happstack Crash Course <http://happstack.com/docs/crashcourse/index.html> License: BSD3
src/Happstack/Server/Internal/Socket.hs view
@@ -4,7 +4,7 @@ #endif module Happstack.Server.Internal.Socket ( acceptLite- , sockAddrToHostName+ , sockAddrToPeer ) where import Data.List (intersperse)@@ -14,10 +14,6 @@ import Language.Haskell.TH.Syntax #endif -import qualified Network as N- ( PortID(PortNumber)- , socketPort- ) import qualified Network.Socket as S ( Socket(..) , PortNumber()@@ -56,44 +52,49 @@ acceptLite :: S.Socket -> IO (S.Socket, S.HostName, S.PortNumber) acceptLite sock = do (sock', addr) <- S.accept sock- let port = getPort addr- let peer = sockAddrToHostName addr+ let (peer, port) = sockAddrToPeer addr return (sock', peer, port) -getPort :: S.SockAddr -> S.PortNumber-getPort addr =- case addr of- (S.SockAddrInet p _) -> p- (S.SockAddrInet6 p _ _ _ ) -> p- _ -> error "Unsupported socket"--sockAddrToHostName :: S.SockAddr -> S.HostName-sockAddrToHostName addr =+sockAddrToPeer :: S.SockAddr -> (S.HostName, S.PortNumber)+sockAddrToPeer addr = #ifdef TEMPLATE_HASKELL $(if supportsIPv6- then- return $ CaseE (VarE (mkName "addr"))- [Match- (ConP (mkName "S.SockAddrInet")- [WildP,VarP (mkName "ha")])- (NormalB (AppE (VarE (mkName "showHostAddress"))- (VarE (mkName "ha")))) []- ,Match (ConP (mkName "S.SockAddrInet6") [WildP,WildP,VarP (mkName "ha"),WildP])- (NormalB (AppE (VarE (mkName "showHostAddress6")) (VarE (mkName "ha")))) []- ,Match WildP (NormalB (AppE (VarE (mkName "error")) (LitE (StringL "Unsupported socket")))) []]- -- the above mess is the equivalent of this:- {-[| case addr of- (S.SockAddrInet _ ha) -> showHostAddress ha- (S.SockAddrInet6 _ _ ha _) -> showHostAddress6 ha- _ -> error "Unsupported socket"- |]-}- else- [| case addr of- (S.SockAddrInet _ ha) -> showHostAddress ha- _ -> error "Unsupported socket"- |])+ then+ return $ CaseE (VarE (mkName "addr"))+ [ Match+ (ConP (mkName "S.SockAddrInet")+ [VarP (mkName "p"),VarP (mkName "ha")])+ (NormalB+ (TupE+ [(AppE (VarE (mkName "showHostAddress"))+ (VarE (mkName "ha")))+ , VarE (mkName "p")+ ])) []+ , Match (ConP (mkName "S.SockAddrInet6")+ [VarP (mkName "p"),WildP,VarP (mkName "ha"),WildP])+ (NormalB+ (TupE+ [ (AppE+ (VarE (mkName "showHostAddress6"))+ (VarE (mkName "ha")))+ , VarE (mkName "p")+ ])) []+ , Match WildP+ (NormalB (AppE (VarE (mkName "error"))+ (LitE (StringL "Unsupported socket")))) []]+ -- the above mess is the equivalent of this:+ {-[| case addr of+ (S.SockAddrInet p ha) -> (showHostAddress ha, p)+ (S.SockAddrInet6 p _ ha _ ) -> (showHostAddress6 ha, p)+ _ -> error "Unsupported socket"+ |]-}+ else+ [| case addr of+ (S.SockAddrInet p ha) -> (showHostAddress ha, p)+ _ -> error "Unsupported socket"+ |]) #else case addr of- (S.SockAddrInet _ ha) -> showHostAddress ha+ (S.SockAddrInet p ha) -> (showHostAddress ha, p) _ -> error "Unsupported socket" #endif