messing around FastCGI. It is also intended to be run behind a
reverse-proxy so it doesn't have some facilities like logging,
client filtering or such like.
-Version: 0.3
+Version: 0.3.1
License: PublicDomain
License-File: COPYING
Author: PHO <pho at cielonegro dot org>
Library
Build-Depends:
- HsOpenSSL, base >= 4, bytestring, containers, dataenc,
+ HsOpenSSL, base >= 4 && < 5, bytestring, containers, dataenc,
directory, haskell-src, hxt, mtl, network, stm, time, unix,
zlib
Exposed-Modules:
+Changes from 0.3 to 0.3.1
+-------------------------
+* Network.HTTP.Lucu.Resource:
+ - Bugfix: getRemoteAddr' didn't work on little-endian architectures. (Thanks: Voker57)
+ - Bugfix: getRemoteAddr' didn't work for IPv6 network.
+ - New function: getRemoteHost
+
Changes from 0.2.1 to 0.3
-------------------------
* Added SSL support:
, getConfig
, getRemoteAddr
, getRemoteAddr'
+ , getRemoteHost
, getRemoteCertificate
, getRequest
, getMethod
import Control.Concurrent.STM
import Control.Monad.Reader
-import Data.Bits
import qualified Data.ByteString as Strict (ByteString)
import qualified Data.ByteString.Lazy as Lazy (ByteString)
import qualified Data.ByteString.Char8 as C8 hiding (ByteString)
-- you want a 'Network.Socket.SockAddr' instead of 'Prelude.String',
-- use 'getRemoteAddr'.
getRemoteAddr' :: Resource String
-getRemoteAddr' = do addr <- getRemoteAddr
- case addr of
- -- Network.Socket は IPv6 を考慮してゐないやうだ…
- SockAddrInet _ v4addr
- -> let b1 = (v4addr `shiftR` 24) .&. 0xFF
- b2 = (v4addr `shiftR` 16) .&. 0xFF
- b3 = (v4addr `shiftR` 8) .&. 0xFF
- b4 = v4addr .&. 0xFF
- in
- return $ concat $ intersperse "." $ map show [b4, b3, b2, b1]
- SockAddrUnix path
- -> return path
- _
- -> undefined
+getRemoteAddr' = do addr <- getRemoteAddr
+ (Just str, _) <- liftIO $! getNameInfo [NI_NUMERICHOST] True False addr
+ return str
+
+-- |Resolve an address to the remote host.
+getRemoteHost :: Resource String
+getRemoteHost = do addr <- getRemoteAddr
+ (Just str, _) <- liftIO $! getNameInfo [] True False addr
+ return str
-- | Return the X.509 certificate of the client, or 'Nothing' if:
--