module Network.TLS.Extra.Connection
( connectionClient
) where
import Crypto.Random
import Control.Applicative ((<$>))
import Control.Exception
import Data.Char
import System.IO
import Network.BSD
import Network.Socket
import Network.TLS
connectionClient :: CryptoRandomGen g => String -> String -> TLSParams -> g -> IO TLSCtx
connectionClient s p params rng = do
pn <- if and $ map isDigit $ p
then return $ fromIntegral $ (read p :: Int)
else servicePort <$> getServiceByName p "tcp"
he <- getHostByName s
h <- bracketOnError (socket AF_INET Stream defaultProtocol) sClose $ \sock -> do
connect sock (SockAddrInet pn (head $ hostAddresses he))
socketToHandle sock ReadWriteMode
client params rng h