HTTP-4000.2.17: A library for client-side HTTP

Portability | non-portable (not tested)
Stability | experimental
Maintainer | Ganesh Sittampalam <ganesh@earth.li>
Safe Haskell | None

Network.TCP

Description

Some utility functions for working with the Haskell `network` package. Mostly for internal use by the `Network.HTTP` code, but

Synopsis

- data Connection
- data EndPoint = EndPoint {
  - epHost :: String
  - epPort :: Int
  }
- openTCPPort :: String -> Int -> IO Connection
- isConnectedTo :: Connection -> EndPoint -> IO Bool
- openTCPConnection :: BufferType ty => String -> Int -> IO (HandleStream ty)
- socketConnection :: BufferType ty => String -> Int -> Socket -> IO (HandleStream ty)
- isTCPConnectedTo :: HandleStream ty -> EndPoint -> IO Bool
- data HandleStream a
- class BufferType bufType => HStream bufType where
  - openStream :: String -> Int -> IO (HandleStream bufType)
  - openSocketStream :: String -> Int -> Socket -> IO (HandleStream bufType)
  - readLine :: HandleStream bufType -> IO (Result bufType)
  - readBlock :: HandleStream bufType -> Int -> IO (Result bufType)
  - writeBlock :: HandleStream bufType -> bufType -> IO (Result ())
  - close :: HandleStream bufType -> IO ()
  - closeQuick :: HandleStream bufType -> IO ()
  - closeOnEnd :: HandleStream bufType -> Bool -> IO ()
- data StreamHooks ty = StreamHooks {
  - hook_readLine :: (ty -> String) -> Result ty -> IO ()
  - hook_readBlock :: (ty -> String) -> Int -> Result ty -> IO ()
  - hook_writeBlock :: (ty -> String) -> ty -> Result () -> IO ()
  - hook_close :: IO ()
  - hook_name :: String
  }
- nullHooks :: StreamHooks ty
- setStreamHooks :: HandleStream ty -> StreamHooks ty -> IO ()
- getStreamHooks :: HandleStream ty -> IO (Maybe (StreamHooks ty))
- hstreamToConnection :: HandleStream String -> Connection

# Documentation

data Connection

The `Connection` newtype is a wrapper that allows us to make connections an instance of the Stream class, without GHC extensions. While this looks sort of like a generic reference to the transport layer it is actually TCP specific, which can be seen in the implementation of the 'Stream Connection' instance.

Instances

Stream Connection |

data EndPoint

Constructors

EndPoint |

Fields

epHost :: String
epPort :: Int

Instances

Eq EndPoint |

openTCPPort :: String -> Int -> IO Connection

`openTCPPort uri port` establishes a connection to a remote host, using `getHostByName` which possibly queries the DNS system, hence may trigger a network connection.

isConnectedTo :: Connection -> EndPoint -> IO Bool

Checks both that the underlying Socket is connected and that the connection peer matches the given host name (which is recorded locally).

openTCPConnection :: BufferType ty => String -> Int -> IO (HandleStream ty)

socketConnection :: BufferType ty => String -> Int -> Socket -> IO (HandleStream ty)

`socketConnection`, like `openConnection` but using a pre-existing `Socket`.

isTCPConnectedTo :: HandleStream ty -> EndPoint -> IO Bool

data HandleStream a

class BufferType bufType => HStream bufType where

`HStream` overloads the use of `HandleStream`s, letting you overload the handle operations over the type that is communicated across the handle. It comes in handy for `Network.HTTP` `Request` and `Response`s as the payload representation isn't fixed, but overloaded.

The library comes with instances for `ByteString`s and `String`, but should you want to plug in your own payload representation, defining your own `HStream` instance _should_ be all that it takes.

Methods

openStream :: String -> Int -> IO (HandleStream bufType)

openSocketStream :: String -> Int -> Socket -> IO (HandleStream bufType)

readLine :: HandleStream bufType -> IO (Result bufType)

readBlock :: HandleStream bufType -> Int -> IO (Result bufType)

writeBlock :: HandleStream bufType -> bufType -> IO (Result ())

close :: HandleStream bufType -> IO ()

closeQuick :: HandleStream bufType -> IO ()

closeOnEnd :: HandleStream bufType -> Bool -> IO ()

Instances

HStream String |
HStream ByteString |
HStream ByteString |

data StreamHooks ty

Constructors

StreamHooks |

Fields

hook_readLine :: (ty -> String) -> Result ty -> IO ()
hook_readBlock :: (ty -> String) -> Int -> Result ty -> IO ()
hook_writeBlock :: (ty -> String) -> ty -> Result () -> IO ()
hook_close :: IO ()
hook_name :: String

Instances

Eq ty => Eq (StreamHooks ty) |

nullHooks :: StreamHooks ty

setStreamHooks :: HandleStream ty -> StreamHooks ty -> IO ()

getStreamHooks :: HandleStream ty -> IO (Maybe (StreamHooks ty))

hstreamToConnection :: HandleStream String -> Connection