-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Abstraction over creating network connections with SOCKS5 and TLS
--   
--   This package provides an abstraction for communicating with
--   line-oriented network services while abstracting over the use of
--   SOCKS5 and TLS (via OpenSSL)
@package hookup
@version 0.1.0.0

-- | This module provides a uniform interface to network connections with
--   optional support for TLS and SOCKS.
module Hookup

-- | Parameters for connect.
data ConnectionParams
ConnectionParams :: HostName -> PortNumber -> Maybe SocksParams -> Maybe TlsParams -> ConnectionParams

-- | Destination host
[cpHost] :: ConnectionParams -> HostName

-- | Destination TCP port
[cpPort] :: ConnectionParams -> PortNumber

-- | Optional SOCKS5 parameters
[cpSocks] :: ConnectionParams -> Maybe SocksParams

-- | Optional TLS parameters
[cpTls] :: ConnectionParams -> Maybe TlsParams

-- | SOCKS5 connection parameters
data SocksParams
SocksParams :: HostName -> PortNumber -> SocksParams

-- | SOCKS server host
[spHost] :: SocksParams -> HostName

-- | SOCKS server port
[spPort] :: SocksParams -> PortNumber

-- | TLS connection parameters
data TlsParams
TlsParams :: Maybe FilePath -> Maybe FilePath -> Maybe FilePath -> String -> Bool -> TlsParams
[tpClientCertificate] :: TlsParams -> Maybe FilePath
[tpClientPrivateKey] :: TlsParams -> Maybe FilePath
[tpServerCertificate] :: TlsParams -> Maybe FilePath
[tpCipherSuite] :: TlsParams -> String
[tpInsecure] :: TlsParams -> Bool

-- | A connection to a network service along with its read buffer used for
--   line-oriented protocols. The connection could be a plain network
--   connection, SOCKS connected, or TLS.
data Connection

-- | Open network connection to TCP service specified by the given
--   parameters.
--   
--   Throws IOError, SocksError, ProtocolError,
--   ConnectionFailure
connect :: ConnectionParams -> IO Connection

-- | Receive a line from the network connection. Both "rn" and
--   "n" are recognized.
--   
--   Throws: ConnectionAbruptlyTerminated,
--   ConnectionFailure, IOError
recvLine :: Connection -> Int -> IO (Maybe ByteString)

-- | Send bytes on the network connection. Ensures that the whole message
--   is sent.
--   
--   Throws: IOError, ProtocolError
send :: Connection -> ByteString -> IO ()

-- | Close network connection.
close :: Connection -> IO ()

-- | Type for errors that can be thrown by this package.
data ConnectionFailure

-- | Failure during getAddrInfo resolving remote host
HostnameResolutionFailure :: IOError -> ConnectionFailure

-- | Failure during connect to remote host
ConnectionFailure :: [IOError] -> ConnectionFailure

-- | Failure during recvLine
LineTooLong :: ConnectionFailure

-- | Incomplete line during recvLine
LineTruncated :: ConnectionFailure
instance GHC.Show.Show Hookup.ConnectionFailure
instance GHC.Exception.Exception Hookup.ConnectionFailure
