module PeerResolve ( peerKeyToResolvedNames , resolvePeer , parseAddress , strip_brackets , withPort ) where import Data.List ( nub ) import Data.Text ( Text ) import Network.Socket ( SockAddr(..) ) import System.Endian ( fromBE32, toBE32 ) import System.IO.Error ( isDoesNotExistError ) import Control.Exception ( handle, ErrorCall(..) ) import qualified Network.BSD as BSD import qualified Data.Text as Text import Control.Concurrent import Control.Concurrent.STM import Control.Monad import Data.Maybe import System.IO.Unsafe import GetHostByAddr import DNSCache import ConnectionKey import ControlMaybe {-# NOINLINE global_dns_cache #-} global_dns_cache :: DNSCache global_dns_cache = unsafePerformIO $ newDNSCache resolvePeer :: Text -> IO [SockAddr] resolvePeer addrtext = forwardResolve global_dns_cache addrtext peerKeyToResolvedNames :: ConnectionKey -> IO [Text] peerKeyToResolvedNames k@(ClientKey { localAddress=addr }) = return [] peerKeyToResolvedNames k@(PeerKey { callBackAddress=addr }) = do reverseResolve global_dns_cache addr