Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Network.Connection.Compat
Description
Synopsis
- connectTo :: ConnectionContext -> ConnectionParams -> IO Connection
- data ConnectionContext
- data Connection
- data TLSSettings
- type SockSettings = ProxySettings
- data ProxySettings
- = SockSettingsSimple HostName PortNumber
- | SockSettingsEnvironment (Maybe String)
- | OtherProxy HostName PortNumber
- data ConnectionParams = ConnectionParams {}
- data HostCannotConnect = HostCannotConnect String [IOException]
- data HostNotResolved = HostNotResolved String
- data LineTooLong = LineTooLong
- connectionSessionManager :: Manager -> SessionManager
- initConnectionContext :: IO ConnectionContext
- connectFromHandle :: ConnectionContext -> Handle -> ConnectionParams -> IO Connection
- connectFromSocket :: ConnectionContext -> Socket -> ConnectionParams -> IO Connection
- connectionPut :: Connection -> ByteString -> IO ()
- connectionGetExact :: Connection -> Int -> IO ByteString
- connectionGet :: Connection -> Int -> IO ByteString
- connectionGetChunk :: Connection -> IO ByteString
- connectionGetChunk' :: Connection -> (ByteString -> (a, ByteString)) -> IO a
- connectionWaitForInput :: Connection -> Int -> IO Bool
- connectionGetLine :: Int -> Connection -> IO ByteString
- connectionClose :: Connection -> IO ()
- connectionSetSecure :: ConnectionContext -> Connection -> TLSSettings -> IO ()
- connectionIsSecure :: Connection -> IO Bool
Documentation
data ConnectionContext #
Shared values (certificate store, sessions, ..) between connections
At the moment, this is only strictly needed to shared sessions and certificates when using a TLS enabled connection.
data Connection #
This opaque type represent a connection to a destination.
data TLSSettings #
TLS Settings that can be either expressed as simple settings, or as full blown TLS.Params settings.
Unless you need access to parameters that are not accessible through the simple settings, you should use TLSSettingsSimple.
Constructors
TLSSettingsSimple | |
Fields
| |
TLSSettings ClientParams | full blown TLS Settings directly using TLS.Params. for power users. |
Instances
Show TLSSettings | |
Defined in Network.Connection.Types Methods showsPrec :: Int -> TLSSettings -> ShowS # show :: TLSSettings -> String # showList :: [TLSSettings] -> ShowS # | |
Default TLSSettings | |
Defined in Network.Connection.Types Methods def :: TLSSettings # |
type SockSettings = ProxySettings #
data ProxySettings #
Proxy settings for the connection.
OtherProxy handles specific application-level proxies like HTTP proxies.
The simple SOCKS settings is just the hostname and portnumber of the SOCKS proxy server.
That's for now the only settings in the SOCKS package, socks password, or any sort of other authentications is not yet implemented.
Constructors
SockSettingsSimple HostName PortNumber | |
SockSettingsEnvironment (Maybe String) | |
OtherProxy HostName PortNumber |
data ConnectionParams #
Connection Parameters to establish a Connection.
The strict minimum is an hostname and the port.
If you need to establish a TLS connection, you should make sure connectionUseSecure is correctly set.
If you need to connect through a SOCKS, you should make sure connectionUseSocks is correctly set.
Constructors
ConnectionParams | |
Fields
|
data HostCannotConnect #
Exception raised when the connect failed
Constructors
HostCannotConnect String [IOException] |
Instances
Exception HostCannotConnect | |
Defined in Network.Connection Methods toException :: HostCannotConnect -> SomeException # | |
Show HostCannotConnect | |
Defined in Network.Connection Methods showsPrec :: Int -> HostCannotConnect -> ShowS # show :: HostCannotConnect -> String # showList :: [HostCannotConnect] -> ShowS # |
data HostNotResolved #
Exception raised when there's no resolution for a specific host
Constructors
HostNotResolved String |
Instances
Exception HostNotResolved | |
Defined in Network.Connection Methods toException :: HostNotResolved -> SomeException # | |
Show HostNotResolved | |
Defined in Network.Connection Methods showsPrec :: Int -> HostNotResolved -> ShowS # show :: HostNotResolved -> String # showList :: [HostNotResolved] -> ShowS # |
data LineTooLong #
This is the exception raised if we reached the user specified limit for the line in ConnectionGetLine.
Constructors
LineTooLong |
Instances
Exception LineTooLong | |
Defined in Network.Connection Methods toException :: LineTooLong -> SomeException # fromException :: SomeException -> Maybe LineTooLong # displayException :: LineTooLong -> String # | |
Show LineTooLong | |
Defined in Network.Connection Methods showsPrec :: Int -> LineTooLong -> ShowS # show :: LineTooLong -> String # showList :: [LineTooLong] -> ShowS # |
connectionSessionManager :: Manager -> SessionManager #
initConnectionContext :: IO ConnectionContext #
Initialize the library with shared parameters between connection.
connectFromHandle :: ConnectionContext -> Handle -> ConnectionParams -> IO Connection #
Use an already established handle to create a connection object.
if the TLS Settings is set, it will do the handshake with the server. The SOCKS settings have no impact here, as the handle is already established
connectFromSocket :: ConnectionContext -> Socket -> ConnectionParams -> IO Connection #
Use an already established handle to create a connection object.
if the TLS Settings is set, it will do the handshake with the server. The SOCKS settings have no impact here, as the handle is already established
connectionPut :: Connection -> ByteString -> IO () #
Put a block of data in the connection.
connectionGetExact :: Connection -> Int -> IO ByteString #
Get exact count of bytes from a connection.
The size argument is the exact amount that must be returned to the user.
The call will wait until all data is available. Hence, it behaves like
hGet
.
On end of input, connectionGetExact
will throw an isEOFError
exception.
connectionGet :: Connection -> Int -> IO ByteString #
Get some bytes from a connection.
The size argument is just the maximum that could be returned to the user.
The call will return as soon as there's data, even if there's less
than requested. Hence, it behaves like hGetSome
.
On end of input, connectionGet
returns 0, but subsequent calls will throw
an isEOFError
exception.
connectionGetChunk :: Connection -> IO ByteString #
Get the next block of data from the connection.
connectionGetChunk' :: Connection -> (ByteString -> (a, ByteString)) -> IO a #
Like connectionGetChunk
, but return the unused portion to the buffer,
where it will be the next chunk read.
connectionWaitForInput :: Connection -> Int -> IO Bool #
Wait for input to become available on a connection.
As with hWaitForInput
, the timeout value is given in milliseconds. If the
timeout value is less than zero, then connectionWaitForInput
waits
indefinitely.
Unlike hWaitForInput
, this function does not do any decoding, so it
returns true when there is any available input, not just full characters.
Arguments
:: Int | Maximum number of bytes before raising a LineTooLong exception |
-> Connection | Connection |
-> IO ByteString | The received line with the LF trimmed |
Get the next line, using ASCII LF as the line terminator.
This throws an isEOFError
exception on end of input, and LineTooLong when
the number of bytes gathered is over the limit without a line terminator.
The actual line returned can be bigger than the limit specified, provided that the last chunk returned by the underlaying backend contains a LF. Put another way: Only when we need more input and limit is reached that the LineTooLong exception will be raised.
An end of file will be considered as a line terminator too, if the line is not empty.
connectionClose :: Connection -> IO () #
Close a connection.
connectionSetSecure :: ConnectionContext -> Connection -> TLSSettings -> IO () #
Activate secure layer using the parameters specified.
This is typically used to negotiate a TLS channel on an already established channel, e.g., supporting a STARTTLS command. It also flushes the received buffer to prevent application confusing received data before and after the setSecure call.
If the connection is already using TLS, nothing else happens.
connectionIsSecure :: Connection -> IO Bool #
Returns if the connection is establish securely or not.