org.w3c.jigsaw.frames
Class CgiFrame

java.lang.Object
  extended by org.w3c.tools.resources.AttributeHolder
      extended by org.w3c.tools.resources.Resource
          extended by org.w3c.tools.resources.FramedResource
              extended by org.w3c.tools.resources.ResourceFrame
                  extended by org.w3c.tools.resources.ProtocolFrame
                      extended by org.w3c.jigsaw.frames.HTTPFrame
                          extended by org.w3c.jigsaw.frames.CgiFrame
All Implemented Interfaces:
java.lang.Cloneable, java.util.EventListener, AttributeChangedListener, FrameEventListener

public class CgiFrame
extends HTTPFrame

Handle CGI scripts.


Field Summary
protected static int ATTR_CGI_DEBUG
          Attribute index - Turn the script in debug mode.
protected static int ATTR_COMMAND
          Attribute index - The array of string that makes the command to run.
protected static int ATTR_ENV
          Attribute index - Additional environment vars
protected static int ATTR_GENERATES_FORM
          Attribute index - Does the script generates the form on GET ?
protected static int ATTR_INTERPRETER
          Attribute index - The interpreter to use, if any.
protected static int ATTR_NOHEADER
          Attribute index - Does the script takes care of its headers ?
protected static int ATTR_REMOTE_HOST
          Attribute index - Do DNS, to fill in REMOTE_HOST env var.
 
Fields inherited from class org.w3c.jigsaw.frames.HTTPFrame
acceptRanges, allowed, ATTR_ALLOW_DEL, ATTR_BROWSABLE, ATTR_CHARSET, ATTR_CONTENT_ENCODING, ATTR_CONTENT_LANGUAGE, ATTR_CONTENT_LENGTH, ATTR_CONTENT_TYPE, ATTR_ICON, ATTR_ICONDIR, ATTR_INDEX, ATTR_INDEXES, ATTR_MAXAGE, ATTR_MD5, ATTR_PUTABLE, ATTR_QUALITY, ATTR_RELOCATE, ATTR_STYLE_LINK, ATTR_TITLE, browsetype, COND_FAILED, COND_OK, COND_WEAK, dresource, fresource, listing, listing_stamp, STATE_CONTENT_LOCATION
 
Fields inherited from class org.w3c.tools.resources.ResourceFrame
filterClass, frameListener, resource
 
Fields inherited from class org.w3c.tools.resources.FramedResource
ATTR_OID, attrListener, debugEvent, event_disabled, framesRef, structListener
 
Fields inherited from class org.w3c.tools.resources.Resource
ATTR_CONTEXT, ATTR_HELP_URL, ATTR_IDENTIFIER, ATTR_LAST_MODIFIED, ATTR_PARENT, ATTR_RESOURCE_FRAMES, ATTR_STORE_ENTRY, ATTR_URL, co, id
 
Fields inherited from class org.w3c.tools.resources.AttributeHolder
attributes, values
 
Constructor Summary
CgiFrame()
           
 
Method Summary
 boolean checkCgiDebug()
          Get the CGI debug flag.
 boolean checkGeneratesFormFlag()
          Get the generates form flag.
 boolean checkNoheaderFlag()
          Get the noheader flag.
 boolean checkRemoteHost()
          Get the remote host attribute value.
 Reply get(Request request)
          GET method implementation.
 java.lang.String[] getCommand()
          Get the command string array.
 java.lang.String getEnvName(java.lang.String name)
          Turn the given header name into it's env var canonical name.
 HttpEntityTag getETag()
          Get this resource Etag
 java.lang.String getInterpreter()
          Get the interpreter to use to execute the script.
 ArrayDictionary getUserEnv()
           
protected  Reply handleCGIOutput(java.lang.Process process, Request request)
          Handle the CGI script output.
 boolean lookup(LookupState ls, LookupResult lr)
          Lookup sub-resources.
protected  java.lang.Process makeCgiCommand(Request request)
          Prepare the command to run for this CGI script, and run it.
 Reply post(Request request)
          Handle the POST method according to CGI/1.1 specification.
 void registerResource(FramedResource resource)
          At register time, if no command, use a suitable default.
 
Methods inherited from class org.w3c.jigsaw.frames.HTTPFrame
addStyleSheet, attributeChanged, browse, checkExpect, checkIfMatch, checkIfModifiedSince, checkIfNoneMatch, checkIfUnmodifiedSince, checkRequest, checkValidators, computeContainerListing, computeETag, computeTrashDir, computeTrashFile, createDefaultReply, createFileReply, delete, deleteDirectoryResource, deleteFileResource, deleteMe, deleteOtherResource, extended, getAllow, getAllowDeleteFlag, getBrowsableFlag, getBrowseType, getCharset, getContentEncoding, getContentLanguage, getContentLength, getContentType, getDirectoryListing, getDirectoryResource, getDirectoryResource, getFileResource, getFileResource, getHelpURL, getHelpURL, getIcon, getIconDirectory, getIndex, getIndexes, getMaxAge, getMD5Flag, getOtherResource, getPutableFlag, getQuality, getRelocateFlag, getStyleSheetURL, getTitle, getURL, handleRangeRequest, head, headDirectoryResource, headFileResource, headOtherResource, initialize, link, lookupDirectory, lookupFile, lookupOther, lookupResource, options, perform, performFrames, pickleValues, put, putFileResource, putOtherResource, registerOtherResource, setValue, trace, unlink, unsafeGetQuality, updateCachedHeaders
 
Methods inherited from class org.w3c.tools.resources.ResourceFrame
addFrameEventListener, eventDisabled, fireFrameEvent, frameModified, getFilters, getFilters, getFrameReference, getResource, getResourceReference, getSpaceEntry, getURLPath, lookupFilters, lookupFrames, postFrameEvent, processEvent, removeFrameEventListener, unregisterResource, updateDefaultChildAttributes
 
Methods inherited from class org.w3c.tools.resources.FramedResource
addAttributeChangedListener, addStructureChangedListener, collectFramesReference, delete, disableEvent, displayEvent, enableEvent, fireAttributeChangeEvent, fireStructureChangedEvent, fireStructureChangedEvent, frameAdded, frameRemoved, getClone, getFrame, getFrame, getFrameReference, getFrameReference, getFramesReference, getOid, initialize, markModified, notifyUnload, postAttributeChangeEvent, postEvent, postStructureChangedEvent, postStructureChangedEvent, registerFrame, registerFrameIfNone, removeAttributeChangedListener, removeStructureChangedListener, setSilentValue, setSilentValue, unregisterFrame
 
Methods inherited from class org.w3c.tools.resources.Resource
acceptUnload, checkMultipleLock, collectFrames, getContext, getFrame, getFrames, getIdentifier, getLastModified, getParent, getServer, getSpace, getStoreEntry, getValue, getValue, isInitialized, isUnloaded, setContext, setContext, setValue, unsafeGetContext, unsafeGetFrame, unsafeGetFrames, unsafeGetIdentifier, unsafeGetResourceReference, unsafeGetURLPath, unsafeGetValue, updateAttributes
 
Methods inherited from class org.w3c.tools.resources.AttributeHolder
definesAttribute, definesAttribute, getAttributes, getBoolean, getChar, getClone, getClone, getDouble, getFloat, getInt, getLong, getString, getValue, lookupAttribute, print, setBoolean, setChar, setDouble, setFloat, setInt, setLong, setString, setValue, unsafeDefinesAttribute, unsafeGetDouble, unsafeGetString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ATTR_INTERPRETER

protected static int ATTR_INTERPRETER
Attribute index - The interpreter to use, if any.


ATTR_COMMAND

protected static int ATTR_COMMAND
Attribute index - The array of string that makes the command to run.


ATTR_NOHEADER

protected static int ATTR_NOHEADER
Attribute index - Does the script takes care of its headers ?


ATTR_GENERATES_FORM

protected static int ATTR_GENERATES_FORM
Attribute index - Does the script generates the form on GET ?


ATTR_REMOTE_HOST

protected static int ATTR_REMOTE_HOST
Attribute index - Do DNS, to fill in REMOTE_HOST env var.


ATTR_CGI_DEBUG

protected static int ATTR_CGI_DEBUG
Attribute index - Turn the script in debug mode.


ATTR_ENV

protected static int ATTR_ENV
Attribute index - Additional environment vars

Constructor Detail

CgiFrame

public CgiFrame()
Method Detail

getInterpreter

public java.lang.String getInterpreter()
Get the interpreter to use to execute the script. This is most usefull for operating systems that don't have a !# convention ala UNIX.

Returns:
The interpreter to run the script.

getCommand

public java.lang.String[] getCommand()
Get the command string array.


getUserEnv

public ArrayDictionary getUserEnv()

checkNoheaderFlag

public boolean checkNoheaderFlag()
Get the noheader flag.

Returns:
The boolean value of the noheader flag.

checkGeneratesFormFlag

public boolean checkGeneratesFormFlag()
Get the generates form flag.

Returns:
The boolean value of the generates form flag.

checkRemoteHost

public boolean checkRemoteHost()
Get the remote host attribute value. If turned on, this flag will enable the REMOTE_HOST env var computation.

Returns:
A boolean.

checkCgiDebug

public boolean checkCgiDebug()
Get the CGI debug flag.

Returns:
The boolean value of the CGI debug flag.

getEnvName

public java.lang.String getEnvName(java.lang.String name)
Turn the given header name into it's env var canonical name. This guy is crazy enough to run CGI scripts, he can pay for that overhead.

Parameters:
name - The header name.
Returns:
A String giving the official env variable name for that header.

getETag

public HttpEntityTag getETag()
Get this resource Etag

Overrides:
getETag in class HTTPFrame
Returns:
an instance of HttpEntityTag, or null if not defined.

handleCGIOutput

protected Reply handleCGIOutput(java.lang.Process process,
                                Request request)
                         throws ProtocolException
Handle the CGI script output. This methods handles the CGI script output. Depending on the value of the noheader attribute it either:

Parameters:
process - The underlying CGI process.
request - The processed request.
Throws:
ProtocolException - If an HTTP error should be sent back to the client.

makeCgiCommand

protected java.lang.Process makeCgiCommand(Request request)
                                    throws ProtocolException,
                                           java.io.IOException
Prepare the command to run for this CGI script, and run it.

Parameters:
request - The request to handle.
Returns:
The running CGI process object.
Throws:
ProtocolException - If we weren't able to build the command or the environment.
java.io.IOException - if an IO erro occurs.

lookup

public boolean lookup(LookupState ls,
                      LookupResult lr)
               throws ProtocolException
Lookup sub-resources. Accumulate the remaning path in some special state of the request.

This allows us to implement the PATH_INFO CGI variable properly.

Overrides:
lookup in class HTTPFrame
Parameters:
ls - Current lookup state.
lr - Lookup result under construction.
Returns:
A boolean true if lookup should continue, false otherwise.
Throws:
ProtocolException - (fixme doc)
See Also:
ResourceFrame.lookupFilters(org.w3c.tools.resources.LookupState, org.w3c.tools.resources.LookupResult), HTTPFrame.lookupResource(org.w3c.tools.resources.LookupState, org.w3c.tools.resources.LookupResult)

get

public Reply get(Request request)
          throws ProtocolException,
                 ResourceException
GET method implementation. this method is splitted into two cases:

If the resource is able to generates its form, than run the script to emit the form. Otherwsie, use our super class (FileResource) ability to send the file that contains the form.

Note that there is no need to feed the underlying process with data in the GET case.

Overrides:
get in class HTTPFrame
Parameters:
request - The request to handle.
Throws:
ProtocolException - If processing the request failed.
ResourceException - If the resource got a fatal error.

post

public Reply post(Request request)
           throws ProtocolException,
                  ResourceException
Handle the POST method according to CGI/1.1 specification. The request body is sent back to the launched CGI script, as is, and the script output is handled by the handleCGIOutput method.

Overrides:
post in class HTTPFrame
Parameters:
request - The request to process.
Throws:
ProtocolException - If the processing failed.
ResourceException - If the resource got a fatal error.

registerResource

public void registerResource(FramedResource resource)
At register time, if no command, use a suitable default. THis method will set the command to the identifier, if it is not provided.

Overrides:
registerResource in class HTTPFrame
Parameters:
values - Default attribute values.