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.
updateHeaders :: (Headers -> Headers) -> a -> aSource
Modify the datatype's headers.
Retrieve the headers from a datatype that has headers.
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.
Cookie | |
|
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
SomeEnumerator (forall a. Enumerator a) |
Contains all of the information about an incoming HTTP request.
Request | |
|
data ResponseBody Source
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.
Response | |
|
:: 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.
:: 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
.
:: (forall a. Enumerator a) | new response body enumerator |
-> Response | response to modify |
-> Response |
Sets an HTTP response body to the given Enumerator
value.
:: 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