Snap.Internal.Http.Types
Description
An internal Snap module containing HTTP types.
N.B. this is an internal interface, please don't write user code that depends on it. Most of these declarations (except for the unsafe/encapsulation-breaking ones) are re-exported from Snap.Types.
- set_c_locale :: IO ()
- c_parse_http_time :: CString -> IO CTime
- c_format_http_time :: CTime -> CString -> IO ()
- type Enumerator a = Enumerator IO a
- type Headers = Map CIByteString [ByteString]
- class HasHeaders a where
- updateHeaders :: (Headers -> Headers) -> a -> a
- headers :: a -> Headers
- addHeader :: HasHeaders a => CIByteString -> ByteString -> a -> a
- setHeader :: HasHeaders a => CIByteString -> ByteString -> a -> a
- getHeaders :: HasHeaders a => CIByteString -> a -> Maybe [ByteString]
- getHeader :: HasHeaders a => CIByteString -> a -> Maybe ByteString
- data Method
- type HttpVersion = (Int, Int)
- data Cookie = Cookie {
- cookieName :: !ByteString
- cookieValue :: !ByteString
- cookieExpires :: !(Maybe UTCTime)
- cookieDomain :: !(Maybe ByteString)
- cookiePath :: !(Maybe ByteString)
- type Params = Map ByteString [ByteString]
- data SomeEnumerator = SomeEnumerator (forall a. Enumerator a)
- data Request = Request {
- rqServerName :: !ByteString
- rqServerPort :: !Int
- rqRemoteAddr :: !ByteString
- rqRemotePort :: !Int
- rqLocalAddr :: !ByteString
- rqLocalPort :: !Int
- rqLocalHostname :: !ByteString
- rqIsSecure :: !Bool
- rqHeaders :: Headers
- rqBody :: IORef SomeEnumerator
- rqContentLength :: !(Maybe Int)
- rqMethod :: !Method
- rqVersion :: !HttpVersion
- rqCookies :: [Cookie]
- rqSnapletPath :: !ByteString
- rqPathInfo :: !ByteString
- rqContextPath :: !ByteString
- rqURI :: !ByteString
- rqQueryString :: !ByteString
- rqParams :: Params
- data ResponseBody
- = Enum (forall a. Enumerator a)
- | SendFile FilePath
- rspBodyMap :: (forall a. Enumerator a -> Enumerator a) -> ResponseBody -> ResponseBody
- rspBodyToEnum :: ResponseBody -> Enumerator a
- data Response = Response {
- rspHeaders :: Headers
- rspHttpVersion :: !HttpVersion
- rspContentLength :: !(Maybe Int)
- rspBody :: ResponseBody
- rspStatus :: !Int
- rspStatusReason :: !ByteString
- rqParam :: ByteString -> Request -> Maybe [ByteString]
- rqModifyParams :: (Params -> Params) -> Request -> Request
- rqSetParam :: ByteString -> [ByteString] -> Request -> Request
- emptyResponse :: Response
- setResponseBody :: (forall a. Enumerator a) -> Response -> Response
- setResponseStatus :: Int -> ByteString -> Response -> Response
- modifyResponseBody :: (forall a. Enumerator a -> Enumerator a) -> Response -> Response
- setContentType :: ByteString -> Response -> Response
- addCookie :: Cookie -> Response -> Response
- setContentLength :: Int -> Response -> Response
- clearContentLength :: Response -> Response
- formatHttpTime :: CTime -> IO ByteString
- parseHttpTime :: ByteString -> IO CTime
- parseToCompletion :: Parser a -> ByteString -> Maybe a
- pUrlEscaped :: Parser ByteString
- urlDecode :: ByteString -> Maybe ByteString
- urlEncode :: ByteString -> ByteString
- hexd :: Word8 -> Builder
- finish :: Result a -> Result a
- fromStr :: String -> ByteString
- toStr :: ByteString -> String
Documentation
type Enumerator a = Enumerator IO aSource
type Headers = Map CIByteString [ByteString]Source
A type alias for a case-insensitive key-value mapping.
class HasHeaders a whereSource
A typeclass for datatypes which contain HTTP headers.
Methods
updateHeaders :: (Headers -> Headers) -> a -> aSource
Modify the datatype's headers.
Retrieve the headers from a datatype that has headers.
Instances
addHeader :: HasHeaders a => CIByteString -> ByteString -> a -> aSource
Adds a header key-value-pair to the HasHeaders
datatype. If a header with
the same name already exists, the new value is appended to the headers list.
setHeader :: HasHeaders a => CIByteString -> ByteString -> a -> aSource
Sets a header key-value-pair in a HasHeaders
datatype. If a header with
the same name already exists, it is overwritten with the new value.
getHeaders :: HasHeaders a => CIByteString -> a -> Maybe [ByteString]Source
Gets all of the values for a given header.
getHeader :: HasHeaders a => CIByteString -> a -> Maybe ByteStringSource
Gets a header value out of a HasHeaders
datatype. If many headers came
in with the same name, they will be catenated together.
Enumerates the HTTP method values (see http://tools.ietf.org/html/rfc2068.html#section-5.1.1).
type HttpVersion = (Int, Int)Source
A datatype representing an HTTP cookie.
Constructors
Cookie | |
Fields
|
type Params = Map ByteString [ByteString]Source
A type alias for the HTTP parameters mapping. Each parameter
key maps to a list of ByteString values; if a parameter is specified
multiple times (e.g.: "GET /foo?param=bar1¶m=bar2
"), looking up
"param
" in the mapping will give you ["bar1", "bar2"]
.
data SomeEnumerator Source
Constructors
SomeEnumerator (forall a. Enumerator a) |
Contains all of the information about an incoming HTTP request.
Constructors
Request | |
Fields
|
Instances
data ResponseBody Source
Constructors
Enum (forall a. Enumerator a) | output body is enumerator |
SendFile FilePath | output body is sendfile() |
rspBodyMap :: (forall a. Enumerator a -> Enumerator a) -> ResponseBody -> ResponseBodySource
Represents an HTTP response.
Constructors
Response | |
Fields
|
Instances
Arguments
:: ByteString | parameter name to look up |
-> Request | HTTP request |
-> Maybe [ByteString] |
Looks up the value(s) for the given named parameter. Parameters initially
come from the request's query string and any decoded POST body (if the
request's Content-Type
is application/x-www-form-urlencoded
). Parameter
values can be modified within handlers using rqModifyParams.
rqModifyParams :: (Params -> Params) -> Request -> RequestSource
Modifies the parameters mapping (which is a Map ByteString ByteString
) in
a Request
using the given function.
Arguments
:: ByteString | parameter name |
-> [ByteString] | parameter values |
-> Request | request |
-> Request |
Writes a key-value pair to the parameters mapping within the given request.
emptyResponse :: ResponseSource
An empty Response
.
Arguments
:: (forall a. Enumerator a) | new response body enumerator |
-> Response | response to modify |
-> Response |
Sets an HTTP response body to the given Enumerator
value.
Arguments
:: Int | HTTP response integer code |
-> ByteString | HTTP response explanation |
-> Response | Response to be modified |
-> Response |
Sets the HTTP response status.
modifyResponseBody :: (forall a. Enumerator a -> Enumerator a) -> Response -> ResponseSource
Modifies a response body.
setContentType :: ByteString -> Response -> ResponseSource
Sets the Content-Type
in the Response
headers.
setContentLength :: Int -> Response -> ResponseSource
A note here: if you want to set the Content-Length
for the response,
Snap forces you to do it with this function rather than by setting it in the
headers; the Content-Length
in the headers will be ignored.
The reason for this is that Snap needs to look up the value of
Content-Length
for each request, and looking the string value up in the
headers and parsing the number out of the text will be too expensive.
If you don't set a content length in your response, HTTP keep-alive will be
disabled for HTTP/1.0 clients, forcing a Connection: close
. For HTTP/1.1
clients, Snap will switch to the chunked transfer encoding if
Content-Length
is not specified.
clearContentLength :: Response -> ResponseSource
Removes any Content-Length
set in the Response
.
formatHttpTime :: CTime -> IO ByteStringSource
Converts a CTime
into an HTTP timestamp.
parseHttpTime :: ByteString -> IO CTimeSource
Converts an HTTP timestamp into a CTime
.
parseToCompletion :: Parser a -> ByteString -> Maybe aSource
urlDecode :: ByteString -> Maybe ByteStringSource
Decodes an URL-escaped string (see http://tools.ietf.org/html/rfc2396.html#section-2.4)
urlEncode :: ByteString -> ByteStringSource
URL-escapes a string (see http://tools.ietf.org/html/rfc2396.html#section-2.4)
fromStr :: String -> ByteStringSource
toStr :: ByteString -> StringSource