Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
A client library for HTTP/3.
Synopsis
- run :: Connection -> ClientConfig -> Config -> Client a -> IO a
- data ClientConfig = ClientConfig {}
- data Config = Config {}
- allocSimpleConfig :: IO Config
- freeSimpleConfig :: Config -> IO ()
- data Hooks = Hooks {
- onControlFrameCreated :: [H3Frame] -> [H3Frame]
- onHeadersFrameCreated :: [H3Frame] -> [H3Frame]
- onControlStreamCreated :: Stream -> IO ()
- onEncoderStreamCreated :: Stream -> IO ()
- onDecoderStreamCreated :: Stream -> IO ()
- defaultHooks :: Hooks
- type Scheme = ByteString
- type Authority = ByteString
- type Client a = (Request -> (Response -> IO a) -> IO a) -> IO a
- data Request
- requestNoBody :: Method -> Path -> RequestHeaders -> Request
- requestFile :: Method -> Path -> RequestHeaders -> FileSpec -> Request
- requestStreaming :: Method -> Path -> RequestHeaders -> ((Builder -> IO ()) -> IO () -> IO ()) -> Request
- requestBuilder :: Method -> Path -> RequestHeaders -> Builder -> Request
- type TrailersMaker = Maybe ByteString -> IO NextTrailersMaker
- data NextTrailersMaker
- defaultTrailersMaker :: TrailersMaker
- setRequestTrailersMaker :: Request -> TrailersMaker -> Request
- data Response
- responseStatus :: Response -> Maybe Status
- responseHeaders :: Response -> HeaderTable
- responseBodySize :: Response -> Maybe Int
- getResponseBodyChunk :: Response -> IO ByteString
- getResponseTrailers :: Response -> IO (Maybe HeaderTable)
- type Method = ByteString
- type Path = ByteString
- data FileSpec = FileSpec FilePath FileOffset ByteCount
- type FileOffset = Int64
- type ByteCount = Int64
- defaultReadN :: Socket -> IORef (Maybe ByteString) -> Int -> IO ByteString
- type PositionReadMaker = FilePath -> IO (PositionRead, Sentinel)
- type PositionRead = FileOffset -> ByteCount -> Buffer -> IO ByteCount
- data Sentinel
- defaultPositionReadMaker :: PositionReadMaker
Runner
run :: Connection -> ClientConfig -> Config -> Client a -> IO a Source #
Running an HTTP/3 client.
Runner arguments
data ClientConfig Source #
Configuration for HTTP/3 or HQ.
allocSimpleConfig :: IO Config Source #
Allocating a simple configuration with a handle-based position reader and a locally allocated timeout manager.
freeSimpleConfig :: Config -> IO () Source #
Freeing a simple configration.
Hooks mainly for error testing.
Hooks | |
|
defaultHooks :: Hooks Source #
Default hooks.
type Scheme = ByteString #
"http" or "https".
type Authority = ByteString #
Authority.
HTTP/3 client
Request
Request from client.
Creating request
requestNoBody :: Method -> Path -> RequestHeaders -> Request #
Creating request without body.
requestFile :: Method -> Path -> RequestHeaders -> FileSpec -> Request #
Creating request with file.
requestStreaming :: Method -> Path -> RequestHeaders -> ((Builder -> IO ()) -> IO () -> IO ()) -> Request #
Creating request with streaming.
requestBuilder :: Method -> Path -> RequestHeaders -> Builder -> Request #
Creating request with builder.
Trailers maker
type TrailersMaker = Maybe ByteString -> IO NextTrailersMaker #
Trailers maker. A chunks of the response body is passed
with Just
. The maker should update internal state
with the ByteString
and return the next trailers maker.
When response body reaches its end,
Nothing
is passed and the maker should generate
trailers. An example:
{-# LANGUAGE BangPatterns #-} import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as C8 import Crypto.Hash (Context, SHA1) -- cryptonite import qualified Crypto.Hash as CH -- Strictness is important for Context. trailersMaker :: Context SHA1 -> Maybe ByteString -> IO NextTrailersMaker trailersMaker ctx Nothing = return $ Trailers [("X-SHA1", sha1)] where !sha1 = C8.pack $ show $ CH.hashFinalize ctx trailersMaker ctx (Just bs) = return $ NextTrailersMaker $ trailersMaker ctx' where !ctx' = CH.hashUpdate ctx bs
Usage example:
let h2rsp = responseFile ... maker = trailersMaker (CH.hashInit :: Context SHA1) h2rsp' = setResponseTrailersMaker h2rsp maker
data NextTrailersMaker #
Either the next trailers maker or final trailers.
defaultTrailersMaker :: TrailersMaker #
TrailersMake to create no trailers.
setRequestTrailersMaker :: Request -> TrailersMaker -> Request #
Setting TrailersMaker
to Response
.
Response
Response from server.
Accessing response
responseStatus :: Response -> Maybe Status #
Getting the status of a response.
responseHeaders :: Response -> HeaderTable #
Getting the headers from a response.
responseBodySize :: Response -> Maybe Int #
Getting the body size from a response.
getResponseBodyChunk :: Response -> IO ByteString #
Reading a chunk of the response body.
An empty ByteString
returned when finished.
getResponseTrailers :: Response -> IO (Maybe HeaderTable) #
Reading response trailers.
This function must be called after getResponseBodyChunk
returns an empty.
Types
type Method = ByteString #
HTTP method (flat string type).
type Path = ByteString #
Path.
File specification.
type FileOffset = Int64 #
Offset for file.
RecvN
defaultReadN :: Socket -> IORef (Maybe ByteString) -> Int -> IO ByteString #
Naive implementation for readN.
Position read for files
type PositionReadMaker = FilePath -> IO (PositionRead, Sentinel) #
Making a position read and its closer.
type PositionRead = FileOffset -> ByteCount -> Buffer -> IO ByteCount #
Position read for files.
Manipulating a file resource.
defaultPositionReadMaker :: PositionReadMaker #
Position read based on Handle
.