--- | Lucu is an HTTP daemonic library. It can be embedded in any
--- Haskell program and runs in an independent thread.
+-- | Lucu is an embedded HTTP server library.
--
-- Features:
--
--- [/Full support of HTTP\/1.1/] Lucu supports request pipelining,
--- chunked I\/O, ETag comparison and \"100 Continue\".
---
--- [/Performance/] Lucu doesn't fork\/exec to handle requests like
--- CGI. It just spawns a new thread. Inter-process communication is
--- done with STM.
+-- [/Affinity for RESTafarians/] Lucu is specifically designed to be
+-- suitable for RESTful applications.
--
--- [/Affinity for RESTafarians/] Lucu is a carefully designed
--- web server for RESTful applications.
+-- [/Full support of HTTP/\//1.1/] Lucu supports request pipelining,
+-- chunked I\/O, ETag comparison and \"100 Continue\".
--
--- [/SSL connections/] Lucu can handle HTTP connections over SSL
--- layer.
+-- [/SSL connections/] Lucu can handle HTTP connections over Secure
+-- Socket Layer when configured with -fssl flag.
--
-- Lucu is not a replacement for Apache or lighttpd. It is intended to
--- be used to create an efficient web-based RESTful application
--- without messing around FastCGI. It is also intended to be run
--- behind a reverse-proxy so it doesn't have the following (otherwise
--- essential) facilities:
+-- be used to build an efficient web-based RESTful application which
+-- runs behind a reverse-proxy so it doesn't have the following
+-- (otherwise essential) functionalities:
--
--- [/Logging/] Lucu doesn't log any requests from any clients.
+-- [/Logging/] Lucu doesn't write logs of any requests from any
+-- clients.
--
-- [/Client Filtering/] Lucu always accepts any clients. No IP
-- filter is implemented.
--
-- [/Bandwidth Limitting/] Lucu doesn't limit bandwidth it consumes.
--
--- [/Protection Against Wicked Clients/] Lucu is fragile against
--- wicked clients. No attacker should be able to cause a
+-- [/Protection Against Wicked Clients/] Lucu is somewhat fragile
+-- against wicked clients. No attacker should be able to cause a
-- buffer-overflow but can possibly DoS it.
--
-
-
module Network.HTTP.Lucu
( -- * Entry Point
runHttpd
- -- * Configuration
+ -- * 'Config'uration
, module Network.HTTP.Lucu.Config
- -- * Resource Tree
- , ResourceDef(..)
- , emptyResource
- , ResTree
- , mkResTree
+ -- * URI-related data types
+ , Scheme
+ , Host
+ , PathSegments
- -- * Resource Monad
+ -- * 'Resource' dispatcher
+ , module Network.HTTP.Lucu.Dispatcher
+
+ -- * 'Rsrc' Monad
, module Network.HTTP.Lucu.Resource
-- ** Things to be used in the Resource monad
+ -- *** 'StatusCode'
+ , module Network.HTTP.Lucu.StatusCode
- -- *** Status Code
- , StatusCode(..)
-
- -- *** Abortion
- , abort
- , abortPurely
- , abortA
+ -- *** 'Abortion'
+ , module Network.HTTP.Lucu.Abortion
-- *** ETag
, ETag(..)
, strongETag
, weakETag
+ , parseETag
-- *** MIME Type
, MIMEType(..)
+ , MIMEParams
+ , parseMIMEType
+ , mimeType
- -- *** Authorization
+ -- *** Authentication
, AuthChallenge(..)
, AuthCredential(..)
- -- * Utility
-
+ -- * Utilities
-- ** Static file handling
, module Network.HTTP.Lucu.StaticFile
)
where
-
import Network.HTTP.Lucu.Abortion
-import Network.HTTP.Lucu.Authorization
+import Network.HTTP.Lucu.Authentication
import Network.HTTP.Lucu.Config
+import Network.HTTP.Lucu.Dispatcher
import Network.HTTP.Lucu.ETag
import Network.HTTP.Lucu.Httpd
-import Network.HTTP.Lucu.MIMEType
-import Network.HTTP.Lucu.Resource hiding (driftTo)
-import Network.HTTP.Lucu.Resource.Tree
+import Network.HTTP.Lucu.MIMEParams
+import Network.HTTP.Lucu.MIMEType hiding (mimeType)
+import Network.HTTP.Lucu.MIMEType.TH
+import Network.HTTP.Lucu.Resource
import Network.HTTP.Lucu.Response
import Network.HTTP.Lucu.StaticFile
+import Network.HTTP.Lucu.StatusCode
+import Network.HTTP.Lucu.Utils