packages feed

hws-1.1.0.1: src/Config.hs

-- -----------------------------------------------------------------------------
-- Copyright 2002, Simon Marlow.
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are
-- met:
-- 
--  * Redistributions of source code must retain the above copyright notice,
--    this list of conditions and the following disclaimer.
-- 
--  * Redistributions in binary form must reproduce the above copyright
--    notice, this list of conditions and the following disclaimer in the
--    documentation and/or other materials provided with the distribution.
-- 
--  * Neither the name of the copyright holder(s) nor the names of
--    contributors may be used to endorse or promote products derived from
--    this software without specific prior written permission.
-- 
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-- -----------------------------------------------------------------------------

module Config where

import Foreign
import Network.BSD
import Control.Concurrent

-----------------------------------------------------------------------------
-- Config info

data Config = Config {
  user			:: String,
  group			:: String,
  
  port			:: Int,
  listen		:: [Int], -- Todo: [(String,Int)],  
				  -- eg. listen www.haskell.org:80
  
  requestTimeout	:: Int,
  keepAliveTimeout	:: Int,
  maxClients		:: Int,
  
  serverAdmin		:: String,	-- "" indicates no admin
  serverName		:: String,	-- "" indicates no canon name
  serverAlias		:: [String],
  useCanonicalName	:: Bool,
  hostnameLookups	:: Bool,
  
  documentRoot		:: String,
  userDir		:: String,
  directoryIndex	:: String,
  accessFileName	:: String,
  indexes		:: Bool,
  followSymLinks	:: Bool,
  
  typesConfig		:: String,
  defaultType		:: String,
  
  addLanguage		:: [(String,String)],
  languagePriority	:: [String],

  accessLogFile		:: String,
  accessLogFormat	:: String,

  errorLogFile		:: String,
  logLevel		:: Int
  }
#ifdef DEBUG
  deriving Show
#endif

defaultConfig :: Config
defaultConfig = Config{
  user = "nobody",
  group = "nobody",
  
  port = 80,
  listen = [],
  
  requestTimeout	= 300,
  keepAliveTimeout	= 15,
  maxClients		= 150,
  
  serverAdmin		= "",
  serverName		= "",
  serverAlias		= [],
  useCanonicalName	= False,
  hostnameLookups	= False,
  
  documentRoot		= "/usr/local/www/data",
  userDir		= "",
  directoryIndex	= "index.html",
  accessFileName	= ".htaccess",
  indexes		= False,
  followSymLinks	= False,
  
  typesConfig		= "/etc/mime.types",
  defaultType		= "text/plain",
  
  addLanguage		= [],
  languagePriority	= [],

  accessLogFile		= "http-access.log",
  accessLogFormat	= "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"",

  errorLogFile		= "httpd-error.log",
  logLevel		= 1
  }

-- not user-definable...
serverSoftware       = "HWS"
serverVersion	     = "0.1"

-- Local hostname.  We'll update this on a SIGHUP, so make it an MVar.
local_hostent :: MVar HostEntry
local_hostent = unsafePerformIO newEmptyMVar