-- |Configurations for the Lucu httpd like a port to listen.
module Network.HTTP.Lucu.Config
( Config(..)
+ , SSLConfig(..)
, defaultConfig
)
where
import Network.BSD
import Network.HTTP.Lucu.MIMEType.Guess
import Network.HTTP.Lucu.MIMEType.DefaultExtensionMap
+import OpenSSL.Session
import System.IO.Unsafe
-- |Configuration record for the Lucu httpd. You need to use
, cnfServerHost :: !Strict.ByteString
-- |A port ID to listen to HTTP clients.
, cnfServerPort :: !PortID
+ -- |Configuration for HTTPS connections. Set this 'Nothing' to
+ -- disable HTTPS.
+ , cnfSSLConfig :: !(Maybe SSLConfig)
-- |The maximum number of requests to accept in one connection
-- simultaneously. If a client exceeds this limitation, its last
-- request won't be processed until a response for its earliest
, cnfExtToMIMEType :: !ExtMap
}
+-- |Configuration record for HTTPS connections.
+data SSLConfig
+ = SSLConfig {
+ -- |A port ID to listen to HTTPS clients.
+ sslServerPort :: !PortID
+ -- |An SSL context for accepting connections.
+ , sslContext :: !SSLContext
+ }
+
-- |The default configuration. Generally you can use this value as-is,
-- or possibly you just want to replace the 'cnfServerSoftware' and
--- 'cnfServerPort'.
+-- 'cnfServerPort'. SSL connections are disabled by default.
defaultConfig :: Config
defaultConfig = Config {
cnfServerSoftware = C8.pack "Lucu/1.0"
, cnfServerHost = C8.pack (unsafePerformIO getHostName)
, cnfServerPort = Service "http"
+ , cnfSSLConfig = Nothing
, cnfMaxPipelineDepth = 100
, cnfMaxEntityLength = 16 * 1024 * 1024 -- 16 MiB
, cnfMaxOutputChunkLength = 5 * 1024 * 1024 -- 5 MiB