module Network.Web.Utils where
import Data.List
import Network.Socket
import Network.URI
import System.IO
uriHostName :: URI -> String
uriHostName uri = maybe "" uriRegName $ uriAuthority uri
toURLwoPort :: URI -> String
toURLwoPort uri = uriScheme uri ++ "//" ++ uriHostName uri ++ uriPath uri ++ uriQuery uri
data TCPInfo = TCPInfo {
myAddr :: HostName
, myPort :: ServiceName
, peerAddr :: HostName
, peerPort :: ServiceName
} deriving (Eq,Show)
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