hackage-security-0.5.2.2: Hackage security library

Hackage.Security.Client.Repository.HttpLib

Contents

Description

Abstracting over HTTP libraries

Synopsis

# Documentation

data HttpLib #

Abstraction over HTTP clients

This avoids insisting on a particular implementation (such as the HTTP package) and allows for other implementations (such as a conduit based one).

NOTE: Library-specific exceptions MUST be wrapped in SomeRemoteError.

Constructors

 HttpLib FieldshttpGet :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> ([HttpResponseHeader] -> BodyReader -> IO a) -> IO aDownload a filehttpGetRange :: forall a. Throws SomeRemoteError => [HttpRequestHeader] -> URI -> (Int, Int) -> (HttpStatus -> [HttpResponseHeader] -> BodyReader -> IO a) -> IO aDownload a byte rangeRange is starting and (exclusive) end offset in bytes.HTTP servers are normally expected to respond to a range request with a "206 Partial Content" response. However, servers can respond with a "200 OK" response, sending the entire file instead (for instance, this may happen for servers that don't actually support range rqeuests, but for which we optimistically assumed they did). Implementations of HttpLib may accept such a response and inform the hackage-security library that the whole file is being returned; the security library can then decide to execute the BodyReader anyway (downloading the entire file) or abort the request and try something else. For this reason the security library must be informed whether the server returned the full file or the requested range.

Since different libraries represent headers differently, here we just abstract over the few request headers that we might want to set

Constructors

 HttpRequestMaxAge0 Set Cache-Control: max-age=0 HttpRequestNoTransform Set Cache-Control: no-transform

Instances

 # Methods # Methods # MethodsshowList :: [HttpRequestHeader] -> ShowS #

Since different libraries represent headers differently, here we just abstract over the few response headers that we might want to know about.

Constructors

 HttpResponseAcceptRangesBytes Server accepts byte-range requests (Accept-Ranges: bytes)

Instances

 # Methods # Methods # MethodsshowList :: [HttpResponseHeader] -> ShowS #

data HttpStatus #

HTTP status code

Constructors

 HttpStatus200OK 200 OK HttpStatus206PartialContent 206 Partial Content

data ProxyConfig a #

Proxy configuration

Although actually setting the proxy is the purview of the initialization function for individual HttpLib implementations and therefore outside the scope of this module, we offer this ProxyConfiguration type here as a way to uniformly configure proxies across all HttpLibs.

Constructors

 ProxyConfigNone Don't use a proxy ProxyConfigUse a Use this specific proxyIndividual HTTP backends use their own types for specifying proxies. ProxyConfigAuto Use automatic proxy settingsWhat precisely automatic means is HttpLib specific, though typically it will involve looking at the HTTP_PROXY environment variable or the (Windows) registry.

An IO action that represents an incoming response body coming from the server.
This definition is copied from the http-client package.
Construct a Body reader from a lazy bytestring
This is appropriate if the lazy bytestring is constructed, say, by calling hGetContents on a network socket, and the chunks of the bytestring correspond to the chunks as they are returned from the OS network layer.