HTTP-4000.4.1: A library for client-side HTTP

Copyright | See LICENSE file
License | BSD
Maintainer | Ganesh Sittampalam <ganesh@earth.li>
Stability | experimental
Portability | non-portable (not tested)
Safe Haskell | None
Language | Haskell98

Network.TCP

Description

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

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 Source #

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

Instances details

Stream Connection Source # |
Instance details Defined in Network.TCP Methods readLine :: Connection -> IO (Result String) Source # readBlock :: Connection -> Int -> IO (Result String) Source # writeBlock :: Connection -> String -> IO (Result ()) Source # close :: Connection -> IO () Source # closeOnEnd :: Connection -> Bool -> IO () Source #

data EndPoint Source #

Constructors

EndPoint |

Fields

- epHost :: String
- epPort :: Int

#### Instances

Instances details

Eq EndPoint Source # |
Instance details Defined in Network.TCP Methods (==) :: EndPoint -> EndPoint -> Bool Source # (/=) :: EndPoint -> EndPoint -> Bool Source #

openTCPPort :: String -> Int -> IO Connection Source #

`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 Source #

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) Source #

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

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

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

data HandleStream a Source #

class BufferType bufType => HStream bufType where Source #

`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) Source #

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

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

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

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

close :: HandleStream bufType -> IO () Source #

closeQuick :: HandleStream bufType -> IO () Source #

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

#### Instances

Instances details

HStream ByteString Source # |

Instance details

Defined in Network.TCP

Methods

openStream :: String -> Int -> IO (HandleStream ByteString) Source #

openSocketStream :: String -> Int -> Socket -> IO (HandleStream ByteString) Source #

readLine :: HandleStream ByteString -> IO (Result ByteString) Source #

readBlock :: HandleStream ByteString -> Int -> IO (Result ByteString) Source #

writeBlock :: HandleStream ByteString -> ByteString -> IO (Result ()) Source #

close :: HandleStream ByteString -> IO () Source #

closeQuick :: HandleStream ByteString -> IO () Source #

closeOnEnd :: HandleStream ByteString -> Bool -> IO () Source #

HStream ByteString Source # |

Instance details

Defined in Network.TCP

Methods

openStream :: String -> Int -> IO (HandleStream ByteString) Source #

openSocketStream :: String -> Int -> Socket -> IO (HandleStream ByteString) Source #

readLine :: HandleStream ByteString -> IO (Result ByteString) Source #

readBlock :: HandleStream ByteString -> Int -> IO (Result ByteString) Source #

writeBlock :: HandleStream ByteString -> ByteString -> IO (Result ()) Source #

close :: HandleStream ByteString -> IO () Source #

closeQuick :: HandleStream ByteString -> IO () Source #

closeOnEnd :: HandleStream ByteString -> Bool -> IO () Source #

HStream String Source # |

Instance details

Defined in Network.TCP

Methods

openStream :: String -> Int -> IO (HandleStream String) Source #

openSocketStream :: String -> Int -> Socket -> IO (HandleStream String) Source #

readLine :: HandleStream String -> IO (Result String) Source #

readBlock :: HandleStream String -> Int -> IO (Result String) Source #

writeBlock :: HandleStream String -> String -> IO (Result ()) Source #

close :: HandleStream String -> IO () Source #

closeQuick :: HandleStream String -> IO () Source #

closeOnEnd :: HandleStream String -> Bool -> IO () Source #

data StreamHooks ty Source #

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

Instances details

Eq ty => Eq (StreamHooks ty) Source # |
Instance details Defined in Network.TCP Methods (==) :: StreamHooks ty -> StreamHooks ty -> Bool Source # (/=) :: StreamHooks ty -> StreamHooks ty -> Bool Source #

nullHooks :: StreamHooks ty Source #

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

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

hstreamToConnection :: HandleStream String -> Connection Source #