home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
WEBSERVE
/
PI3
/
PI3WEB.EXE
/
Pi3Docs
/
Examples
/
Config
/
Features.pi3
< prev
next >
Wrap
Text File
|
1997-10-31
|
36KB
|
1,188 lines
<HTML><TITLE>Features.pi3</TITLE><BODY><PRE>#!Pi3
# ===
#
# Top level configuration file
#
# ** IMPORTANT **
# If you do nothing else then do this:
#
#... ###### Customize server settings
# Skip below to the definition of 'MainVirtualHostInformation', change
# the settings for Hostname (*Mandatory* redirects will not work without
# this!) and Administrator (optional).
#
# ===
# Include standard IO and server stuff
include ../Conf/IO.cnf
include ../Conf/Server.cnf
include ../Conf/Pi3API.cnf
# ---
#
# IO Object for main listening socket.
#
# ---
<Object>
Name ServerIOObject
Class TCPIPIOClass
Type Passive
# A hostname must be specified for the Pi3Web HTTP server. The hostname
# will be the used by the server to identify itself in URLs generated
# for redirects and will also be used to lookup the IP address that this
# server will listen on.
BindHost localhost
# A TCP port must be specified for this HTTP server. The TCP port
# is the port that the HTTP will listen for requests on. This is
# typically 80 for HTTP servers.
#
# Note that UNIX operating systems normally require that the server
# initially run as user 'root' to bind on ports between 0 and 1024
BindPort 80
# Timeout accepting connections. -1 specifies no timeout.
AcceptTimeout -1
# Specify timeout for sending data. -1 specifies no timeout.
RecvTimeout 60
# Specify timeout for receiving data. -1 specifies no timeout.
SendTimeout 45
PeerIPVariable STRING:RemoteAddr
PeerHostNameVariable STRING:RemoteHost
LocalAddressVariable STRING:LocalAddr
# Flags
#
# OwnDB - Object adds its own DB, rather than use the parents
# this is necessary to avoid collision of values placed in
# the DB between different connection.
#
# SetPeerAddress - IP address of remote peer with be put
# into the specified variable.
#
# DNSReverseLookup - Use reverse DNS to get the hostname of the
# peer and place it in the specified variable.
#
# SetLocalAddress - Put local address in the specified variable.
Flags OwnDB|SetPeerAddress|DNSReverseLookup|SetLocalAddress
# Pointer to file with lockfile name, to avoid collisions on accept
# with multiple processes
AcceptLockFile "../Logs/lockfile.txt"
</Object>
# ---
#
# Main virtual host object.
#
# ---
<Object>
Name MainVirtualHostInformation
Class VirtualHostClass
# Administrator for the primary virtual host
Administrator webmaster@localhost
# Hostname that this server uses in redirects.
HostName localhost
# Port that the server uses in redirects.
# Specify it only if it is not the standard port for the protocol in
# use, i.e. 80 for HTTP and 443 for HTTPS
# ServerPort 80
</Object>
# ---
#
# Thread dispatch object
#
# This is an instance of MultiThreadedIOServerClass with appropriate
# parameters
#
# ---
<Object>
Name ThreadPoolDispatcher
Class MultiThreadedIOServerClass
# The IOObject is the object that will be used for the listening socket
# it can be a real IOObject (such as TCP/IP), as test IO object which
# feeds stub data into the server or a filter IO object which encrpts
# or logs data passed through it.
#
# Example test IO object:
# IOObject TestIOObject
#
# Log IO to file:
# IOObject <A HREF="/pidocs/Objects/IO.html#SnoopIO">SnoopIO</A> IOObject="ServerIOObject" OutFile="./snoop.dbg"
#
IOObject ServerIOObject
# Dispatch accepted IO connection to the HTTPLogicObject
LogicObject HTTPLogicObject
# Number of threads to use
MaxThreads 10
# Number of requests to exit after
ExitAfter 1000
</Object>
# ---
#
# Main Pi3 object.
#
# This is an instance of the UNIXDaemonClass to fork the server into
# one monitor process and 'NumberOfProcesses' child processes.
#
# The monitor process automatically starts a new child processes whenever
# a child process exits.
#
# ---
<Object>
Name Main
Class UNIXDaemonClass
# Actual class to accept new IO requests and dispatch them
ServerObject ThreadPoolDispatcher
PIDFile "../Logs/pid.log"
RLimitCpu Maximum
# User that child processes will run as. Server must run as root to
# be able to change to the specified user. A user id number can be
# specified with #number. Server which start with root privileges should
# change to a user id with lesser privileges for security reasons.
# User nobody
# Group that child processes will run as. Server must run as root to
# be able to change to a different group. A group id number can be
# specified with #number.
# Group #-1
# generate a server unique lockfile name and write it into
# Logs/lockfile.txt
LockFileName "../Logs/lockfile.txt"
# Message to write just before the server is ready to start accepting
# connections.
# default
Message "Pi3Web HTTP Server Started"
# Specify the number of processes.
NumberOfProcesses 8
</Object>
# ===
#
# Features.pi3
#
# Showcase features of Pi3Web server. Use this configuration
# only for personal or workgroup use. Its not optimal
# for use on the public internet. Here's why:
#
# - Performance is slower because of all the extra
# handlers that are added in and the funky things that they
# do.
#
# - Bigger and more complex is less secure against
# attack than smaller and featureless. The server created
# by this configuration is bigger and more complex.
#
# ===
#
# Load library definitions for classes used here.
#
include ../Conf/HTTP.cnf
include ../Conf/Fcgi.cnf
include ../Conf/Plugins.cnf
include ../Conf/ISAPI.cnf
# ---
#
# Documentation is handled as HTML regardless of file extension. Also,
# files have headers and footers attached to make them pretty.
#
# ---
<Object>
Name DocumentMapper
Class PathMapperClass
#
# leave calling card
#
<A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> "&dbreplace(response,string,ObjectMap,Pi3Docs)"
</Object>
# ---
#
# CGIMapper
#
# Instance of PathMapperClass to Map <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> URLs
#
# <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> Scripts set PATH_INFO.
#
# ---
<Object>
Name CGIMapper
Class PathMapperClass
CaseSensitive "No"
#
# Subdirectories below the mapping directory should be put in path info
#
PathInfo "Yes"
#
# Set the 'ObjectMap' variable in the response DB if this map is
# successful
#
<A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> "&dbreplace(response,string,ObjectMap,Scripts)"
</Object>
# ---
#
# WinCGIMapper and FCGIMapper
#
# Like CGIMapper, except it leaves a different marker to cause
# a different object to handle the request.
#
# ---
<Object>
Name WinCGIMapper
Class PathMapperClass
PathInfo "Yes"
<A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> "&dbreplace(response,string,ObjectMap,WinScripts)"
</Object>
<Object>
Name FCGIMapper
Class PathMapperClass
PathInfo "Yes"
<A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> "&dbreplace(response,string,ObjectMap,FastCGIScripts)"
</Object>
# ---
#
# AdminMapper
#
# For protected spaces
#
# ---
<Object>
Name AdminMapper
Class PathMapperClass
#
# Set the authentication realm so the <A HREF="/pidocs/Objects/HTTP.html#BasicAuth">BasicAuth</A> handler kicks in
<A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> "&dbreplace(response,string,AuthenticationRealm,Admin)"
</Object>
# ---
#
# AccessLogger
#
# An instance of ExpressionLoggerClass configured to generate an
# logfile
#
# ---
<Object>
Name AccessLogger
Class ExpressionLoggerClass
#
# Append
#
OpenMode "a"
#
# Line to log
Expression "$A $h - [$t] \"$r\" $s $b$M"
</Object>
# ---
#
# Start
#
# Handle initial phases of requests, typically before we have enough
# information to select different execution paths
#
# ---
<Object>
Name Start
Class FlexibleHandlerClass
Init <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Headers <A HREF="/pidocs/Objects/HTTP.html#ReadRequestHeaders">ReadRequestHeaders</A>
#
# The handler 'VirtualHosts' is described below
#
HostMap VirtualHosts
#
# Mapping virtual paths to example directory with 'DirListType' set
#
Mapping DirectoryMappings
#
# Default mappings
#
Mapping <A HREF="/pidocs/Objects/HTTP.html#MapToErrorDocument">MapToErrorDocument</A> \
IgnoreStatus="0 200" \
DefaultMessage="/errors/unknown.htm" \
301="/errors/301.ssi" \
304="/errors/304.htm" \
400="/errors/400.htm" \
401="/errors/401.ssi" \
403="/errors/403.ssi" \
404="/errors/404.ssi" \
500="/errors/500.ssi" \
501="/errors/501.htm"
Mapping <A HREF="/pidocs/Objects/Plugins.html#UserDirectory">UserDirectory</A> UserDirectoryRoot="/home/" \
HTMLDirectory="/public_html"
Mapping CGIMapper From="/cgi-bin/" To="cgi-bin/"
Mapping WinCGIMapper From="/cgi-win/" To="cgi-win/"
Mapping FCGIMapper From="/cgi-fcgi/" To="cgi-fcgi/"
Mapping DocumentMapper From="/pidocs/" To="Pi3Docs/"
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/errors/" To="Fragment/"
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/icons/" To="Icons/"
# mapping to view logfiles disabled
# Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/logs/" To="Logs/"
Mapping AdminMapper From="/admin/" To="Logs/"
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/Pi3Expressions/" To="**internal**/" \
Action="&dbreplace(response,string,ObjectMap,Pi3Expr)" \
PathInfo="Yes"
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/isapi/" To="Isapi/" \
Action="&dbreplace(response,string,ObjectMap,ISAPI)" \
PathInfo="Yes"
#
# Mapping specific to Host2
#
Mapping Host2Mappings
#
# Mapping specific to MainVirtualHostInformation
#
Mapping Host1Mappings
</Object>
# ---
#
# Default
#
# Handle requests that other handlers have passed up
#
# ---
<Object>
Name Default
Class FlexibleHandlerClass
CheckPath <A HREF="/pidocs/Objects/HTTP.html#DirectoryExists">DirectoryExists</A> IndexFile="index.html" IndexFile="index.htm"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="EF" RefuseStatus=404
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="F" RefuseStatus=403
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAuth <A HREF="/pidocs/Objects/HTTP.html#BasicAuth">BasicAuth</A> Realm="Admin"
CheckAuth <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#AccessByFile">AccessByFile</A> RequirePermissions="R"
#
# Cause a '501 Not Implemented' Message for requests that
# are not 'GET' or 'HEAD', i.e.
# if !( Method=='GET' || Method=='HEAD' )
# then
# set status = 501
# endif
#
CheckType Condition="¬(&or(&cmpi($m,GET),&cmpi($m,HEAD)))" \
<A HREF="/pidocs/Objects/HTTP.html#StatusCode">StatusCode</A> StatusCode="501"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ConditionalGet">ConditionalGet</A>
CheckType <A HREF="/pidocs/Objects/HTTP.html#CheckForDirectory">CheckForDirectory</A> SetType="internal/x-directory"
#
# Otherwise: Set the media type based on the file extension
#
CheckType <A HREF="/pidocs/Objects/HTTP.html#MIMETypeByExtension">MIMETypeByExtension</A>
#
# Return 'COMPLETED' so an internal error will not be raised
#
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
#
# Most requests refer to a file, so put that first
#
# Handle the request by sending a file if
# - The Value of ObjectMap in the response DB is ""
# AND
# - The Media type of the resource does not match internal/*
#
Handle Condition="&and(¬(&dblookup(response,string,ObjectMap)),\
¬(®exp('internal/*',$c)))" <A HREF="/pidocs/Objects/HTTP.html#SendFile">SendFile</A>
Handle Condition="&cmp($c,internal/x-directory)" DirectoryIndexes
Handle Condition="&cmp($c,internal/x-server-parsed-html)" <A HREF="/pidocs/Objects/HTTP.html#SendSSI">SendSSI</A> \
Exec=Yes ExecFileFixup="\
/* exec file="" maps to Standard <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> (Scripts) */\
&dbreplace(response,string,ObjectMap,Scripts)\
&dbreplace(response,rfc822,Content-Type,internal/x-cgi)"
Handle Condition="&cmp($c,internal/x-imagemap)" <A HREF="/pidocs/Objects/Plugins.html#ImageMap">ImageMap</A>
Handle <A HREF="/pidocs/Objects/HTTP.html#SendFile">SendFile</A>
Log AccessLogger File="Logs/access.txt"
Log <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Destroy <A HREF="/pidocs/Objects/HTTP.html#DeleteTemporaryFiles">DeleteTemporaryFiles</A>
</Object>
# ---
#
# Documentation
#
# Handler sequence for documentation.
#
# ---
<Object>
Name Documentation
Class FlexibleHandlerClass
#
# Only execute this sequence for the documentation (check for
# the appropriate marker).
#
# Don't handle special resource types (internal/...)
#
Condition "&and(&cmp(&dblookup(response,string,ObjectMap),Pi3Docs),\
¬(®exp('internal/*',$c)))"
#
# Check if file is a directory
#
CheckType <A HREF="/pidocs/Objects/HTTP.html#CheckForDirectory">CheckForDirectory</A> SetType="internal/x-directory"
#
# Lookup media type by extension
#
CheckType <A HREF="/pidocs/Objects/HTTP.html#MIMETypeByExtension">MIMETypeByExtension</A>
#
# Force all non-internal media types to 'text/html'
#
CheckType Condition="¬(®exp('internal/*',$c))" <A HREF="/pidocs/Objects/HTTP.html#Action">Action</A> \
Pi3Expression="&dbreplace(response,rfc822,Content-Type,text/html)"
#
# Return 'COMPLETED' so as not to fall into other cases
#
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
#
# For documentation, Send documentation with header and footer
#
Handle <A HREF="/pidocs/Objects/HTTP.html#SendFile">SendFile</A> HeaderPattern="<BODY BACKGROUND="/icons/\
&if(&cmpi($o,MainVirtualHostInformation),Pi3Tile.gif,H2Tile.gif)"/*background depends on vhost*/\
BGCOLOR="#FFFFFF">\n"
</Object>
# ---
#
# FastCGIIOObject
#
# IOObject for communicating with fast <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> application servers. This
# one uses the TCP/IP transport.
#
# ---
<Object>
Name FastCGIIOObject
Class TCPIPIOClass
Type Active
# Timeouts. -1 specifies no timeout.
RecvTimeout 20
SendTimeout 20
</Object>
# ---
#
# Scripts, WinScripts, ISAPI, FastCGIScripts, Pi3Expr
#
# Handler sequences for resources which have mapped to these
# respective types
#
# ---
<Object>
Name Scripts
Class FlexibleHandlerClass
Condition "&cmp(&dblookup(response,string,ObjectMap),Scripts)"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="EFD" RefuseStatus=404
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="F" RefuseStatus=403
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#AccessByFile">AccessByFile</A> RequirePermissions="X"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Handle StandardCGI
</Object>
<Object>
Name WinScripts
Class FlexibleHandlerClass
Condition "&cmp(&dblookup(response,string,ObjectMap),WinScripts)"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="EFD" RefuseStatus=404
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="F" RefuseStatus=403
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#AccessByFile">AccessByFile</A> RequirePermissions="X"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Handle WinCGI
</Object>
<Object>
Name ISAPI
Class FlexibleHandlerClass
Condition "&cmp(&dblookup(response,string,ObjectMap),ISAPI)"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="EFD" RefuseStatus=404
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="F" RefuseStatus=403
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#AccessByFile">AccessByFile</A> RequirePermissions="X"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Handle <A HREF="/pidocs/Objects/ISAPI.html#ISAPI20">ISAPI20</A>
</Object>
<Object>
Name FastCGIScripts
Class FlexibleHandlerClass
Condition "&cmp(&dblookup(response,string,ObjectMap),FastCGIScripts)"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="EFD" RefuseStatus=404
CheckPath <A HREF="/pidocs/Objects/HTTP.html#RefuseFileByMask">RefuseFileByMask</A> AllowFileMask="F" RefuseStatus=403
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
Handle <A HREF="/pidocs/Objects/Fcgi.html#FastCGI">FastCGI</A> \
IOObject="FastCGIIOObject" \
Variable="AUTH_TYPE=$x" \
Variable="CONTENT_LENGTH=$Y" \
Variable="CONTENT_TYPE=$C" \
Variable="HTTPS=$g" \
Variable="&if($K,HTTPS_KEYSIZE=$K,)" \
Variable="&if($K,HTTPS_SECRETKEYSIZE=$G,)" \
Variable="PATH_INFO=$I" \
Variable="PATH_TRANSLATED=$Z" \
Variable="QUERY_STRING=$q" \
Variable="REMOTE_ADDR=$A" \
Variable="REMOTE_HOST=$h" \
Variable="REMOTE_IDENT=$i" \
Variable="REMOTE_USER=$u" \
Variable="REQUEST_METHOD=$m" \
Variable="SCRIPT_NAME=$z" \
Variable="SERVER_NAME=$v" \
Variable="SERVER_PORT=&if($p,$p,&if($K,443,80))" \
Variable="SERVER_PROTOCOL=$H" \
Variable="SERVER_SOFTWARE=$S"
</Object>
<Object>
Name Pi3Expr
Class FlexibleHandlerClass
Condition "&cmp(&dblookup(response,string,ObjectMap),Pi3Expr)"
CheckPath <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
CheckAccess <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode="COMPLETED"
CheckType <A HREF="/pidocs/Objects/HTTP.html#ReturnCode">ReturnCode</A> ReturnCode=COMPLETED
Handle <A HREF="/pidocs/Objects/HTTP.html#SendPi3Expression">SendPi3Expression</A> HTTPEquiv="Content-Type: text/html" \
Pi3Expression="\
/* */\
/* */\
/* A Large <A HREF="/pidocs/Objects/Pi3API.html#Pi3Expression">Pi3Expression</A> to send to the client */\
/* in one go */\
/* */\
/* This will generate a dynamic HTML page */\
/* */\
<TITLE>Pi3Expressions - DB Dump</TITLE>\
<HTML><BODY BACKGROUND="/icons/Pi3Tile.gif">\
<CENTER><H2>Pi3Expressions - DB Dump</H2>\
<A NAME="index">$M\
<UL>$M\
<LI><A HREF="#connection">Connection DB</A>$M\
<LI><A HREF="#request">Request DB</A>$M\
<LI><A HREF="#response">Response DB</A>$M\
<LI><A HREF="#host">Host DB</A>$M\
</UL>$M\
<HR>$M\
<A NAME="connection">$M\
<H3>Dump of Connection DB <I>dblookup(connection,...)</I></H3>$M\
<TABLE BORDER=1 CELLPADDING=5><TH>Type<TH>Variable<TH>Value$M\
&dblookup(connection,string,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(connection,rfc822,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(connection,opaque,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
</TABLE>\
<A HREF="#index">Index</A>$M\
<HR>$M\
<A NAME="request">$M\
<H3>Dump of Request DB <I>dblookup(request,...)</I></H3>$M\
<TABLE BORDER=1 CELLPADDING=5><TH>Type<TH>Variable<TH>Value$M\
&dblookup(request,string,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(request,rfc822,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(request,opaque,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
</TABLE>\
<A HREF="#index">Index</A>$M\
<HR>$M\
<A NAME="response">$M\
<H3>Dump of Response DB <I>dblookup(response,...)</I></H3>$M\
<TABLE BORDER=1 CELLPADDING=5><TH>Type<TH>Variable<TH>Value$M\
&dblookup(response,string,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(response,rfc822,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(response,opaque,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
</TABLE>\
<A HREF="#index">Index</A>$M\
<HR>$M\
<A NAME="host">$M\
<H3>Dump of Host DB <I>dblookup(host,...)</I></H3>$M\
<TABLE BORDER=1 CELLPADDING=5><TH>Type<TH>Variable<TH>Value$M\
&dblookup(host,string,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(host,rfc822,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
&dblookup(host,opaque,,,<TR><TD><B>&_(2)</B><TD>&_(1)<TD>&_()$M)\
</TABLE>\
<A HREF="#index">Index</A>$M\
</CENTER><HR></BODY></HTML>"
</Object>
# ---
#
# Virtual hosting handlers and configuration
#
# ---
#
# Host2 Virtual host object
<Object>
Name Host2
Class VirtualHostClass
Administrator mr_web@Host2.dom
HostName www.johnroy.com/host2
ServerPort 80
</Object>
#
# Virtual host mappings
#
<Object>
Name VirtualHosts
Class FlexibleHandlerClass
#
# if the URL starts with '/host2/' assign to virtual host 2
#
HostMap <A HREF="/pidocs/Objects/HTTP.html#VirtualHostByURL">VirtualHostByURL</A> VirtualHostObject="Host2" URLPath="/host2/"
#
# Introduce a mapping
Mapping Host2Mappings
</Object>
#
# Override some mappings for Host2 only
#
<Object>
Name Host2Mappings
Class FlexibleHandlerClass
#
# These mappings only apply to Host2
#
Condition "&cmp($o,Host2)"
#
# map to second document root
#
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/" To="WebRoot2/"
</Object>
#
# Host1 mappings
#
<Object>
Name Host1Mappings
Class FlexibleHandlerClass
#
# These mappings only apply to MainVirtualHostInformation
#
Condition "&cmp($o,MainVirtualHostInformation)"
#
# map to first document root
#
Mapping <A HREF="/pidocs/Objects/HTTP.html#PathMapper">PathMapper</A> From="/" To="WebRoot/"
</Object>
# ---
#
# HTTPLogicObject
#
# HTTP Logic object, dispatches requests to all other handlers
#
# ---
<Object>
Name HTTPLogicObject
Class HTTPDispatcherClass
Handlers Start Scripts WinScripts FastCGIScripts Documentation Pi3Expr ISAPI Default
KeepOpen On
ServerRoot ./../
ServerStamp Pi3Web/0.9b4
DefaultHost MainVirtualHostInformation
MIMEFile "Fragment/Mime.typ"
DefaultMIMEType "application/octet-stream"
ErrorLogFile "Logs/error.txt"
# Specifying a file for DebugLogFile effectively turns on debugging
# DebugLogFile "Logs/debug.txt"
#
# The following to directives specify expressions to be logged
# before and after each handler execution respectively.
# The expression as given logs process/thread and handler context
# information indented to the nested handler level.
#
# Timing information is also given for performance tuning.
#
# This logging information is EXTREMELY verbose. Don't even
# think about using it in a production server
#
DebugBeforeHandler "[$P:$k] &align(,$X)&align(,$X) |--> $T \
-------- &align($N,12) &align($R,12) $n \"$r\" $s"
DebugAfterHandler "[$P:$k] &align(,$X)&align(,$X) |<-- $T \
&align($D,8) &align($N,12) &align($R,12) $n \"$r\" $s"
</Object>
# ---
#
# Directory listing handlers and configuration
#
# ---
<Object>
Name DirectoryMappings
Class FlexibleHandlerClass
#
# 1..Simple HTML
#
# simple HTML, no icons or descriptions
Mapping DocumentMapper From="/dir_SimpleHTML/" To="Pi3Docs/features/" \
Action="&dbreplace(response,string,DirListType,SimpleHTML)"
#
# 2..Simple DOS like format with alternate name
#
Mapping DocumentMapper From="/dir_DOS/" To="Pi3Docs/features/" \
Action="&dbreplace(response,string,DirListType,DOS)"
#
# 3..Fixed pitch HTML with icons and descriptions
# plain HTML
Mapping DocumentMapper From="/dir_TableHTML/" \
To="Pi3Docs/features/" \
Action="&dbreplace(response,string,DirListType,TableHTML)"
#
# 4..HTML with tables
#
# HTML with tables
Mapping DocumentMapper From="/dir_PlainHTML/" To="Pi3Docs/features/" \
Action="&dbreplace(response,string,DirListType,PlainHTML)"
#
# 5..Raw tab delimited text
#
# Tab delimited text
Mapping DocumentMapper From="/dir_TDT/" To="Pi3Docs/features/" \
Action="&dbreplace(response,string,DirListType,TDT)"
</Object>
#
# Directory Indexes
#
<Object>
Name DirectoryIndexes
Class FlexibleHandlerClass
# 1..Simple HTML
Handle Condition="&cmp(&dblookup(response,string,DirListType),SimpleHTML)" \
SimpleHTML
# 2..Simple DOS format
Handle Condition="&cmp(&dblookup(response,string,DirListType),DOS)" DOS
# 3..Plain HTML
Handle Condition="&cmp(&dblookup(response,string,DirListType),PlainHTML)" \
PlainHTML
# 4..HTML with tables
Handle Condition="&cmp(&dblookup(response,string,DirListType),TableHTML)" \
TableHTML
# 5..Raw tab delimited text
Handle Condition="&cmp(&dblookup(response,string,DirListType),TDT)" TDT
#
# The default index type used for examples other than the
# sample directory will be a table HTML index
#
Handle TableHTML
</Object>
# ---
#
# Simple HTML
#
# ---
<Object>
Name SimpleHTML
Class DirectoryIndexClass
HeaderPattern "<HTML><TITLE>Simple index of %p</TITLE>\
<H2>Simple index of %p</H2>\n"
ListTop "\
<PRE><B>\
&align(Name,23) \
&align(Size,6) \
&align(Last Modified,18)\
\n<HR SIZE=1 NOSHADE></B>\n"
FilePattern "\
<A HREF="%r">&align(&abbrev(%n,23,...)</A>,27) /* link to file */\
&align(%s,6) /* size */\
&align(%l,18)/* last modified date */\
\n"
LastModifiedFormat "%d-%b-%y %H:%M"
Include "*"
SwapFileName ".. Parent Directory"
ListBottom "</PRE>\n"
FooterPattern "<HR SIZE=1 NOSHADE>\
Contact the hostmaster <A HREF="mailto:$a"<I>$a</I></A>.\
</HTML>"
HeaderFile "HEADER"
FooterFile "README"
Exclude "."
Exclude "~*"
Exclude ".desc"
Exclude "README"
Exclude "HEADER"
Options " Name | Size | RelPath "
</Object>
# ---
#
# Simple DOS formatted index
#
# ---
<Object>
Name DOS
Class DirectoryIndexClass
HeaderPattern "<HTML><TITLE>DOS style index of %p - </TITLE>\
<H2>DOS style index of %p - </H2>\n\
"
ListTop "<PRE>\
&align(Last Modified,24,left)\
&align(Size,14) \
&align('(8,3) Name',12) \
Name \n<HR SIZE=1 NOSHADE>"
FilePattern "\
&align(%l,24)\
&if(%b,&align('<DIR>',18,left),&align(%s,14,right)) \
<A HREF="%r">&align(&abbrev(%a,12,...)</A>,16,left) \
<A HREF="%r">%n</A> \n"
LastModifiedFormat "%d/%m/%y %I:%M%p"
Include "*"
DescriptionFile ".desc"
ListBottom "</PRE>\n"
FooterPattern "<HR SIZE=1 NOSHADE>\
Contact the hostmaster <A HREF="mailto:$a"<I>$a</I></A>.\
</HTML>"
HeaderFile "HEADER"
FooterFile "README"
Exclude "."
Exclude "~*"
Exclude ".desc"
Exclude "README"
Exclude "HEADER"
Options " AltName | Name | FormatSize | RelPath "
</Object>
# ---
#
# Plain HTML directory listing with icons
#
# ---
<Object>
Name PlainHTML
Class DirectoryIndexClass
HeaderPattern "<HTML><TITLE>Plain HTML index of %p</TITLE>\
<BODY BACKGROUND="/icons/\
&if(&cmpi($o,MainVirtualHostInformation),Pi3Tile.gif,H2Tile.gif)"/*background depends on vhost*/\
BGCOLOR="#FFFFFF">\
<H2>Plain HTML index of %p</H2>\n"
ListTop "\
<PRE>\
<IMG SRC="/icons/blank.gif" BORDER=NONE ALT=" ">\
&align(Name,23) &align(Last Modified,18)\
&align(Size,6) Description\n<HR SIZE=1 NOSHADE>"
FilePattern "\
<A HREF="%r"><IMG SRC="%i" BORDER=NONE ALT="[]"></A>/*icon is a link */\
<A HREF="%r">&align(&abbrev(%n,23,...)</A>,27) /* link to file */\
&align(%l,18)/* last modified date */\
&align(%s,6) /* size */\
&if(%d,%d,<I>%c</I>)/* description, or MIME */\
\n"
LastModifiedFormat "%d-%b-%y %H:%M"
Include "*"
MIMEIcon "text/html /icons/layout.gif"
MIMEIcon "text/x-code /icons/c.gif"
MIMEIcon "text/x-perl /icons/p.gif"
MIMEIcon "text/* /icons/text.gif"
MIMEIcon "internal/x-directory /icons/folder.gif"
MIMEIcon "audio/* /icons/sound2.gif"
MIMEIcon "image/* /icons/image2.gif"
MIMEIcon "application/x-uuencoded /icons/uuencoded.gif"
MIMEIcon "application/x-tar /icons/compressed.gif"
MIMEIcon "application/x-gzip /icons/compressed.gif"
MIMEIcon "application/x-sh /icons/script.gif"
MIMEIcon "application/* /icons/binary.gif"
MIMEIcon "x-world/x-vrml /icons/burst.gif"
MIMEIcon "*/* /icons/unknown.gif"
DescriptionFile ".desc"
SwapFileName ".. Parent Directory"
ListBottom "</PRE>\n"
FooterPattern "<HR SIZE=1 NOSHADE>\
Contact the hostmaster <A HREF="mailto:$a"<I>$a</I></A>.\
</BODY></HTML>"
HeaderFile "HEADER"
FooterFile "README"
Exclude "."
Exclude "~*"
Exclude ".desc"
Exclude "README"
Exclude "HEADER"
Options " Name | AbbrevSize | RelPath | Icon | MIMEType "
</Object>
# ---
#
# Directory listing with HTML tables
#
# ---
<Object>
Name TableHTML
Class DirectoryIndexClass
HeaderPattern "<HTML><TITLE>Enhanced HTML index of %p</TITLE>\
<BODY BACKGROUND="/icons/\
&if(&cmpi($o,MainVirtualHostInformation),Pi3Tile.gif,H2Tile.gif)"/*background depends on vhost*/\
BGCOLOR="#FFFFFF">\
<H2>Enhanced HTML index of %p</H2>\n"
ListTop "<CENTER><TABLE CELLSPACING=0 CELLPADDING=0 WIDTH=100'%'>\
<TR>\
<TH NOWARP ALIGN=LEFT>\
<IMG SRC="/icons/blank.gif" ALIGN=MIDDLE BORDER=NONE ALT="">\
<TH NOWRAP ALIGN=LEFT>Name<BR><HR SIZE=1 NOSHADE>\
<TH NOWRAP ALIGN=LEFT>Size<BR><HR SIZE=1 NOSHADE>\
<TH NOWRAP ALIGN=LEFT>Last Modified<BR><HR SIZE=1 NOSHADE>\
<TH NOWRAP ALIGN=LEFT>Description<BR><HR SIZE=1 NOSHADE>\n"
FilePattern "<TR>\
<TD NOWRAP ALIGN=LEFT VALIGN=TOP>\
<A HREF="%r"><IMG SRC="%i" BORDER=NONE ALIGN=MIDDLE ALT=""></A>\
<TD NOWRAP ALIGN=LEFT VALIGN=TOP><A HREF="%r">&abbrev(%n,20,...)</A>\
<TD NOWRAP ALIGN=LEFT VALIGN=TOP>%s<TD>%l\
<TD NOWRAP ALIGN=LEFT VALIGN=TOP>&if(%d,%d,<I>%c</I>)\n"
ListBottom "</TABLE></CENTER>\n"
LastModifiedFormat "%d-%b-%y %H:%M"
Include "*"
MIMEIcon "text/html /icons/layout.gif"
MIMEIcon "text/x-code /icons/c.gif"
MIMEIcon "text/x-perl /icons/p.gif"
MIMEIcon "text/* /icons/text.gif"
MIMEIcon "internal/x-directory /icons/folder.gif"
MIMEIcon "audio/* /icons/sound2.gif"
MIMEIcon "image/* /icons/image2.gif"
MIMEIcon "application/x-uuencoded /icons/uuencoded.gif"
MIMEIcon "application/x-tar /icons/compressed.gif"
MIMEIcon "application/x-gzip /icons/compressed.gif"
MIMEIcon "application/x-sh /icons/script.gif"
MIMEIcon "application/* /icons/binary.gif"
MIMEIcon "x-world/x-vrml /icons/burst.gif"
MIMEIcon "*/* /icons/unknown.gif"
DescriptionFile ".desc"
SwapFileName ".. Parent Directory"
FooterPattern "<HR SIZE=1 NOSHADE>\
Contact the hostmaster <A HREF="mailto:$a"<I>$a</I></A>.\
</BODY></HTML>"
HeaderFile "HEADER"
FooterFile "README"
Exclude "."
Exclude "~*"
Exclude ".desc"
Exclude "README"
Exclude "HEADER"
Options " Name | AbbrevSize | RelPath | Icon | MIMEType "
</Object>
# ---
#
# Raw tab delimited directory index. For input into other
# applications. This data could be cut and pasted into a
# spreadsheet application.
#
# ---
<Object>
Name TDT
Class DirectoryIndexClass
FilePattern "%r\t%n\t%l\t%s\t%c\n"
LastModifiedFormat "%d-%b-%y %H:%M"
Include "*"
Exclude "."
Exclude "~*"
Exclude ".desc"
Exclude "README"
Exclude "HEADER"
HTTPEquiv "Content-Type: text/plain"
Options " Name | Size | RelPath "
</Object>
# ---
#
# CGIFileIOObject
#
# IOObject used for communication between web browser and
# server.
#
# ---
<Object>
Name CGIFileIOObject
Class PipeIOClass
ReadTimeout -1
WriteTimeout 10
NoYield "Read"
</Object>
# ---
#
# StandardCGI
#
# Configuration for Standard <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A>
#
# ---
<Object>
Name StandardCGI
Class CGIClass
# Specify the IO object use to communicate with the <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> program
FileIOObject CGIFileIOObject
# Snoop IO objects can be instantiated in the IO chain with a line
# like this. They log all IO trafic. This is useful for debugging.
# FileIOObject SnoopIOObject IOObject="CGIFileIOObject" OutFile="cgi.dbg"
DefaultCommandLine "%p%q"
CommandLineByExt .bat="cmd.exe /c %p%q"
CommandLineByExt .cmd="cmd.exe /c %p%q"
CommandLineByExt .pl="perl %p%q"
IncludeParentsEnvironment Yes
EnvironmentSize 8192
# These are the environment variables that are sent to the
# <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> program
Variable "AUTH_TYPE=$x"
Variable "CONTENT_LENGTH=$Y"
Variable "CONTENT_TYPE=$C"
Variable "HTTPS=$g"
Variable "&if($K,HTTPS_KEYSIZE=$K,)"
Variable "&if($K,HTTPS_SECRETKEYSIZE=$G,)"
Variable "GATEWAY_INTERFACE=CGI/1.1"
Variable "PATH_INFO=$I"
Variable "PATH_TRANSLATED=$Z"
Variable "QUERY_STRING=$q"
Variable "REMOTE_ADDR=$A"
Variable "REMOTE_HOST=$h"
Variable "REMOTE_IDENT=$i"
Variable "REMOTE_USER=$u"
Variable "REQUEST_METHOD=$m"
Variable "SCRIPT_NAME=$z"
Variable "SERVER_NAME=$v"
Variable "SERVER_PORT=&if($p,$p,&if($K,443,80))"
Variable "SERVER_PROTOCOL=$H"
Variable "SERVER_SOFTWARE=$S"
ExtraHeaders Yes
ExtraHeadersPrefix "HTTP_"
ExtraHeadersIgnore "Content-Type Content-Length"
SendCRLF Yes
</Object>
# ---
#
# WinCGI
#
# Handle windows <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A>
#
# ---
<Object>
Name WinCGI
Class CGIClass
FileIOObject CGIFileIOObject
DefaultCommandLine "%p %d"
IncludeParentsEnvironment Yes
EnvironmentSize 8192
Variable "AUTH_TYPE=$x"
Variable "CONTENT_LENGTH=$Y"
Variable "CONTENT_TYPE=$C"
Variable "HTTPS=$g"
Variable "&if($K,HTTPS_KEYSIZE=$K,)"
Variable "&if($K,HTTPS_SECRETKEYSIZE=$G,)"
Variable "GATEWAY_INTERFACE=CGI/1.1"
Variable "PATH_INFO=$I"
Variable "PATH_TRANSLATED=$Z"
Variable "QUERY_STRING=$q"
Variable "REMOTE_ADDR=$A"
Variable "REMOTE_HOST=$h"
Variable "REMOTE_IDENT=$i"
Variable "REMOTE_USER=$u"
Variable "REQUEST_METHOD=$m"
Variable "SCRIPT_NAME=$z"
Variable "SERVER_NAME=$v"
Variable "SERVER_PORT=&if($p,$p,&if($K,443,80))"
Variable "SERVER_PROTOCOL=$H"
Variable "SERVER_SOFTWARE=$S"
ExtraHeaders Yes
ExtraHeadersPrefix "HTTP_"
ExtraHeadersIgnore "Content-Type Content-Length"
# Generate windows <A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> filenames by preappending the
# process id to the unique identifier.
DataFile "cgi-temp/$P_%u.ini"
StdinFile "cgi-temp/$P_%u.in"
StdoutFile "cgi-temp/$P_%u.out"
DataBlock "\
[CGI]$M\
Request Protocol=$H$M\
Request Method=$m$M\
Physical Path=$f$M\
<A HREF="/pidocs/Objects/HTTP.html#CGI">CGI</A> Version=CGI/1.1 (Win)$M\
Content Type=$C/* short for &dblookup(request,rfc822,Content-Type)*/$M\
Content Length=$Y/* short for &dblookup(request,rfc822,Content-Length)*/$M\
$M\
[Accept]$M\
$M\
[System]$M\
Output File=%o$M\
Content File=%i$M\
$M\
[Accept]$M\
$M\
[Extra Headers]$M\
$M\
[Form Literal]$M\
$M\
[Form External]$M\
$M\
[Form File]$M\
$M\
[Form Huge]$M\
$M\
"
SendCRLF Yes
</Object>
</PRE></BODY></HTML>