-- 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