wrowe       00/09/26 08:23:16

  Modified:    htdocs/manual/mod mod_isapi.html
  Log:
    Some corrections, clarifications and new directives.
    Hopefully in the new 'proper' form, but feel free to correct me.
  
  Revision  Changes    Path
  1.7       +258 -51   httpd-docs-1.3/htdocs/manual/mod/mod_isapi.html
  
  Index: mod_isapi.html
  ===================================================================
  RCS file: /home/cvs/httpd-docs-1.3/htdocs/manual/mod/mod_isapi.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- mod_isapi.html    2000/07/28 22:58:29     1.6
  +++ mod_isapi.html    2000/09/26 15:23:14     1.7
  @@ -16,58 +16,249 @@
   
   <H1 ALIGN="CENTER">Module mod_isapi</H1>
   
  -<P>This module is contained in the <CODE>mod_isapi.c</CODE> file, and is
  -   compiled into the Windows distribution by default. It provides support 
for 
  -   ISAPI Extensions when running under Microsoft Windows. Any document with 
  -   a handler of <CODE>isapi-isa</CODE> will be processed by this module.</P>
  -
  -<H2>Purpose</H2>
  -
  -<P>This module implements the Internet Server Extension API. It allows 
  -   Internet Server Applications (<EM>i.e.</EM>, ISAPI .dll handler modules)
  -   to be used with Apache for Windows, subject to the noted restrictions.</P>
  +<P>This module supports ISAPI Extensions within Apache for Windows.</P>
   
  +<P><A
  +HREF="module-dict.html#Status"
  +REL="Help"
  +><STRONG>Status:</STRONG></A> Base
  +<BR>
  +<A
  +HREF="module-dict.html#SourceFile"
  +REL="Help"
  +><STRONG>Source File:</STRONG></A> mod_isapi.c
  +<BR>
  +<A
  +HREF="module-dict.html#ModuleIdentifier"
  +REL="Help"
  +><STRONG>Module Identifier:</STRONG></A> isapi_module
  +<BR>
  +<A
  +HREF="module-dict.html#Compatibility"
  +REL="Help"
  +><STRONG>Compatibility:</STRONG></A> WIN32 only
  +</P>
  +
  +<H2>Summary</H2>
  +
  +<P>This module implements the Internet Server extension API. It allows 
  +   Internet Server extensions (<EM>e.g.</EM> ISAPI .dll modules) to be
  +   served by Apache for Windows, subject to the noted restrictions.</P>
  +
  +<P>ISAPI extension modules (.dll files) are written by third parties.  The 
  +   Apache Group does not author these modules, so we provide no support for 
  +   them.  Please contact the ISAPI's author directly if you are experiencing 
  +   problems running their ISAPI extention.  <STRONG>Please <EM>do not</EM> 
  +   post such problems to Apache's lists or bug reporting pages.</STRONG></P>
  +
   <H2>Usage</H2>
  +
  +<P>In the server configuration file, use the AddHandler directive to
  +   associate ISAPI files with the <CODE>isapi-isa</CODE> handler, and map 
  +   it to the with their file extensions.  To enable any .dll file to be 
  +   processed as an ISAPI extention, edit the httpd.conf file and add the 
  +   following line:</P>
   
  -<P>In the server configuration file, add a handler called
  -   <CODE>isapi-isa</CODE>, and map it to files with a <CODE>.DLL</CODE>
  -   extension. In other words:</P>
   <PRE>
       AddHandler isapi-isa dll
   </PRE>
  -<P>Now simply place the ISA DLLs into your document root, and they will
  -   be loaded when their URLs are accessed.</P>
   
  -<P>ISAPI Extensions are governed by the same restrictions as CGI
  -   scripts. That is, <CODE>Options ExecCGI</CODE> must be active in the
  -   directory that contains the ISA.</P>
  +<P>ISAPI Extensions are governed by the same permissions and restrictions 
  +   as CGI scripts. That is, <CODE>Options ExecCGI</CODE> must be set for
  +   the directory that contains the ISAPI .dll file.</P>
  +
  +<P>Now place an ISAPI .dll file into this web directory, with the 
  +   <CODE>Options ExecCGI</CODE> set properly, and it will be loaded and
  +   executed when requested by its URL.</P>
  +
  +   Review the <A HREF="#notes">Additional Notes</A> and the
  +   <A HREF="#journal">Programmer's Journal</A> for additional details and
  +   clarification of the specific ISAPI support offered by mod_isapi.</P>
  +
  +<H2>Directives</H2>
  +<UL>
  +<LI><A HREF="#ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</A>
  +<LI><A HREF="#ISAPILogNotSupported">ISAPILogNotSupported</A>
  +<LI><A HREF="#ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</A>
  +<LI><A HREF="#ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</A>
  +</UL>
  +<HR>
  +
  +<H2><A NAME="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer directive</A></H2>
  +<!--%plaintext &lt;?INDEX {\tt ISAPIReadAheadBuffer} directive&gt; -->
  +<A
  + HREF="directive-dict.html#Syntax"
  + REL="Help"
  +><STRONG>Syntax:</STRONG></A> ISAPIReadAheadBuffer <EM>size</EM><BR>
  +<A
  + HREF="directive-dict.html#Default"
  + REL="Help"
  +><STRONG>Default:</STRONG></A> 49152<BR>
  +<A
  + HREF="directive-dict.html#Context"
  + REL="Help"
  +><STRONG>Context:</STRONG></A> server config<BR>
  +<A
  + HREF="directive-dict.html#Override"
  + REL="Help"
  +><STRONG>Override:</STRONG></A> None<BR>
  +<A
  + HREF="directive-dict.html#Status"
  + REL="Help"
  +><STRONG>Status:</STRONG></A> Base<BR>
  +<A
  + HREF="directive-dict.html#Module"
  + REL="Help"
  +><STRONG>Module:</STRONG></A> mod_isapi<BR>
  +<A
  +HREF="module-dict.html#Compatibility"
  +REL="Help"
  +><STRONG>Compatibility:</STRONG></A> Apache 1.3.13 and later, Win32 only<P>
  +
  +
  +        Defines the maximum size of the Read Ahead Buffer sent to 
  +        ISAPI extentions when they are initally invoked.  All 
  +        remaining data must be retrieved using the ReadClient 
  +        callback; some ISAPI extensions may not support the
  +        ReadClient function.  Refer questions to the ISAPI extention's 
  +        author.
  +        <P>
  +<HR>
  +
  +<H2><A NAME="ISAPILogNotSupported">ISAPILogNotSupported directive</A></H2>
  +<!--%plaintext &lt;?INDEX {\tt ISAPILogNotSupported} directive&gt; -->
  +<A
  + HREF="directive-dict.html#Syntax"
  + REL="Help"
  +><STRONG>Syntax:</STRONG></A> ISAPILogNotSupported <EM>on|off</EM><BR>
  +<A
  + HREF="directive-dict.html#Default"
  + REL="Help"
  +><STRONG>Default:</STRONG></A> on<BR>
  +<A
  + HREF="directive-dict.html#Context"
  + REL="Help"
  +><STRONG>Context:</STRONG></A> server config<BR>
  +<A
  + HREF="directive-dict.html#Override"
  + REL="Help"
  +><STRONG>Override:</STRONG></A> None<BR>
  +<A
  + HREF="directive-dict.html#Status"
  + REL="Help"
  +><STRONG>Status:</STRONG></A> Base<BR>
  +<A
  + HREF="directive-dict.html#Module"
  + REL="Help"
  +><STRONG>Module:</STRONG></A> mod_isapi<BR>
  +<A
  +HREF="module-dict.html#Compatibility"
  +REL="Help"
  +><STRONG>Compatibility:</STRONG></A> Apache 1.3.13 and later, Win32 only<P>
  +
  +        Logs all requests for unsupported features from ISAPI extentions
  +        in the server error log.  While this should be turned off once
  +        all desired ISAPI modules are functioning, it defaults to on
  +        to help administrators track down problems.
  +        <P>
  +<HR>
  +
  +<H2><A NAME="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors 
directive</A></H2>
  +<!--%plaintext &lt;?INDEX {\tt ISAPIAppendLogToErrors} directive&gt; -->
  +<A
  + HREF="directive-dict.html#Syntax"
  + REL="Help"
  +><STRONG>Syntax:</STRONG></A> ISAPIAppendLogToErrors <EM>on|off</EM><BR>
  +<A
  + HREF="directive-dict.html#Default"
  + REL="Help"
  +><STRONG>Default:</STRONG></A> off<BR>
  +<A
  + HREF="directive-dict.html#Context"
  + REL="Help"
  +><STRONG>Context:</STRONG></A> server config<BR>
  +<A
  + HREF="directive-dict.html#Override"
  + REL="Help"
  +><STRONG>Override:</STRONG></A> None<BR>
  +<A
  + HREF="directive-dict.html#Status"
  + REL="Help"
  +><STRONG>Status:</STRONG></A> Base<BR>
  +<A
  + HREF="directive-dict.html#Module"
  + REL="Help"
  +><STRONG>Module:</STRONG></A> mod_isapi<BR>
  +<A
  +HREF="module-dict.html#Compatibility"
  +REL="Help"
  +><STRONG>Compatibility:</STRONG></A> Apache 1.3.13 and later, Win32 only<P>
  +
  +        Record HSE_APPEND_LOG_PARAMETER requests from ISAPI extentions
  +        to the server error log.
  +        <P>
  +<HR>
  +
  +<H2><A NAME="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery directive</A></H2>
  +<!--%plaintext &lt;?INDEX {\tt ISAPIAppendLogToQuery} directive&gt; -->
  +<A
  + HREF="directive-dict.html#Syntax"
  + REL="Help"
  +><STRONG>Syntax:</STRONG></A> ISAPIAppendLogToQuery <EM>on|off</EM><BR>
  +<A
  + HREF="directive-dict.html#Default"
  + REL="Help"
  +><STRONG>Default:</STRONG></A> off<BR>
  +<A
  + HREF="directive-dict.html#Context"
  + REL="Help"
  +><STRONG>Context:</STRONG></A> server config<BR>
  +<A
  + HREF="directive-dict.html#Override"
  + REL="Help"
  +><STRONG>Override:</STRONG></A> None<BR>
  +<A
  + HREF="directive-dict.html#Status"
  + REL="Help"
  +><STRONG>Status:</STRONG></A> Base<BR>
  +<A
  + HREF="directive-dict.html#Module"
  + REL="Help"
  +><STRONG>Module:</STRONG></A> mod_isapi<BR>
  +<A
  +HREF="module-dict.html#Compatibility"
  +REL="Help"
  +><STRONG>Compatibility:</STRONG></A> Apache 1.3.13 and later, Win32 only<P>
  +
  +        Record HSE_APPEND_LOG_PARAMETER requests from ISAPI extentions
  +        to the query field (appended to the CustomLog %q component).
  +        <P>
  +<HR>
   
  -<H2>Notes</H2>
  +<H2><A NAME="notes">Additional Notes</A></H2>
   
   <P>Apache's ISAPI implementation conforms to all of the ISAPI 2.0
      specification, except for the "Microsoft-specific" extensions dealing
      with asynchronous I/O. Apache's I/O model does not allow asynchronous
      reading and writing in a manner that the ISAPI could access. If an ISA
  -   tries to access async I/O, a message will be place in the error log,
  -   to help with debugging.
  +   tries to access unsupported features, including async I/O, a message is
  +   placed in the error log to help with debugging. Since these messages
  +   can become a flood, a new directive; 
  +   <CODE>ISAPILogNotSupported Off</CODE>, is introduced in Apache 1.3.13.</P>
   
   <P>Some servers, like Microsoft IIS, load the ISA into the server, and
  -   keep it loaded until memory usage is too high, and it is
  -   unloaded. Apache currently loads and unloads the ISA for each
  -   request. This is inefficient, but Apache's request model makes this
  -   method the only method that currently works. A future release may use
  -   a more effective loading method.
  -
  -<P>Apache 1.3a1 currently limits POST and PUT input to 48k per
  -   request. This is to work around a problem with the ISAPI implementation
  -   that could result in a denial of service attack. It is expected that
  -   support for larger uploads will be added soon.
  -
  -<P>Also, remember that while Apache supports ISAPI Extensions, it does
  -   not support ISAPI Filters. Support for filters may be added at a later
  -   date, but no support is planned at this time.</P>
  +   keep it loaded until memory usage is too high, or specific configuration
  +   options are used.  Apache currently loads and unloads the ISA for each
  +   request.  This is inefficient, but Apache's request model makes this
  +   method the only method that currently works.  Apache 2.0 is expected to
  +   support more effective loading and caching methods, with more precise
  +   control over individual ISAPI modules and directories.</P>
  +
  +<P>Also, remember that while Apache supports ISAPI Extensions, it 
  +   <STRONG>does not support ISAPI Filters.</STRONG>  Support for filters may 
  +   be added at a later date, but no support is planned at this time.</P>
   
  -<H2>Programmer's Journal</H2>
  +<H2><A NAME="journal">Programmer's Journal</A></H2>
   
   <P>If you are programming Apache 1.3 mod_isapi modules, you must limit your
      calls to ServerSupportFunction to the following directives:</P>
  @@ -90,35 +281,51 @@
           the blank line (two consecutive newlines) in the headers string 
           argument.  This body cannot contain NULLs, since the headers
           argument is NULL terminated.
  -  <DT>HSE_REQ_SEND_URL
  -    <DD>Redirect the user to another location.<BR>
  -        This cannot be a fully qualified URL, you are not allowed
  -        to pass the protocol or a server name (e.g. simply /location)
  -  <DT>HSE_REQ_MAP_URL_TO_PATH
  -    <DD>Apache will translate a virtual name to a physical name.
     <DT>HSE_REQ_DONE_WITH_SESSION
       <DD>Apache considers this a no-op, since the session will be finished
           when the ISAPI returns from processing.
  +  <DT>HSE_REQ_MAP_URL_TO_PATH
  +    <DD>Apache will translate a virtual name to a physical name.
  +  <DT>HSE_APPEND_LOG_PARAMETER <EM>Apache 1.3.13 and later</EM>
  +    <DD>This logged message may be captured in any of the following logs:
  +      <UL>
  +        <LI>in the \"%{isapi-parameter}n\" component in a CustomLog directive
  +        <LI>in the %q log component with the ISAPIAppendLogToQuery On 
directive
  +        <LI>in the error log with the ISAPIAppendLogToErrors On directive
  +      </UL>
  +        The first option, the %{isapi-parameter}n component, is always 
available
  +        and prefered.
  +  <DT>HSE_REQ_IS_KEEP_CONN <EM>Apache 1.3.13 and later</EM>
  +    <DD>Will return the negotiated Keep-Alive status.
  +  <DT>HSE_REQ_SEND_RESPONSE_HEADER_EX <EM>Apache 1.3.13 and later</EM>
  +    <DD>Will behave as documented, although the fKeepConn flag is ignored.
  +  <DT>HSE_REQ_IS_CONNECTED <EM>Apache 1.3.13 and later</EM>
  +    <DD>Will report false if the request has been aborted.
   </DL>
   
  -<P>Apache returns FALSE to any other call to ServerSupportFunction, and
  +<P>Apache returns FALSE to any unsupported call to ServerSupportFunction, and
      sets the GetLastError value to ERROR_INVALID_PARAMETER.</P>
   
  -<P>ReadClient is not truly supported.  The entire body of the message, 
  -   up to 49152 bytes, is sent to the client in the initial request.
  -   If the request is longer, the ISAPI extension is never called.  
  -   Calling ReadClient, however, does no harm.</P>
  +<P>Prior to Apache 1.3.13, ReadClient was a noop, and any request with a 
request
  +   body greater than 48kb was rejected by mod_isapi.  As of Apache 1.3.13,
  +   ReadClient now retrieves the request body exceeding the initial buffer 
  +   (defined by ISAPIReadAheadBuffer).  Based on the ISAPIReadAheadBuffer 
  +   setting (number of bytes to buffer prior to calling the ISAPI handler) 
  +   shorter requests are sent complete to the extension when it is invoked.
  +   If the request is longer, the ISAPI extension must use ReadClient to
  +   retrieve the remaining request body.</P>
   
   <P>WriteClient is supported, but only with the HSE_IO_SYNC flag or
      no option flag (value of 0).  Any other WriteClient request will
      be rejected with a return value of FALSE, and a GetLastError
      value of ERROR_INVALID_PARAMETER.</P>
   
  -<P>GetServerVariable is supported, although extended server variables 
  -   do not exist (as defined by other servers.)  In general, all CGI 
  -   environment variables are available through GetServerVariable.</P>
  +<P>GetServerVariable is supported, although extended server variables do not
  +   exist (as defined by other servers.)  All the usual Apache CGI 
environment 
  +   variables are available from GetServerVariable.  As of Apache 1.3.13,
  +   the ALL_HTTP and ALL_RAW and variables are now available.</P>
   
  -<P>Apache 2.0 mod_isapi will support additional features introduced in later
  +<P>Apache 2.0 mod_isapi may support additional features introduced in later
      versions of the ISAPI specification, as well as limited emulation of
      async I/O and the TransmitFile semantics.  Apache 2.0 may also support
      caching of ISAPI .dlls for performance.  No further enhancements to the
  
  
  

Reply via email to