-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | HTTP server library
--
-- A simple but practical HTTP server library.
@package webserver
@version 0.5.0
module Network.Web.Server.Range
skipAndSize :: String -> Integer -> Maybe (Integer, Integer)
module Network.Web.Server.Lang
parseLang :: String -> [String]
module Network.Web.Date
parseDate :: ByteString -> Maybe UTCTime
utcToDate :: UTCTime -> HttpDate
type HttpDate = ByteString
-- | Parser for URI
module Network.Web.URI
-- | Abstract data type for URI
data URI
uriScheme :: URI -> ByteString
uriAuthority :: URI -> Maybe URIAuth
uriPath :: URI -> ByteString
uriQuery :: URI -> ByteString
uriFragment :: URI -> ByteString
-- | Abstract data type for URI Authority
data URIAuth
uriUserInfo :: URIAuth -> ByteString
uriRegName :: URIAuth -> ByteString
uriPort :: URIAuth -> ByteString
-- | Parsing URI.
parseURI :: ByteString -> Maybe URI
-- | Getting a hostname from URI.
uriHostName :: URI -> ByteString
-- | Getting a port number from URI.
uriPortNumber :: URI -> ByteString
-- | Making a URL string from URI.
toURL :: URI -> ByteString
-- | Making a URL string from URI without port.
toURLwoPort :: URI -> ByteString
-- | Making a URL string from URI without port and parameters.
toURLPath :: URI -> ByteString
-- | Checking whether or not URI starts with "http:".
isAbsoluteURI :: ByteString -> Bool
-- | Decoding the %XX encoding.
unEscapeString :: String -> String
-- | Decoding the %XX encoding.
unEscapeByteString :: ByteString -> ByteString
instance Show URIAuth
instance Show URI
module Network.Web.Server.Params
-- | The configuration for the basic web server.
data BasicConfig
BasicConfig :: (URI -> Path) -> (FilePath -> Maybe (Integer, Integer) -> IO ByteString) -> (FilePath -> IO (Maybe (Integer, UTCTime))) -> ByteString -> TCPInfo -> BasicConfig
-- | A mapper from URI to Path.
mapper :: BasicConfig -> URI -> Path
-- | Resource obtaining function. The second argument is (offset of the
-- resource, and length from the offset).
obtain :: BasicConfig -> FilePath -> Maybe (Integer, Integer) -> IO ByteString
-- | A function to return the size of the resource and its modification
-- time if exists.
info :: BasicConfig -> FilePath -> IO (Maybe (Integer, UTCTime))
-- | A server name specified the Server: field.
serverName :: BasicConfig -> ByteString
-- | TCPInfo for passing CGI. (See c10k library.)
tcpInfo :: BasicConfig -> TCPInfo
-- | Control information of how to handle URI.
data Path
-- | URI cannot be converted into any resources.
None :: Path
-- | URI is converted into a resource (typically a file).
File :: FilePath -> Path
-- | URI is converted into CGI.
PathCGI :: CGI -> Path
-- | Internal information of CGI converted from URI.
data CGI
CGI :: FilePath -> String -> String -> String -> CGI
-- | A porgram path to be executed.
progPath :: CGI -> FilePath
-- | A script name.
scriptName :: CGI -> String
-- | A path information.
pathInfo :: CGI -> String
-- | A query string.
queryString :: CGI -> String
instance Eq CGI
instance Show CGI
instance Eq Path
instance Show Path
-- | Parameters of HTTP.
module Network.Web.Params
-- | Methods of HTTP.
data Method
GET :: Method
HEAD :: Method
POST :: Method
PUT :: Method
DELETE :: Method
TRACE :: Method
CONNECT :: Method
UnknownMethod :: Method
toMethod :: ByteString -> Method
-- | Versions of HTTP.
data Version
HTTP10 :: Version
HTTP11 :: Version
toVersion :: ByteString -> Version
fromVersion :: Version -> ByteString
-- | Status of HTTP.
data Status
Continue :: Status
SwitchingProtocols :: Status
OK :: Status
Created :: Status
Accepted :: Status
NonAuthoritativeInformation :: Status
NoContent :: Status
ResetContent :: Status
PartialContent :: Integer -> Integer -> Status
MultipleChoices :: Status
MovedPermanently :: Status
Found :: Status
SeeOther :: Status
NotModified :: Status
UseProxy :: Status
TemporaryRedirect :: Status
BadRequest :: Status
Unauthorized :: Status
PaymentRequired :: Status
Forbidden :: Status
NotFound :: Status
MethodNotAllowed :: Status
NotAcceptable :: Status
ProxyAuthenticationRequired :: Status
RequestTimeout :: Status
Conflict :: Status
Gone :: Status
LengthRequired :: Status
PreconditionFailed :: Status
RequestEntityTooLarge :: Status
RequestURITooLarge :: Status
UnsupportedMediaType :: Status
RequestedRangeNotSatisfiable :: Status
ExpectationFailed :: Status
InternalServerError :: Status
NotImplemented :: Status
BadGateway :: Status
ServiceUnavailable :: Status
GatewayTimeout :: Status
HTTPVersionNotSupported :: Status
-- | Converting numeric status to Status.
toStatus :: ByteString -> Maybe Status
fromStatus :: Status -> ByteString
-- | Returning True for 4xx and 5xx.
badStatus :: Status -> Bool
-- | The type for persist connection or not
data Persist
Close :: Persist
Keep :: Persist
PerUnknown :: Persist
toPersist :: ByteString -> Persist
fromPersist :: Persist -> ByteString
-- | Exceptions for Web server
data ServerException
TimeOut :: ServerException
TerminatedByClient :: ServerException
-- | Field key of HTTP header.
data FieldKey
FkAcceptLanguage :: FieldKey
FkCacheControl :: FieldKey
FkConnection :: FieldKey
FkContentLength :: FieldKey
FkContentType :: FieldKey
FkCookie :: FieldKey
FkDate :: FieldKey
FkHost :: FieldKey
FkIfModifiedSince :: FieldKey
FkIfRange :: FieldKey
FkIfUnmodifiedSince :: FieldKey
FkLastModified :: FieldKey
FkLocation :: FieldKey
FkRange :: FieldKey
FkServer :: FieldKey
FkSetCookie2 :: FieldKey
FkStatus :: FieldKey
FkTransferEncoding :: FieldKey
FkOther :: ByteString -> FieldKey
-- | Field value of HTTP header.
type FieldValue = ByteString
-- | Converting field key to FieldKey.
toFieldKey :: ByteString -> FieldKey
-- | Converting FieldKey to field key.
fromFieldKey :: FieldKey -> ByteString
-- | The type for Content-Type.
type CT = ByteString
-- | The value for text/html.
textHtml :: CT
-- | Selecting a value of Content-Type from a file suffix.
selectContentType :: String -> CT
instance Typeable ServerException
instance Show Method
instance Eq Method
instance Enum Method
instance Bounded Method
instance Eq Version
instance Show Version
instance Show Status
instance Eq FieldKey
instance Show FieldKey
instance Ord FieldKey
instance Eq Persist
instance Show Persist
instance Eq ServerException
instance Ord ServerException
instance Show ServerException
instance Exception ServerException
-- | HTTP library for HTTP server.
module Network.Web.HTTP
-- | Receiving HTTP request from Handle. If request is broken,
-- Nothing is returned.
receive :: Handle -> IO (Maybe Request)
-- | Sending HTTP response to Handle. If Keep is specified,
-- the HTTP connection will be kept. If Close is specified, the
-- connection will be closed. Version should be copied from
-- Request.
respond :: Handle -> Version -> Persist -> Response -> IO ()
-- | Abstract data type of HTTP request.
data Request
-- | Request method
reqMethod :: Request -> Method
-- | URI parsed from absolute URL or relative URL with the Host: field
reqURI :: Request -> URI
-- | HTTP version
reqVersion :: Request -> Version
-- | Key-values of request header
reqFields :: Request -> Fields
-- | Entity body if exists
reqBody :: Request -> Maybe ByteString
-- | Length of entity body from Content-Length:
reqLength :: Request -> Integer
-- | Abstract data type of HTTP response.
data Response
-- | Response status
rspStatus :: Response -> Status
rspFields :: Response -> Fields
rspBody :: Response -> Maybe ByteString
rspLength :: Response -> Maybe Integer
rspLogMsg :: Response -> String
-- | A function to make Response.
makeResponse :: Status -> [(FieldKey, FieldValue)] -> Response
-- | A function to make Response.
makeResponse2 :: Status -> Maybe ByteString -> Maybe Integer -> [(FieldKey, FieldValue)] -> Response
-- | A function to make Response.
makeResponse3 :: Status -> Maybe ByteString -> Maybe Integer -> Fields -> Response
-- | A class to abstract Request and Response.
class Comm a
-- | Abstract data type for Key-values of HTTP header.
data Fields
-- | Looking up the HTTP field value.
lookupField :: Comm a => FieldKey -> a -> Maybe FieldValue
-- | Looking up the HTTP field value.
lookupField' :: FieldKey -> Fields -> Maybe FieldValue
-- | Inserting the HTTP field.
insertField :: Comm a => FieldKey -> FieldValue -> a -> a
-- | Inserting the HTTP field.
insertField' :: FieldKey -> FieldValue -> Fields -> Fields
-- | Parsing HTTP header from Handle. This function is useful to
-- parse CGI output.
receiveFields :: Handle -> IO Fields
fromFields :: Fields -> [(FieldKey, FieldValue)]
instance Show Fields
instance Show Request
instance Comm Response
instance Comm Request
-- | HTTP server library.
module Network.Web.Server
-- | A function to run an WebServer. Handle should be mode by
-- converting an accepted socket. Keep-alive / termination of HTTP 1.0
-- and HTTP 1.1 is correctly handled. So, WebServer need not to
-- handle the Connection: header in response. The Date: header is
-- automatically added in response.
connection :: Handle -> WebServer -> WebConfig -> IO ()
-- | The type for HTTP server.
type WebServer = Maybe Request -> IO Response
-- | The configuration for connection.
data WebConfig
WebConfig :: (String -> IO ()) -> (String -> IO ()) -> (String -> IO ()) -> (String -> IO ()) -> Int -> WebConfig
-- | A hook to be called when an HTTP connection is closed.
closedHook :: WebConfig -> String -> IO ()
-- | A hook to be called when access succeeds.
accessHook :: WebConfig -> String -> IO ()
-- | A hook to be called when an access error occurs.
errorHook :: WebConfig -> String -> IO ()
-- | A hook to be called when a fatal error occurs.
fatalErrorHook :: WebConfig -> String -> IO ()
-- | A time to unblock receiving an HTTP request in seconds.
connectionTimer :: WebConfig -> Int
module Network.Web.Server.CGI
tryGetCGI :: BasicConfig -> Request -> CGI -> IO (Maybe Response)
-- | Creating basic WebServer. Created WebServer can handle
-- GET / HEAD / POST; OK, Not Found, Not Modified, Moved Permanently,
-- etc; partial getting; language negotication; CGI, chunked data for CGI
-- output;
module Network.Web.Server.Basic
-- | Creating WebServer with BasicConfig. The created
-- WebServer can handle GET / HEAD / POST; OK, Not Found, Not
-- Modified, Moved Permanently, etc; partial getting; language
-- negotication; CGI, chunked data for CGI output; If
-- http://example.com/path does not exist but http://example.com/path/
-- exists, the created WebServer redirects it.
-- http://example.com/path/ is mapped to /somewhere/path/ by
-- mapper and index.html and index.html.en automatically added and
-- try to read by obtain. If Accept-Language is xx and
-- yy in order, index.html.xx, index.html.yy, index.html and
-- index.html.en are tried. The created WebServer does not
-- dynamically make index.html for a directory even if index.html does
-- not exist for security reasons.
basicServer :: BasicConfig -> WebServer