httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jerenkra...@apache.org
Subject cvs commit: httpd-site/xdocs/test/flood building.html index.html
Date Wed, 21 Nov 2001 07:14:20 GMT
jerenkrantz    01/11/20 23:14:19

  Added:       xdocs    .cvsignore ABOUT_APACHE.xml Announcement
                        announcelist.html apache_pb.gif awards.html
                        bug_report.html favicon.ico in_the_news.html
                        index.xml info.html related_projects.html
                        robots.txt security_report.xml userslist.html
               xdocs/apreq Apache-Cookie.html Apache-Request.html
                        index.html libapreq.html
               xdocs/contributors index.xml
               xdocs/dev .cvsignore 404.html API-dict.html API.html
                        anoncvs.txt binaries.html binbuild.sh
                        bugdb-policies.html debugging.xml devnotes.xml
                        fetch-from-cvs.txt footer.html guidelines.html
                        header.html how-to-release-win32.html
                        how-to-release.html index.xml mmn.txt.asis
                        nt-cvs-ssh.txt patches.xml platforms.html
                        ports.html project-plan.html robots.txt
                        styleguide.xml todo.html voting.html
               xdocs/dev/images apache_feather_bullet.gif apache_logo.gif
               xdocs/dev/whiteboard README api-middle.txt overview_aek
                        page_io process-model.html process_model
                        some_reasons_for_layered_io stacked_io
               xdocs/docs-project index.html
               xdocs/images 99POYlede.gif SWTopFame.gif SWTopFame00.gif
                        SWTopFame98.gif SWTopFame99.gif SWshowcase.gif
                        apache_email.gif apache_feather.gif
                        apache_feather_bullet.gif apache_feather_promo.gif
                        apache_home.gif apache_index.gif apache_logo.gif
                        apache_pb.gif apache_pb3.gif apache_pb_1.0.gif
                        apache_sub.gif apachecon.gif asf_logo_wide.gif
                        coar.gif graybar.gif httpd_logo_wide.gif lars.jpg
                        orange_ball.gif powered_by.gif rasmus.jpg
                        seeusatapachecon.gif small_feather.gif smiley.xbm
                        stein.jpg
               xdocs/library index.html
               xdocs/press 04apr96.txt 05Jan98.txt 22Jun98.html 22Jun98.txt
               xdocs/stylesheets apache-site.dtd project.xml site.vsl
               xdocs/test index.html
               xdocs/test/flood building.html index.html
  Log:
  Initial import of the xdocs directory for httpd-site.
  
  Revision  Changes    Path
  1.1                  httpd-site/xdocs/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  from-cvs
  
  
  
  1.1                  httpd-site/xdocs/ABOUT_APACHE.xml
  
  Index: ABOUT_APACHE.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>About the Apache HTTP Server Project</title>
    </properties>
  <body>
  <section id="WhatIs">
  <title>What <em>IS</em> the Apache HTTP Server Project?</title>
  
  <p>The Apache Project is a collaborative software development effort aimed
  at creating a robust, commercial-grade, featureful, and freely-available
  source code implementation of an HTTP (Web) server.  The project is
  jointly managed by a group of volunteers located around the world, using
  the Internet and the Web to communicate, plan, and develop the server and
  its related documentation.  These volunteers are known as the Apache Group.
  In addition, hundreds of users have contributed ideas, code, and
  documentation to the project.  This file is intended to briefly describe
  the history of the Apache Group and recognize the many contributors.
  </p>
  </section>
  
  <section id="How">
  <title>How Apache Came to Be</title>
  
  <p>In February of 1995, the most popular server software on the Web was the
  public domain HTTP daemon developed by Rob McCool at the National Center
  for Supercomputing Applications, University of Illinois, Urbana-Champaign.
  However, development of that httpd had stalled after Rob left NCSA in
  mid-1994, and many webmasters had developed their own extensions and bug
  fixes that were in need of a common distribution.  A small group of these
  webmasters, contacted via private e-mail, gathered together for the purpose
  of coordinating their changes (in the form of &quot;patches&quot;).
  Brian Behlendorf and Cliff Skolnick put together a mailing list,
  shared information space, and logins for the core developers on a
  machine in the California Bay Area, with bandwidth donated by HotWired.  
  By the end of February, eight core contributors formed the foundation of 
  the original Apache Group:
  </p>
  <dl>
    <dd>
      <table>
       <tr>
        <td>Brian Behlendorf</td>
        <td>Roy T. Fielding</td>
        <td>Rob Hartill</td>
       </tr>
       <tr>
        <td>David Robinson</td>
        <td>Cliff Skolnick</td>
        <td>Randy Terbush</td>
       </tr>
       <tr>
        <td>Robert S. Thau</td>
        <td>Andrew Wilson</td>
       </tr>
      </table>
    </dd>
  </dl>
  <p>with additional contributions from</p>
    <dl>
     <dd>
      <table>
       <tr>
        <td>Eric Hagberg</td>
        <td>Frank Peters</td>
        <td>Nicolas Pioch</td>
       </tr>
      </table>
     </dd>
    </dl>
  
  <p>Using NCSA httpd 1.3 as a base, we added all of the published bug fixes
  and worthwhile enhancements we could find, tested the result on our own
  servers, and made the first official public release (0.6.2) of the Apache
  server in April 1995.  By coincidence, NCSA restarted their own development
  during the same period, and Brandon Long and Beth Frank of the NCSA Server
  Development Team joined the list in March as honorary members so that the
  two projects could share ideas and fixes.</p>
  
  <p>The early Apache server was a big hit, but we all knew that the codebase
  needed a general overhaul and redesign.  During May-June 1995, while
  Rob Hartill and the rest of the group focused on implementing new features
  for 0.7.x (like pre-forked child processes) and supporting the rapidly growing
  Apache user community, Robert Thau designed a new server architecture
  (code-named Shambhala) which included a modular structure and API for better
  extensibility, pool-based memory allocation, and an adaptive pre-forking
  process model.  The group switched to this new server base in July and added
  the features from 0.7.x, resulting in Apache 0.8.8 (and its brethren)
  in August.</p>
  
  <p>After extensive beta testing, many ports to obscure platforms, a new set
  of documentation (by David Robinson), and the addition of many features
  in the form of our standard modules, Apache 1.0 was released on
  December 1, 1995.
  </p>
  
  <p>Less than a year after the group was formed, the Apache server passed
  NCSA's httpd as the #1 server on the Internet.
  </p>
  
  <p>The <a href="http://www.netcraft.com/survey/">survey by Netcraft</a>
  shows that Apache is today more widely used than all other web servers
  combined.</p>
  </section>
  
  <section id="Involved">
  <title>Getting Involved</title>
  <p>If you just want to send in an occasional suggestion/fix, then you can
  just use the bug reporting form at
  &lt;<a href="http://httpd.apache.org/bug_report.html"><samp
  >http://httpd.apache.org/bug_report.html</samp></a>&gt;.
  You can also subscribe to the announcements mailing list 
  (<samp>announce@apache.org</samp>) which we use to 
  broadcast information about new releases, bugfixes, and upcoming
  events.  There's a lot of information about the development process 
  (much of it in serious need of updating) to be found at
  &lt;<a href="http://dev.apache.org/"><samp
  >http://dev.apache.org/</samp></a>&gt;.
  </p>
  
  <blockquote>
  <strong>NOTE:</strong>
  The developer mailing list is not
  a user support forum; it is for people actively working on development
  of the server code and documentation, and for planning future
  directions.  If you have user/configuration questions, send them
  to the USENET newsgroup
   &quot;<a href="news:comp.infosystems.www.servers.unix"><samp
  >comp.infosystems.www.servers.unix</samp></a>&quot; or
   &quot;<a href="news:comp.infosystems.www.servers.ms-windows"><samp
  >comp.infosystems.www.servers.ms-windows</samp></a>&quot;
  (as appropriate for the platform you use).
  </blockquote>
  </section>
  
  <section id="Development">
  
  <p>There is a core group of contributors (informally called the 
  &quot;core&quot;) which was formed from the project founders and is 
  augmented from time to time when core members nominate outstanding 
  contributors and the rest of the core members agree.  The core group 
  focus is more on &quot;business&quot; issues and limited-circulation 
  things like security problems than on mainstream code development.  
  The term &quot;The Apache Group&quot; technically refers to this core of 
  project contributors.</p>
  
  <p>The Apache Group is a meritocracy -- the more work you have done, the 
  more you are allowed to do.  The group founders set the original rules, but
  they can be changed by vote of the active members.  There is a group
  of people who have logins on our server and access to the
  CVS repository.  Everyone has access to the CVS snapshots.  Changes to
  the code are proposed on the mailing list and usually voted on by active
  members -- three +1 (yes votes) and no -1 (no votes, or vetoes) are needed
  to commit a code change during a release cycle; docs are usually committed
  first and then changed as needed, with conflicts resolved by majority vote.
  </p>
  
  <p>Our primary method of communication is our mailing list. Approximately 40
  messages a day flow over the list, and are typically very conversational in
  tone. We discuss new features to add, bug fixes, user problems, developments
  in the web server community, release dates, etc.  The actual code development
  takes place on the developers' local machines, with proposed changes
  communicated using a patch (output of a unified
  &quot;diff -u oldfile newfile&quot; command), and committed 
  to the source repository by one of the core developers using remote CVS.  
  Anyone on the mailing list can vote on a particular issue, but we only 
  count those made by active members or people who are known to be experts 
  on that part of the server.  Vetoes must be accompanied by a convincing 
  explanation.</p>
  
  <p>New members of the Apache Group are added when a frequent contributor is
  nominated by one member and unanimously approved by the voting members.
  In most cases, this &quot;new&quot; member has been actively contributing 
  to the group's work for over six months, so it's usually an easy decision.
  </p>
  
  <p>The above describes our past and current (as of January 1998) guidelines,
  which will probably change over time as the membership of the group changes 
  and our development/coordination tools improve.</p>
  </section>
  
  <section>
  <title>Why Apache is Free</title>
  
  <p>Apache exists to provide a robust and commercial-grade reference
  implementation of the HTTP protocol.  It must remain a platform upon which
  individuals and institutions can build reliable systems, both for
  experimental purposes and for mission-critical purposes.  We believe the
  tools of online publishing should be in the hands of everyone, and
  software companies should make their money providing value-added services
  such as specialized modules and support, amongst other things.  We realize
  that it is often seen as an economic advantage for one company to
  &quot;own&quot; a market - in the software industry that means to control 
  tightly a particular conduit such that all others must pay.  This is 
  typically done by &quot;owning&quot; the protocols through which 
  companies conduct business, at the expense of all those other companies.  
  To the extent that the protocols of the World Wide Web remain 
  &quot;unowned&quot; by a single company, the Web will remain a level 
  playing field for companies large and small. Thus, &quot;ownership&quot; 
  of the protocol must be prevented, and the existence of a robust reference 
  implementation of the protocol, available absolutely for free to all 
  companies, is a tremendously good thing.</p>
  
  <p>Furthermore, Apache is an organic entity; those who benefit from it
  by using it often contribute back to it by providing feature enhancements,
  bug fixes, and support for others in public newsgroups.  The amount of
  effort expended by any particular individual is usually fairly light, but
  the resulting product is made very strong.  This kind of community can
  only happen with freeware -- when someone pays for software, they usually
  aren't willing to fix its bugs.  One can argue, then, that Apache's
  strength comes from the fact that it's free, and if it were made
  &quot;not free&quot; it would suffer tremendously, even if that money
  were spent on a real development team.</p>
  
  <p>We want to see Apache used very widely -- by large companies, small
  companies, research institutions, schools, individuals, in the intranet
  environment, everywhere -- even though this may mean that companies who
  could afford commercial software, and would pay for it without blinking,
  might get a &quot;free ride&quot; by using Apache.  We would even be
  happy if some commercial software companies completely dropped their 
  own HTTP server development plans and used Apache as a base, with the 
  proper attributions as described in the <a 
  href="http://www.apache.org/LICENSE.txt">LICENSE</a> file.
  </p>
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/Announcement
  
  Index: Announcement
  ===================================================================
  
  Apache 2.0.16 Released as beta
  -------------------------------
  
  The Apache Group is proud to announce the release the sixteenth release
  of Apache 2.0.  This is the first public beta of Apache 2.0.  This release
  has been tested thoroughly, and has been running the apache.org web site for
  the last few weeks.
  
  Apache 2.0 offers numerous enhancements, improvements and performance
  boosts over the 1.3 codebase. The most visible and noteworthy addition
  is the ability to run Apache in a hybrid thread/process mode on any
  platform that supports both threads and processes.  This has shown to
  improve the scalability of the Apache HTTPD server significantly in
  our early testing, on some versions of Unix.  Apache 2.0 also includes
  support for filtered I/O.  This allows modules to modify
  the output of other modules before it is sent to the client.  Finally, we
  have included support for IPv6 on any platform that supports IPv6.
  
  This version of Apache is known to work on many versions of Unix, BeOS,
  OS/2, and Windows.  Because of many of the advancements in Apache 2.0,
  the initial release of Apache is expected to perform equally well on all 
  supported platforms.
  
  There are new snapshots of the Apache httpd source available every 6
  hours from http://dev.apache.org/from-cvs/httpd-2.0/ - please
  download and test if you feel brave. We don't guarantee anything
  except that it will take up disk space, but if you have the time and
  skills, please give it a spin on your platforms.
  
  Apache has been the most popular web server on the Internet since
  April of 1996. The May 2000 WWW server site survey by Netcraft (see:
  http://www.netcraft.co.uk/Survey/) found that more web servers were
  using Apache than any other software running on more than 60% of the
  Internet web servers.
  
  For more information, please check out http://www.apache.org/httpd.html
  
  Changes with Apache 2.0.16
   
    *) Change the default installation directory to /usr/local/apache2,
       as now defined by the "Apache" layout in config.layout. [Marc Slemko]
   
    *) OS/2: Added support for building loadable modules as OS/2 DLLs.
       [Brian Havard]
   
    *) Get MaxRequestsPerChild working with the Windows MPM.
       [Bill Stoddard]
   
    *) Make generic hooks to work, with mod_generic_hook_import/export
       experimental modules.  [Ben Laurie, Will Rowe]
   
    *) Fix segfaults for configuration file syntax errors such as
       "<Directory>" followed by "</Directory" and
       "<Directory>" followed by "</Directoryz>".  [Jeff Trawick]
   
    *) Cleanup the --enable-layout option of configure.  This makes
       us use a consistent location for the config.layout file, and it
       makes configure more portable.
       [jun-ichiro hagino <itojun@iijlab.net>]
   
    *) Changes to 'ab'; fixed int overrun's, added statistics, output in
       csv/gnuplot format, rudimentary ssl support and various other tweaks
       to make results more true to what is measured. The upshot of this it
       turns out that 'ab' has often underreported the true performance of
       apache. Often by a order of magnitude :-) See talk/paper of Sander
       Temme <sctemme@covalent.net> at April ApacheCon 2001 for details.
       [Dirk-Willem van Gulik]
   
    *) Clean up mod_cgid's temporary request pool.  Besides fixing a
       storage leak this ensures that some unnecessary pipes are closed.
       [Jeff Trawick]
   
    *) Performance: Add quick_handler hook. This hook is called at the
       very beginning of the request processing before location_walk,
       translate_name, etc.  This hook is useful for URI keyed content
       caches like Mike Abbott's Quick Shortcut Cache.
       [Bill Stoddard]
   
    *) top_module global variable renamed to ap_top_module [Perl]
   
    *) Move ap_set_last_modified to the core.  This is a potentially
       controversial change, because this is kind of HTTP specific.  However
       many protocols should be able to take advantage of this kind of
       information.  I expect that headers will need one more layer of
       indirection for multi-protocol work, but this is a small step in
       the right direction.  [Ryan Bloom]
   
    *) Enable mod_status by default.  This matches what Apache 1.3 does.
       [Ed Korthof]
   
    *) Add a ScriptSock directive to the default config file.  This is
       only enabled when mod_cgid is used.
       [Taketo Kabe <kabe@sra-tohoku.co.jp>]
  
  
  
  1.1                  httpd-site/xdocs/announcelist.html
  
  Index: announcelist.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Join the Apache-Users Mailing List</TITLE>
  </HEAD>
  
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <IMG SRC="images/apache_sub.gif" ALT="">
  <H1>Join the Apache Announcements Mailing List</H1>
  
  The <CODE>announce@apache.org</CODE> mailing list has been set up to inform
  people of new code releases, bug fixes, security fixes, and general
  news and information about the Apache server.  Most of this
  information will also be posted to comp.infosystems.www.servers.unix,
  but this provides a more timely way of accessing that information.
  The mailing list is one-way, announcements only.
  
  <P>
  
  To subscribe, send a message (blank, or anything, doesn't matter) to
  <CODE><STRONG>announce-subscribe@apache.org</STRONG></CODE>.  You'll
  get back a confirmation message with instructions on how to validate
  your subscription.
  
  <P>
  
  <A HREF="index.html"><IMG SRC="images/apache_home.gif" ALT="Home"></A>
  
  </BODY></HTML>
  
  
  
  
  1.1                  httpd-site/xdocs/apache_pb.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/awards.html
  
  Index: awards.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
   "http://www.w3.org/TR/REC-html40/loose.dtd">
  <HTML>
   <HEAD>
    <TITLE>Awards Won by the Apache Web Server Software</TITLE>
   </HEAD>
  
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <DIV ALIGN=CENTER>
   <H1>Awards Won by the Apache Web Server Software</H1>
   <HR>
   <TABLE BORDER=1 WIDTH="95%">
    <TR ALIGN="CENTER">
     <TD COLSPAN=2>
      <DIV ALIGN=CENTER>
       <TABLE BORDER=0>
        <TR>
         <TD><H3>
          <CITE>Datamation</CITE>
          <BR>
          1999 Product of the Year
          <BR>
          (<A HREF="http://www.Datamation.com/PlugIn/newissue/03poy5.html"
           >E-commerce and Extranets</A>)</H3>
         </TD>
         <TD align="center">
          <IMG SRC="images/99POYlede.gif" BORDER=0 HEIGHT=109 WIDTH=175
           ALT="Datamation 1999 Product of the Year!">
         </TD>
        </TR>
       </TABLE>
      </DIV>
     </TD>
     <TD><A HREF="http://newmedia.com/NewMedia/98/03/feature/web.html"
         ><IMG SRC="http://newmedia.com/NewMedia/98/03/feature/images/award.gif"
           BORDER=0 ALT="NewMedia Hyper Award Winner!" HEIGHT=74 WIDTH=80></A>
     </TD>
    </TR>
  
    <TR ALIGN="CENTER">
     <TD><A HREF="http://serverwatch.internet.com/"
         ><IMG SRC="images/SWshowcase.gif" BORDER=0 HEIGHT=83 WIDTH=190
           ALT="ServerWatch Server Showcase Winner!"></A>
     </TD>
     <TD><A HREF="http://serverwatch.internet.com/halloffame.html"
         ><IMG SRC="images/SWTopFame98.gif" BORDER=0 HEIGHT=115 WIDTH=115
           ALT="ServerWatch Hall of Fame 1998 Winner!"></A>  
     </TD>
     <TD><A HREF="http://serverwatch.internet.com/halloffame.html"
         ><IMG SRC="images/SWTopFame99.gif" BORDER=0 HEIGHT=115 WIDTH=115
           ALT="ServerWatch Hall of Fame 1999 Winner!"></A>  
     </TD>
    </TR>
  
    <TR>
     <TD COLSPAN=3 align="center">
      <H3>
       <CITE>Network Magazine</CITE>
       <BR>
       1998 Product of the Year
       <BR>
       (<A HREF="http://www.networkmagazine.com/magazine/archive/1998/04/9804poy.htm#Web_Server"
        >Web Server</A>)
      </H3>
     </TD>
    </TR>
  
    <TR>
     <TD COLSPAN=3 align="center">
      <H3>
       <CITE>C|Net</CITE>
       <BR>
       Award for Internet Excellence
       <BR>
       (<A HREF="http://www.cnet.com/Content/Reviews/Special/Iawards98/ss02.html"
        >Web server software</A>)
       </H3>
     </TD>
    </TR>
   </TABLE>
  </DIV>
  
  <HR>
  
  <H2><A HREF="http://serverwatch.internet.com/halloffame.html"
      ><CITE>ServerWatch</CITE> 1999 Hall of Fame</A></H2>
  <BLOCKQUOTE>
   <CITE>
    "Apache remains the king of Web servers .. Apache's overall security,
    performance, and robustness are unquestionable --
    many of the most accessed sites in the world run Apache or Apache
    derivatives."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://www.seyboldseminars.com/News/Awards98/editors_awards98.html">
  <CITE>Seybold Editors' Choice Award</CITE> 1998</A></H2>
  <BLOCKQUOTE>
   <CITE>
    Apache "has gained a stellar reputation not only for its unbeatable price
    (free) and public source code, but for its features and reliability."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://serverwatch.internet.com/halloffame.html"
      ><CITE>ServerWatch</CITE> 1998 Hall of Fame</A></H2>
  <BLOCKQUOTE>
   <CITE>
    "Apache remains the king of web servers despite intense efforts by
    Microsoft and Netscape to gain dominance in the market.
    In fact, the latest Netcraft surveys indicate that the freeware
    Apache is widening its lead over the rest of the field. Apache
    users have come to rely on the server's rock-solid reliability,
    outstanding performance, and rich set of features."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://serverwatch.internet.com/"
      ><CITE>ServerWatch</CITE> Server Showcase</A></H2>
  <BLOCKQUOTE>
   <CITE>
    "... Apache 1.3.0 has been selected as this week's [17 June 1998] Server
    Showcase. ... While only the best servers are even reviewed by
    ServerWatch, only the very best of the best are honored with the
    Server Showcase award."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://newmedia.com/NewMedia/98/03/feature/web.html"
      ><CITE>NewMedia Magazine</CITE> 1998 Hyper Award</A></H2>
  <BLOCKQUOTE>
   <CITE>
    "This public domain server is continually being updated by a volunteer
    force of developers and is one of the fastest and most stable available
    for UNIX servers. To let programmers get right to the root of tough
    problems, it ships with source code. With sites like Yahoo running
    Apache, its scalability is unquestionable. The price is certainly right,
    and since it's been recently ported to Windows NT, the Apache fan
    club can only get bigger."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://www.networkmagazine.com/magazine/archive/1998/04/9804poy.htm#Web_Server"
      ><CITE>Network Magazine</CITE> 1998 Product of the Year</A>
      (<A HREF="http://www.networkmagazine.com/member/"
       >Membership</A> required)</H2>
  <BLOCKQUOTE>
   <CITE>
    "... There seemed to be a forgone conclusion that the proliferation of
    server choices would quickly narrow itself to one or two from the heavy
    hitters. ...  The free Apache Web Server has confounded nearly every
    pundit's projection since it was introduced in December 1995. ...
    The result? A robust, stable, extremely inexpensive,and constantly
    upgraded product that dominated the web server market a year after
    its introduction and which continues that domination to this day."
   </CITE>
  </BLOCKQUOTE>
  
  <H2><A HREF="http://www.cnet.com/Content/Reviews/Special/Iawards98/ss02.html"
      ><CITE>C|Net</CITE> Award for Internet Excellence</A></H2>
  <BLOCKQUOTE>
   <CITE>
    "Part of Apache's charm is that it costs nothing and that its source code
    is freely available for anyone to take and customize or extend. Of course,
    free wouldn't count for much if the software didn't work, but the Apache
    Project has built a stable, speedy Web server that runs on almost all
    flavors of Unix, OS/2, and even Windows."
   </CITE>
  </BLOCKQUOTE>
  
  <HR>
  <P ALIGN="CENTER">
  <A HREF="images/apache_pb.gif"
  ><IMG BORDER=0 SRC="images/apache_pb.gif" ALT="Powered by Apache"
    WIDTH=259 HEIGHT=32></A>
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/bug_report.html
  
  Index: bug_report.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <HTML><HEAD>
  <TITLE>Apache Bug Reporting Page</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  
  <IMG SRC="images/apache_sub.gif" ALT="">
  <H1>Apache Bug Reporting Page</H1>
  
  <BLOCKQUOTE>
  <STRONG>Reports of security issues should <EM>not</EM> be reported here.
  Please see the <A HREF="security_report.html">security report page</A>
  if you have concerns or think you have discovered a security hole in
  the Apache Web server software.</STRONG>
  </BLOCKQUOTE>
  <P>If you are having trouble
  with Apache, please fill out a problem report form and submit it.  
  Before you do that, though, <FONT COLOR="red">make <STRONG>sure</STRONG> you
  have done <STRONG>all</STRONG> of the following:</FONT></P>
  
  <OL>
   <LI>Verified that the bug exists in
    <A HREF="http://www.apache.org/dist/httpd/">the most recent version</A>
    of Apache.  There are many bugs in the 1.2 version and earlier 
    that have been fixed in the 1.3 version.  
   </LI>
   <LI>Checked the <A HREF="info/known_bugs.html">known bugs</A> page.
   </LI>
   <LI>Checked the <A HREF="docs/misc/known_client_problems.html">known client
    problems</A> page.
   </LI>
   <LI>Checked the <A HREF="docs/misc/compat_notes.html">compatibility
    notes</A> page.
   </LI>
   <LI>Followed the instructions in the <CODE>INSTALL</CODE> file correctly - 
    you edited the <CODE>Configuration</CODE> file to set the right platform
    and ran the <CODE>Configure</CODE> script to create the new
    <CODE>Makefile</CODE>.
   </LI>
   <LI>Tried compiling with only the distributed set of modules and with
    no other patches (so that we can make sure it's an Apache bug and 
    not a bug in a module or patch provided by someone else).  It is 
    frustrating to take time and effort to track down a problem only 
    to figure out it caused by a broken third party module.
   </LI>
   <LI>Checked the <A HREF="docs/misc/FAQ.html">FAQ</A>.
   </LI>
   <LI>If upgrading to 1.3, checked the
    <A HREF="docs/upgrading_to_1_3.html">Upgrading to 1.3</A> notes.
   </LI>
   <LI>Searched the <A HREF="http://bugs.apache.org/">bug report</A>
    database.  When you are doing this, you should be sure to search
    closed problem reports in addition to open ones.  Also note that 
    the search is not keyword based, so it requires an exact match 
    of what you enter to find anything.
   </LI>
   <LI>Looked at the error log.  Please include any related messages in your
    report, or state that there are none.
   </LI>
  </OL>
  
  <BLOCKQUOTE>
   <STRONG>
    If you're not sure that your problem is specifically related to a
    bug in Apache (<EM>i.e.</EM>, not something like a client problem or
    configuration problem), we strongly recommend that you check in the 
    <A HREF="news:comp.infosystems.www.servers.unix"
    ><SAMP>comp.infosystems.www.servers.unix</SAMP></A> or
    <A HREF="news:comp.infosystems.www.servers.ms-windows"
    ><SAMP>comp.infosystems.www.servers.ms-windows</SAMP></A> (depending on 
    the platform being used) Usenet newsgroup first.  If you don't 
    receive a response within a few days, then please submit it to 
    the Apache bug database.  If it's a known issue, you'll probably 
    get a faster response from the newsgroup and you will help keep 
    developer time free for improving Apache.  Most bug reports submitted 
    are actually user configuration problems that could be easily 
    fixed by asking in the newsgroup.
    <P>
    If you do not have access to a Usenet server, there are 
    several web sites on the Internet that allow you to read and post 
    to Usenet, such as <A HREF="http://www.dejanews.com/">Deja News</A>.
    </P>
    <P>
    <FONT COLOR="red">Do <STRONG>not</STRONG> post to Usenet and submit a bug 
    report at the same time.</FONT>  This wastes everyone's time.  
    Post to Usenet and wait a few days.
    </P>
   </STRONG>
  </BLOCKQUOTE>
  
  <P>If you have done all of the preceding, then please select the button
  below and fill out the form, and we will respond to it as soon as we can.
  </P>
  <HR>
  <BIG><STRONG>
  <UL>
   <LI>Do NOT send configuration questions or requests for help debugging CGI!
   </LI>
   <LI>If you're tracing spam or you're here because one of your favourite Web
    sites now says 'It Worked! Apache is installed!' -- then contact the
    mail originator or the Web site's Webmaster directly, because they're
    just using our software and we have nothing to do with them.  Don't
    waste your time or ours by telling us about it.
   </LI>
  </UL>
  </STRONG></BIG>
  </H2>
  Use the links below to submit bug reports:
  <ul>
  <li><a href="http://bugs.apache.org/">Apache Bug Database</a>
  </ul>
  <P>
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/favicon.ico
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/in_the_news.html
  
  Index: in_the_news.html
  ===================================================================
  <HTML>
      <HEAD>
          <TITLE>Apache in the News</TITLE>
      </HEAD>
      <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" ALINK="#FF0000">
          <IMG SRC="images/apache_sub.gif" ALT=""><H2>Apache in the News 2000-2001</H2>
          <P>
  	Since becoming the #1 Web server, Apache has featured in a number
  	of reviews and articles.  If you have seen a story about Apache on
  	the Web or in the press 
  	<A HREF="mailto:mjc@apache.org">let us know</A>
  	so that we can include it here.
  	</P>
          <P>
  	Also check out the <A HREF="awards.html">awards won by the Apache software</A>.
  	</P><P>
  Apache in the News: 2001,2000 |
                      <a href="info/in_the_news_1999.html">1999,1998</a> |
                      <a href="info/in_the_news_1997.html">1997,1996</a>
  </P>
  
          <HR>
          <P>
              <STRONG><CITE>InfoWorld.com</CITE>,
  		17 November 2000: 
  		"<a href="http://www.infoworld.com/articles/hn/xml/00/11/17/001117hnapache.xml">Brian Behlendorf: Apache co-founder talks about open source</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"the fact that we don't have a multibillion-dollar marketing organization means that, sure, Microsoft is going to be able to claim
                            things or do things that we can't, but that hasn't hurt us so far." </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>InfoWorld.com</CITE>,
  		13 November 2000: 
  		"<a href="http://www.infoworld.com/articles/hn/xml/00/11/13/001113hnapache.xml">Apache founders hit Vegas in search of cash</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"Behlendorf said the ASF may need to look for a little cash to keep up with the demands that developing the leading Web server requires"</EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Apache Week</CITE>,
  		3 November 2000: 
  		"<a href="http://www.apacheweek.com/features/apachecon2000eu">Report from ApacheCon Europe 2000</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"
  As in all conferences, there were various technical glitches when presentation laptops froze and batteries ran out, some
  inexperienced speakers, and not enough seats but these were all minor issues considering the excellent detailed technical
  knowledge that was imparted by the speakers."</EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Apache Today</CITE>,
  		30 October 2000: 
  		"<a href="http://apachetoday.com/news_story.php3?ltsn=2000-10-30-002-01-NW-CY-LF">Apache Guide: ApacheCon Europe</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"Last week, I was in London for ApacheCon 2000. In a break from my usual subjects,
                        this will be a brief overview of the conference, touching on the highlights and some of
                        the things that were talked about there."</EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>NetworkWorldFusion</CITE>,
  		26 October 2000: 
  		"<a href="http://www.nwfusion.com/news/2000/1026apacheadvice.html">Tips on pitching Apache to the big wigs</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>
  "Apache cares about trademarks and it's helped us maintain a pretty good
  product," Behlendorf said. 
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>NetworkWorldFusion</CITE>,
  		25 October 2000: 
  		"<a href="http://www.nwfusion.com/news/2000/1025ibmopen.html">IBM pitches its open source side</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>
  "IBM Tuesday set out its open source agenda at ApacheCon
                     Europe 2000. The message seemed to boil down to the notion
                     that in a networked world, open source is good and IBM not only
                     knows that but embraces the open-source programming
                     community."</EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>NetworkWorldFusion</CITE>,
  		24 October 2000: 
  		"<a href="http://www.nwfusion.com/news/2000/1024javasource.html">Sun says Java moving towards full
                     open source</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"Sun is moving toward making its Java technology fully open
                     source, a company executive said Tuesday, addressing an
                     audience of programmers here at the ApacheCon Europe 2000."
  </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Network Computing</CITE>,
  		October 2000: 
  		"<a href="http://www.networkcomputing.com/1119/1119f1products_6.html">The 10 Most Important Products of the Decade</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"...Apache Web Server earns its place for changing the rules on the server side. The future of Apache hinges on its ability to function as
        an e-commerce server. If the past five years are any indication, Apache Web Server will deliver the whole shopping cart--and
        probably sooner than its competitors do." </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>InfoWorld</CITE>,
  		October 2000: 
  		"<a href="http://www.infoworld.com/articles/hn/xml/00/10/09/001009hnag.xml">E-business innovators</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"By general acclaim, it has done more to stimulate Web development -- and therefore e-commerce -- than any other Web-based
        server." </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Edd Dumbill's Weblog (O'Reilly)	</CITE>,
  		10 July 2000: 
  		"<a href="http://weblogs.oreillynet.com/edd/discuss/msgReader$88">Dynamics of the Apache XML Project</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  Edd Dumbill, editor of XML.com, writes about the "Dynamics of the Apache Group" in his Weblog. The focus of the article is on news that the Apache XML project could create another parser and looks at the the internal dynamics of the group members and some of the conflicts.
   <EM>
  "IBM and Lotus in particular are responsible for the XML parser, Xerces, and the XSLT processor, Xalan. Sun also play a significant part in Apache's Java projects. Though nobody has suggested that Apache is in any way in the sway of these organizations as a consequence of their donations, it seems inevitable that the corporate and hacker cultures may well clash. This weekend seems a good example of this."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Qube Corner</CITE>,
  		26 June 2000: 
  		"<a href="http://weblogs.userland.com/qube/2000/06/26">AOLserver faster than Apache?</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  Qube Quorner reveal that Apache 1.3.12 comes second to AOLserver 3.0 in terms of requests/second and transfer speeds. Benchmarks do not give a true picture of the speed of a web server, since they provide an environment unlike the real use of the software. Commercial software is often tuned to perform well in benchmarks, so a good performance simply indicates that the software works well for that benchmark, not that it has good real-world performance. 
   <EM></EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>News Alert</CITE>,
  		20 June 2000: 
  		"<a href="http://www.newsalert.com/bin/story?StoryId=Cou7SqbKbytaYndK&FQ=Apache&Nav=na-search-&StoryTitle=Apache">US Toyota and Lexus dealers adopt Apache technology</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  Over the last week, there have been a large number of stories about Internet Appliances for both home and business use. An increasing number of these units are now being run on open source platforms such as Linux. Dell have announced that Toyota in the US are to be equipped with Dell PowerApp.web servers to provide customised content to their dealer network. 
   <EM></EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>C|Net News.com</CITE>,
  		1 June 2000: 
  		"<a href="http://news.cnet.com/news/0-1003-200-1993071.html?tag=st.ne.1002.thed.ni">IBM donates Net communications technology </a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  As reported by C|Net, the Apache Software Foundation has received technology from IBM which will help developers create services using an open, vendor-neutral process. IBM's Java-built Simple Object Access Protocol (SOAP) will be contributed to the open source Apache XML project. The system provides a simple method of using XML to send message and access web services across distributed networks. 
   <EM>
  "We want to move at Internet speed and respond to the needs of the developer community by making it available to the open-source community," said Marie Wieck, IBM's director of e-markets infrastructure. "It's valuable to further adoption." 
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>CNet Investor</CITE>,
  		1 June 2000: 
  		"<a href="http://www.cnetinvestor.com/newsitem-investor.asp?symbol=89538820&Ticker=AAPL">Apache Software Foundation join Java commmittee</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  CNet Investor reported that Sun Microsystems have set up two executive committees to oversee their Java Community Process(SM) community-based Java technology development programmes. The first committee will oversee the Java technologies for the desktop/server space and the other will oversee the Java technologies for the consumer/embedded space. 
   <EM>
  "As is evident by the depth, diversity and strength of the JCP program's Executive Committee members, the future of Java technology specifications is in capable and caring hands," said George Paolini, vice president of Java Community Development at Sun Microsystems, Inc.
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>ZDNet</CITE>,
  		4 May 2000: 
  		"<a href="http://www.zdnet.com/products/stories/reviews/0,4161,2562342,00.html">Picking The Right Web Server Is Key</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  ZDNet examine web server platforms in their article, "Picking the Right Server is Key". They compare Windows 2000 Advanced Server, Netware 5.1, Red Hat Linux using Apache, Solaris using iPlanet, and Solaris using Apache. 
   <EM>
  "There are other compelling reasons to choose Linux/Apache. For one thing, you'll never find a back door, as with the recent IIS debacle, in open-source code. And it's getting so easy to install that the hardcore Linux gurus are grumbling about dumbing down."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>SecuritySpace.com</CITE>,
  		1 May 2000: 
  		"<a href="http://www.securityspace.com/s_survey/data/index.html">April Web Server Survey</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  If you are a regular follower of probe-based web surveys you'll know that Apache has been the top web server for some time, now with over 60% market share. The April survey from E-Soft also gives some other interesting statistics for modules in use; the most popular being the PHP scripting language in use on 29% of Apache sites. 
   <EM>
  "The Apache module report documents the market share of Apache, internet's most popular web server, for a variety of add-on modules. Since most add on modules modify the web server "signature" that is returned on each web page, we are able to see who's using PHP, perl, SSL mods, language converters, language mods, etc."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Userland</CITE>,
  		24 April 2000: 
  		"<a href="http://scriptingnews.userland.com/backissues/2000/04/24">Scripting News / Manila</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  UserLand hosts an interesting open forum about commercial software, which originally started as an email discussion between Dave Winer and Brian Behlendorf. In Dave's own comments he picks out some of the discussion and his own point of view, accusing Apache of being boring. 
   <EM>
  "Apache is like MS-DOS. Lots of people use it, we do too. But where's the Lotus 1-2-3? Apache is boring! Where's the revolution for writers and thinkers?"
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Linux Today</CITE>,
  		21 April 2000: 
  		"<a href="http://linuxtoday.com/stories/20558.html">VNU Net: Apache Server Commentary [Book Review]</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  A short review of the new book "Apache Server Commentary" is available. The book is aimed at developers and contains source code listings of the Apache server. 
   <EM>
  "This is one in a series of books which sets out to give an insight into the various Open Source products currently on the market. It is aimed at those who either want to write extension modules to Apache or customise the underlying code.  In fact, Apache Server Commentary appears to be little more than a reference guide for those who already understand the concept of Apache and just want help on specific modules. It certainly isn't the architectural document I was expecting."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>InformationWeek.com</CITE>,
  		10 April 2000: 
  		"<a href="http://www.informationweek.com/781/open.htm">Open Source Moves To The Mainstream</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The article discusses the secure server survey from e-soft which shows Apache with 63% market share but notes that the "battle over E-commerce territory has been a little more difficult for open source, perhaps an indication that security-minded companies prefer to use commercial products". 
   <EM>
  "One of the leading open-source success stories is the Apache Web server, which for many sites is the backbone of Web applications. Apache is a flagship open-source project, continually developed by a self-selected group of coordinated volunteer programmers. It costs nothing to use. As of March, Apache is deployed on more than 7.8 million domains, or some 60% of Internet Web sites."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>INRIA</CITE>,
  		4 April 2000: 
  		"<a href="http://cristal.inria.fr/~harley/ecdl7/readMe.html">Elliptic Curve Discrete Logarithms: ECC2K-108 - SOLVED!</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  Apache Week reported in issue 180 on the attempt to solve the Elliptic Curve Challenge from Certicom. The solution was found at the end of March, and the Apache Software Foundation will receive a donation of US$8000 from the prize. 
   <EM>
  "The biggest public-key crypto crack ever has just finished! Certicom have confirmed that the solution is correct."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Linux Magazine</CITE>,
  		April 2000: 
  		"<a href="http://www.linux-mag.com/2000-04/behlendorf_01.html">Brian Behlendorf on the Apache name</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  Linux magazine have an interview with Brian Behlendorf, one of the initial Apache group founders. In addition to talking about the founding and sucess of Apache, Brian explains that the Apache name never meant "A patchy server", instead it "just sort of connoted: 'Take no prisoners. Be kind of aggressive and kick some ass.'" 
   <EM>
  "While there would still be a World Wide Web without the Apache Web server, pundits have suggested that it would belong to Microsoft. Since drawing up the plan for the Apache project in 1993, Apache Software Foundation President Brian Behlendorf has helped lead the volunteer development team that proved that you can take on Microsoft and win -- just so long as you change the rules."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Linux Magazine</CITE>,
  		April 2000: 
  		"<a href="http://www.linux-mag.com/2000-02/oreilly_01.html">A Conversation With the Man Behind the Animal Books</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The article discusses the evolving open source industry and pays particular attention to Apache. 
   <EM>
  "I think Apache plays an enormously important role here. Because it has dominant market share, it keeps the Internet open. I think it's more important for Apache to have dominant market share than for Linux. If Linux is dominant too, that's better, but I'd hate to see us lose Apache. That's a really important battleground."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>ZD Net - EWeek</CITE>,
  		20 March 2000: 
  		"<a href="http://www.zdnet.com/eweek/stories/general/0,11011,2470275,00.html">Solaris 8 weds reliability to must-have upgrades</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  PC Week mention Apache being bundled with Solaris in Solaris 8 weds reliability to must-have upgrades. 
   <EM>
  "Apache Web server is also bundled with Solaris 8, but neither PC Week Labs nor Sun recommends its use in high-transaction environments."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Slashdot</CITE>,
  		18 March 2000: 
  		"<a href="http://slashdot.org/apache/00/03/18/1141205.shtml">Reflections On ApacheCon 2000</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  ASF member Jim Jagielski gives his personal opinion of ApacheCon 2000 in "Reflections on ApacheCon 2000". 
   <EM>
  "It's been a week now since ApacheCon 2000 ended. There's been some discussion over the events, with the release of Apache 2.0a being the main topic of conversation. But AC2K was more than just the venue that 2.0a was announced. It was an important and noteworthy conference in it's own right."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>NetWorldFusion</CITE>,
  		13 March 2000: 
  		"<a href="http://www.nwfusion.com/newsletters/netware/0313nw2.html">The Netware Version Of Apache</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The NetWare version of Apache is examined in a Network World Fusion Newsletter. Over the past few years Novell have shipped a couple of different Web servers with NetWare, but now Apache is available for this system. 
   <EM>
  "The NetWare version of Apache 1.3 is still in the "experimental" stage, and it (so far) only runs on NetWare 5 or 5.1. Nevertheless, if you support a major Web site and ... if you want to take advantage of the hundreds of Web server applications available (also for free) for Apache - it would be worth your effort to download and test the new Apache in your environment."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Apache Week</CITE>,
  		10 March 2000: 
  		"<a href="http://www.apacheweek.com/features/apachecon2000">Report from ApacheCon 2000</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
              <EM>"
  In total, just
                            over 1000 people attended the conference and this included a large number of Apache Software Foundation members.
                            At the very first session of the conference, the opening plenary, the previous record for the most Apache developers in
                            the same place at the same time was broken."</EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Melbourne Linux Users Group Inc</CITE>,
  		10 March 2000: 
  		"<a href="http://www.mlinux.org/events/acon2000/">ApacheCon 2000</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The Melbourne Linux Users Group posted a number of pictures from the conference. 
   <EM>
  "The ApacheCon show was very well done. The exhibit floor featured many cool companies and the keynote and PHP presentations I attended were very informative. Here are some pics of the event."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Open Source IT</CITE>,
  		March 2000: 
  		"<a href="http://opensourceit.earthweb.com/news/031300_apachecon.html">The Buzz At Apache Conference: World Domination</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  ApacheCon 2000 is still in the news as Open Source IT reports on ApacheCon 2000 in "The Buzz at Apache Conference: World Domination". 
   <EM>
  "More than 1,000 Apache developers and users gathered at ApacheCon 2000 in Orlando last week to discuss -- among other things -- the progress the Apache Web server is making towards World Domination."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>O'Reilly</CITE>,
  		March 2000: 
  		"<a href="http://web.oreilly.com/news/apachecon_day1.html">ApacheCon 2000: Day One, Day Two, DayThree</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  O'Reilly published a detailed report on each day of the conference; Wednesday, Thursday, and Friday. 
   <EM>
  "The conference is being held at the Caribe Royale Resort Suites, which despite a strong conference turnout, is mainly inhabited by lots of parents and their young children, due to the proximity to Disney World."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>LinuxPlanet</CITE>,
  		March 2000: 
  		"<a href="http://www.linuxplanet.com/linuxplanet/reports/1580/1/">ApacheCon: Fuelling The Web Revolution</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The article gives a brief overview of the conference and highlights one of the popular talks on open source from IBM.
   <EM>
  "ApacheCon is the yearly convention dedicated to Apache and Apache products. There are over 1,000 visitors this year, and the show creators were sitting around saying things to me like, "Wow, this is going so mainstream so fast." God, I hope so. It'd be a terrible thing for something that has captured 60 percent of the Internet Web-server market share to not be mainstream."
   </EM>
          </BLOCKQUOTE>
          <P>
              <STRONG><CITE>Wired.com News</CITE>,
  		14 February 2000: 
  		"<a href="http://www.wired.com/news/business/0,1367,34302,00.html">A Patchy Start: Apache's Strong</a>"
  		</STRONG>
          </P>
          <BLOCKQUOTE>
  The article examines why Apache is not as well known as other projects such as Linux and finds that the companies providing support and services based on Apache are not as visible. 
   <EM>
  "Apache is the Web's most widely used and -- outside of the Nerd Zone -- its most unknown application. 
  It has achieved dominance in a crucial market that Microsoft and Netscape have struggled mightily to conquer. Both companies have invested massive amounts of money and programming skills into server software programs -- and yet it's Apache, a freeware application, that is installed on just over half of all publicly accessible Web servers."
   </EM>
          </BLOCKQUOTE>
          <HR>
      </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache HTTPD Project</title>
    </properties>
  <body>
  <section id="Welcome">
  <title>The Number One HTTP Server On The Internet</title>
  
  <p>Apache has been the most popular web server on the Internet since
  April of 1996.  The September 2001 <a 
  href="http://www.netcraft.com/survey/">Netcraft Web Server Survey</a>
  found that 59% of the web sites on the Internet are using Apache
  (around 60% if Apache derivatives are included), thus making it more widely
  used than all other web servers combined.</p>
  
  <p>The Apache HTTP Server Project is an effort to develop and maintain 
  an open-source HTTP server for various modern desktop and server 
  operating systems, such as UNIX and Windows NT. The goal of this 
  project is to provide a secure, efficient and extensible server which 
  provides HTTP services in sync with the current HTTP standards.</p>
  </section>
  
  <section id="1.3.22">
  <title>Apache 1.3.22 Released</title>
  
  <p>The Apache Group is pleased to announce the <a 
  href="http://www.apache.org/dist/httpd/Announcement.html">release of the 
  1.3.22 version of the Apache HTTP server</a>.</p>
  
  <p>Apache 1.3.22 is the best version of Apache currently available;
  everyone running 1.2.X servers or earlier are strongly urged to
  upgrade to 1.3, as there will not be any further 1.2.X releases.
  At present, the Win32 port of Apache is not as stable as the UNIX 
  version.</p>
  
  <p align="CENTER">
  
  <a href="http://www.apache.org/dist/httpd/">Download Apache 1.3</a> | 
  <a href="docs/windows.html">Apache for Win32</a> |
  <a href="docs/new_features_1_3.html">New Features in Apache 1.3</a> |
  <a href="http://www.apache.org/dist/httpd/CHANGES_1.3">ChangeLog for 1.3.22</a>
  </p>
  </section>
  
  <section id="2.0.28">
  <title>Apache 2.0.28 Beta Released</title>
  
  <p>Apache 2.0.28 is a public beta of the forthcoming Apache 2.0, an 
  update which includes several new enhancements, including the new Apache 
  Portable Run-time, the new Multi-processing modules, and I/O filtering.  
  This is a beta release, and is not intended for production use; use it at
  your own risk.  It will be available in both source and binary format.  
  The binary implementations will be available as they are created.</p>
  
  <p>If you are not familiar with software development, and wish to use
  a stable, working, web server, we strongly recommend you download
  Apache 1.3 instead. Please <a href="bug_report.html">report any bugs</a> you
  find.</p>
  
  <p align="CENTER">
  <a href="http://www.apache.org/dist/httpd/">Download Apache 2.0.28</a> | 
  <a href="docs-2.0/new_features_2_0.html">New Features in Apache 2.0</a> |
  <a href="http://www.apache.org/dist/httpd/CHANGES_2.0">ChangeLog for 2.0.28</a>
  </p>
  
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/info.html
  
  Index: info.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache HTTP Server Project</TITLE>
  </HEAD>
  
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <H1 ALIGN="CENTER">
  <IMG SRC="images/apache_logo.gif" ALT=""><BR>
  Information on the<BR>Apache<BR>HTTP Server Project</H1>
  
  <HR SIZE=4>
  
  <H3>The Apache project has been organized in an attempt to answer some of the
  concerns regarding active development of a public domain HTTP server.
  The goal of this project is to provide a secure, efficient and extensible server
  which provides HTTP services in sync with the current HTTP standards.</H3>
  
  <H2>The Apache httpd server ...</H2>
  <UL>
   <LI>is a powerful, flexible, HTTP/1.1 compliant web server
   <LI>implements the latest protocols, including HTTP/1.1 (RFC2068)
   <LI>is highly configurable and extensible with third-party modules
   <LI>can be customised by writing 'modules' using the Apache module API
   <LI>provides full source code and comes with an unrestrictive license
   <LI>runs on most versions of Unix without modification
   <LI>is actively being developed
   <LI>encourages user feedback through new ideas, bug reports and patches
   <LI>implements many frequently requested features:<BR><BR>
    <DL>
      <DT>DBM databases for authentication</DT>
      <DD>allows you to easily set up password-protected pages with 
      enormous numbers of authorized users, without bogging down the server.
      <DT>Customized responses to errors and problems</DT>
       <DD>Allows you to set up files, or even CGI scripts, which are
        returned by the server in response
        to errors and problems, e.g. setup a script to intercept
        <STRONG>500 Server Error</STRONG>s and perform on-the-fly diagnostics for
        both users and yourself. </DD>
      <DT> Multiple DirectoryIndex directives </DT>
      <DD> Allows you to say <CODE>DirectoryIndex index.html
           index.cgi</CODE>, which instructs the server to either send
           back <CODE>index.html</CODE> or run <CODE>index.cgi</CODE>
           when a directory URL is requested, whichever it finds in the
            directory.
      <DT> Unlimited numbers of Alias and Redirect directives </DT>
      <DD> Apache has no fixed limit on the numbers of Aliases and
           Redirects which may be declared in the config files.
      <DT>Content negotiation</DT>
      <DD>i.e. the ability to automatically serve clients of varying
       sophistication and HTML level compliance, with documents which
       offer the best representation of information that the client is
       capable of accepting.</DD>
      <DT>Multi-homed servers</DT>
       <DD>A much requested feature, sometimes known as the "APB" patches.
     This allows the server to distinguish between requests made to
     different IP addresses (mapped to the same machine). 
       </DD>
  <!--     <DT>Caching of client internet names</DT>
       <DD>The server will be able to resolve around 85% of all
         IP addresses, without reverting to a separate nameserver.</DD>
  -->
    </DL>
  </UL>
  
  
  <H2>Why switch to Apache?</H2>
  
  <P><STRONG>Speed, features, stability.</STRONG></P>
  
  <P>The Apache Group allows everyone to use and redistribute Apache as
  Open Source software.  Please see our
  <a href="http://www.apache.org/LICENSE.txt">license</A>
  for details.</P>
  
  <P>The Apache Group consists of server users ---
   people who run web servers for a living, and will, if it is feasible,
   attempt to give other server users what they want. We have no outside
   sponsors to please and no institutional agenda of our own to pursue;
   everyone is welcome to make suggestions to influence the direction we
   take.</P>
  
  <P>Some existing prominent web servers have already switched to
  Apache code and are actively helping with development of Apache. These
  include <A HREF="http://www.hotwired.com/">Hotwired</A>,
  <A HREF="http://www.ai.mit.edu/">MIT AI Lab</A>, The Internet Movie
  Database at <A HREF="http://us.imdb.com/Movies/">US</A> and
  <A HREF="http://uk.imdb.com/Movies/">UK</A>, and
  <A HREF="http://www.hyperreal.com/">Hyperreal</A>, as well as many
  other sites running various services and OSes.</P>
  
  <P>An incomplete
  <A HREF="info/apache_users.html">list of sites</A> running
  Apache is being maintained.</P>
  
  <H2>Is Apache supported?</H2> 
  
  <P>Support for Apache will be <EM>via</EM> the 
  <A HREF="news:comp.infosystems.www.servers.unix"
  >comp.infosystems.www.servers.unix</A>
  and 
  <A HREF="news:comp.infosystems.www.servers.ms-windows"
  >comp.infosystems.www.servers.ms-windows</A>
  newsgroups. Our policy will be for complete openness,
  with the exception of reports of
  <A HREF="http://www.apache.org/security_report.html">security holes</A>.
  
  <P>A number of companies now also provide full commercial support for the
  Apache server
  
  <P>Bug reports and suggestions should be submitted by filling out a
  report form at
  <A HREF="http://bugs.apache.org/"
  ><SAMP>http://bugs.apache.org/</SAMP></A>.
  If your browser is not forms-capable, or you can't access the form for some
  other reason, you can submit information by sending a mail message to
  <A HREF="mailto:apache-bugs@apache.org"
  ><SAMP>apache-bugs@mail.apache.org</SAMP></A>.
  Submission <EM>via</EM> the browser form is much preferable, however,
  so please only send mail if there is no alternative.
  
  <P>Since Apache was originally based on NCSA 1.3
  code, many questions about it can be answered by many
  comp.infosystems.www.servers.unix readers who are not associated with the
  Apache project. Apache developers will regularly check this newsgroup for
  questions that need answering.</P>
  
  <H2>Why is it called Apache?</H2>
  <P>The Apache group was formed around a number of people who provided
  <EM>patch</EM> files that had been written for NCSA httpd 1.3.  The
  result after combining them was
  <STRONG>A PA</STRONG>t<STRONG>CH</STRONG>y server.</P>
  
  <H2>How do I get Apache?</H2>
  <P>The Apache httpd server is available in the form of source code:
  <UL>
  <LI><EM>via</EM> http from various places listed on the
   <A HREF="index.html">main Apache page</A>
  </UL>
  
  <HR SIZE=3>
  
  <A HREF="index.html"><IMG SRC="images/apache_home.gif" ALT="Home"></A>
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/related_projects.html
  
  Index: related_projects.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <HTML>
  <HEAD>
  <TITLE>Apache HTTP Server Project - Related Projects</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <IMG SRC="images/apache_sub.gif" ALT="">
  <H2>Related Projects</H2>
  
  The source code maintained by the Apache HTTP Server Project provides 
  the basis for a number of interesting projects.  This page summarizes
  those projects and points you to places where you can find more information.
  The Apache Group encourages you to use the source code for your own projects
  and would like to hear about your successes.
  
  <H3>News, Documentation, and Tutorials</H3>
  
  <UL>
  <LI><A HREF="#docs">Apache Documentation Project</A>
  <LI><A HREF="#quickref">Apache Quick Reference Card</A>
  <LI><A HREF="#apacheweek">Apache Week</A>
  <LI><A HREF="#apachetoday">ApacheToday</A>
  <LI><A HREF="#oreilly">O'Reilly Network Apache Devcenter</A>
  <LI><A HREF="#slashdot">Slashdot Apache Section</A>
  </UL>
  
  <H3>Add-ons, Enhancements, and Modules</H3>
  
  <UL>
  <LI><a href="#activescripting">ActiveScripting for Apache</a>
  <LI><A HREF="#apacheasp">Apache::ASP</A>
  <LI><A HREF="#guidev">Apache Graphical User Interface Project</A>
  <LI><A HREF="#modulereg">Apache Module Registry</A>
  <LI><A HREF="#modssl">Apache Interface to OpenSSL (mod_ssl)</A>
  <LI><A HREF="#mod_python">Apache/Python Integration (mod_python)</A>
  <LI><A HREF="#apachessl">Apache-SSL</A>
  <LI><A HREF="#moddtcl">Embedding TCL in web pages (mod_dtcl)</a>
  <LI><A HREF="#kshIndex">kshIndex fancy index utility</a>
  <LI><A HREF="#moddav">WebDAV Protocol Extensions for Apache (mod_dav)</a>
  </UL>
  
  <H3>Ports and Commercial Versions</H3>
  
  <UL>
  <LI><A HREF="#amiga">Apache for Amiga</A>
  <LI><A HREF="#os2">Apache for OS/2</A>
  <LI><A HREF="#tcs">Apache/Stronghold for Trusted Solaris</a>
  <LI><A HREF="#raven">Covalent Raven SSL module</A>
  <LI><A HREF="#av">Covalent Antivirus for Apache</A>
  <LI><A HREF="#snmp">Covalent SNMP Conductor for Apache</A>
  <LI><A HREF="#ibm">IBM HTTP Server powered by Apache</A>
  <LI><A HREF="#macosx">Mac OS X Server</A>
  <LI><A HREF="#matrice">Matrice W3</A>
  <LI><A HREF="#oracle">Oracle HTTP Server Powered by Apache</A>
  <LI><A HREF="#redhat">Red Hat Secure Server</a>
  <LI><A HREF="#stronghold">Stronghold</A>
  <LI><A HREF="#stweb">StWeb -- Stratos Web and Application Server</a>
  <LI><A HREF="#tenon">WebTen, a MacOS port of Apache</A>
  </UL>
  
  <HR>
  
  <P><HR>
  <h3><a name="activescripting"
       href="http://www.activescripting.org/html/projects.html"
      >ActiveScripting for Apache</a></h3>
  
  <P>The ActiveScripting for Apache project provides an open alternative to the
  use of Active Server Pages (ASP) for the Apache Web server on the Windows
  platform.
  
  <P><HR>
  
  <h3><a name="apacheasp" href="http://www.nodeworks.com/asp">Apache::ASP</a></h3>
  <p>
  The Apache::ASP project is a Perl-native port of Active Server Pages (ASP)
  to Apache that runs under <a href="http://perl.apache.org/">mod_perl</a>,
  and provides an open alternative to Chili!Soft's ASP for Unix.
  
  <P><HR>
  <H3><A NAME="docs" HREF="docs-project/">Apache Documentation Project</A></H3>
  If you're interested in helping improve the documentation which
  accompanies Apache.
  
  <P><HR>
  <H3><A NAME="amiga" HREF="http://amiga-apache.home.pages.de/"
      >Apache for Amiga</A></H3>
  
  Apache has now been ported to Amiga, and is maintained as a separate project.  
  
  <P><HR>
  <H3><A NAME="os2" HREF="http://silk.apana.org.au/apache/"
      >Apache for OS/2</A></H3>
  
  <P>The primary motivation for this port is to show that OS/2 is a viable 
  and powerful server platform and to promote its use as such. The 
  secondary reason is to provide a free industrial strength HTTP
  server with a growing feature set available for OS/2.
  
  <P><STRONG>Note: as of Apache 1.3b3, it should be possible to compile for
  OS/2 from the standard distribution.</STRONG>
  
  <P><HR>
  <H3><A NAME="guidev">Apache Graphical User Interface Project</A></H3>
  
  A number of folks have gotten together to work on a graphical
  configuration tool for Apache.
  
  <BLOCKQUOTE>
  Find out more by subscribing to the "gui-dev" mailing list, by sending
  mail to
  <A HREF="mailto:gui-dev-request@apache.org">gui-dev-request@apache.org</A>
  with the words "subscribe" in the body of the message.  Also, visit
  <A HREF="http://gui.apache.org/">the project status page</A>.
  </BLOCKQUOTE>
  
  <P><HR>
  <H3><A NAME="modssl" HREF="http://www.modssl.org/">Apache Interface to OpenSSL (mod_ssl)</A></H3>
  
  This module provides strong cryptography for the <a
  href="http://www.apache.org/">Apache</a> 1.3 webserver via the <a
  href="http://www.netscape.com/eng/ssl3/">Secure Sockets Layer</a> (SSL v2/v3)
  and <a href="http://www.consensus.com/ietf-tls/ietf-tls-home.html">Transport
  Layer Security</a> (TLS v1) protocols by the help of the <a
  href="http://www.opensource.org/">Open Source</a> SSL/TLS toolkit <a
  href="http://www.openssl.org/">OpenSSL</a>, which is based on
  SSLeay from Eric A. Young and Tim J. Hudson. The mod_ssl package was
  created in April 1998 by <a href="http://www.engelschall.com/">Ralf S.
  Engelschall</a> and was originally derived from software developed by <a
  href="mailto:ben@algroup.co.uk">Ben Laurie</a> for use in the <a
  href="http://www.apache-ssl.org/">Apache-SSL</a> HTTP server project.  The
  mod_ssl package is licensed under a BSD-style licence, which basically means
  that you are free to get and use it for commercial and non-commercial
  purposes.
  
  <P>
  The mod_ssl package is <A
  HREF="http://www.modssl.org/source/">distributed</A> as a
  source extension and set of patches for the Apache 1.3 webserver from outside
  the United States.  Inside the United States you are able to use it for
  non-commercial purposes for free if you use RSAREF (due to various patents).
  Outside the United States you can use it for non-commercial and commercial
  purposes for free.
  
  <P><HR>
  <H3><A NAME="modulereg" HREF="http://modules.apache.org/"
      >Apache Module Registry</A></H3>
  
  <P>This project was developed to provide a central location to find and
  submit information about Apache modules projects and developers that
  are taking advantage of the powerful API interface provided by the
  Apache HTTP server.
  
  <P><HR>
  <H3><A NAME="quickref">Apache Quick Reference Card</A></h3>
  
  <P>A compact, tri-fold double-sided page listing all major directives,
  available at <A HREF="http://www.refcards.com/">http://www.refcards.com/</A>.  A
  mod_perl refcard is also available.
  
  <P><HR>
  <H3><A NAME="apachessl" HREF="http://www.apache-ssl.org/">Apache-SSL</A></H3>
  
  <P>Apache-SSL is an encrypting web server, based on Apache and OpenSSL, which
  implements <A HREF="http://docs.iplanet.com/docs/manuals/security/sslin/">Secure Sockets 
  Layer (SSL)</A> functionality as a set of patches to existing Apache
  source code.
  
  <P>The webserver is distributed with the full source code.  Inside the
  United States you are able to use it for non-commercial purposes for
  free if you use RSAREF (due to various patents). Outside the United
  States you can use it for non-commercial and commercial purposes for
  free.
  
  <P>Inside the United States in order to use Apache with SSL commercially
  you may want to look at <A HREF="#stronghold">Stronghold</A> or <A
  HREF="#raven">Raven</A>.
  
  <A HREF="http://www.apache-ssl.org/">Get Apache-SSL from here</A>.
  
  <P><HR>
  <H3><A NAME="tcs" HREF="http://www.tcs-sec.com/"
      >Apache/Stronghold for Trusted Solaris</A></H3>
  <p>
  Trusted Computer Solutions, Inc. (TCS) offers a suite of Apache/Stronghold
  based security solutions hosted on Sun's Trusted Solaris operating
  system.  Product and security information, white papers and the
  company's latest news releases may be accessed <i>via</i> TCS'
  World Wide Web site at
  &lt;URL:<a href="http://www.tcs-sec.com">http://www.tcs-sec.com</a>&gt;
  or <i>via</i> email to &lt;info@tcs-sec.com&gt;.
  
  <P><HR>
  <H3><A NAME="apachetoday" HREF="http://apachetoday.com/">
  ApacheToday</A></H3>
  
  <P><A HREF="http://apachetoday.com/">ApacheToday</A> is a resource for
  professionals and community members interested in maintaining the
  highest level of awareness about Apache web server products and
  projects.  Includes news and tutorials.
  
  
  <P><HR>
  <H3><A NAME="apacheweek">Apache Week</A></H3>
  
  <P>A free weekly guide to the latest Apache developments.  Apache Week
  provides an easy way to stay abreast of the latest news about Apache
  including: new releases, major bug fixes, plans for the next version,
  new apache ports and other related Apache information.
  <BLOCKQUOTE>
  You can view 
  <A HREF="http://www.apacheweek.com/">Apache Week on the Web</A>
  or receive it each week by email.
  </BLOCKQUOTE>
  
  <P><HR>
  <H3><A NAME="raven"></a><A HREF="http://www.covalent.net/products/ssl/">Covalent Raven SSL Module for Apache</A></H3>
  
  The Raven SSL module is a commercial product providing a strong
  cryptography upgrade to the Apache web server using the <A
  HREF="http://www.rsa.com/">RSA</A> encryption engine and is available to
  US and International customers. Including a friendly GUI for
  installation, key and certificate management, support for
  hardware encryption and tamper-proof key storage.
  
  <P><HR>
  <H3><A NAME="snmp"></A><A HREF="http://www.covalent.net/products/snmp/">Covalent SNMP Conductor for Apache</A></H3>
  
  Covalent SNMP Conductor is a commercial plug-in module for Apache which helps 
  organizations monitor and manage their Apache based Web services. 
  The SNMP module provides real-time 
  management information for server access statistics, activity, load, 
  and utilization, on the fly configuration changes and
  actively informs management applications of serious anomalies using SNMP 
  traps. It can be integrated with standard Framework Management packages 
  and QoS systems.
  
  <P><HR>
  <H3><A NAME="av"></A><A HREF="http://www.covalent.net/products/av/">Covalent Antivirus for Apache</A></H3>
  
  Covalent Antivirus is a commercial Apache module that
  automatically scans all outgoing data: HTML, Java,
  Javascript, binary downloads, audio streams, or any
  other datatype for viruses. When a virus is found a
  "Service Not Available" message is shown. Extensive
  logging and reporting allows for notification of the
  webmaster by means of a logfile, snmp-trap, syslog or
  cgi-script.
  
  <P><HR>
  <H3><A NAME="moddtcl" HREF="http://comanche.com.dtu.dk/dave/"
      >Embedding TCL in web pages</A></H3>
  
  <P>The <a href="http://comanche.com.dtu.dk/dave/">mod_dtcl</a> Apache
  module enables the use of Tcl as an HTML-embedded scripting language,
  similar to PHP.  It is fast, light, and lets you use the extensive
  codebase of existing <a
  href="http://dev.scriptics.com/software/tcltk/">Tcl</a> code on the
  web.
  
  <P><HR>
  <H3><A NAME="ibm" HREF="http://www.software.ibm.com/webservers/httpservers/">IBM HTTP Server powered by Apache</A></H3>
  
  <P><A HREF="http://www.software.ibm.com/webservers/httpservers/">IBM HTTP Server powered by Apache</A>
  features support for secure transactions over SSL, iKeyMan SSL key and certificate
  management GUI, kernel resident static page cache (a.k.a. Fast Response Cache Accelerator)
  for AIX and Windows NT/2000, browser based secure remote administration, native platform
  install and more. IBM HTTP Server powered by Apache runs on AIX, Solaris, HP-UX,
  Windows NT/2000 and multiple distributions of Linux. Support for AS/400 has been announced
  (based on Apache 2.0 alpha 5) with availability late 2000 or early 2001.
  <P>You can download and use IBM HTTP Server powered by Apache, free of charge (but without
  support) from IBM's
  <A HREF="http://www.software.ibm.com/webservers/httpservers/download.html"> HTTP server download</A> site.
  Full support is included with the purchase of any edition of the 
  <A HREF="http://www.software.ibm.com/webservers/appserv"> IBM WebSphere Application Server</A>.
  
  <P><HR>
  <H3><A NAME="kshIndex">kshIndex fancy index utility</A></H3>
  
  <A
  Href="http://dfrench.hypermart.net/fancyIndex/Tools/CGI/kshIndex/">kshIndex</A>
  is a set of utilities and scripts built around the
  Apache fancyIndex functions.  It allows webmasters to provide
  a variety of functions to users including automated indexing
  of URL's, files, and directories, user authorization management,
  cascading user customization, events calendars, contact lists, etc.
  
  <P><HR>
  <H3><A NAME="macosx">Mac OS X Server</A></H3>
  
  <P>
  <A HREF="http://www.apple.com/macosx/server/">Mac OS X Server</A> is a
  server operating system from Apple Computer which includes the Apache
  web server, AppleShare file services, and Mac OS NetBoot server
  software. It is hosted on a full BSD environment (Darwin) and sports
  an easy to use user interface for server administration.
  
  <P><HR>
  <H3><A NAME="matrice">Matrice W3 System for Linux (x86)</A></H3>
  
  <P>MWS is a complete solution for your web presence that enables you to
  access control, tracking, accounting, billing, marketing analyse the
  end user's accesses to your site.  Find out more at
  <A HREF="http://www.matrice.it">Matrice's web site</A>.
  
  <P><HR>
  <H3><A NAME="mod_python" HREF="http://www.modpython.org/">mod_python -
  Apache/Python Integration</A></H3>
  
  <P>mod_python is a module that embeds the <a href="http://www.python.org">Python
  language</a> interpreter within the server allowing for Apache handlers to
  be written in Python.
  
  <P>
  mod_python brings together the versatility of Python and the power of
  Apache for a considerable boost in flexibility and performance over the
  traditional CGI approach.
  
  <P><HR> <H3><A NAME="oracle"
  HREF="http://www.oracle.com/ip/deploy/ias/index.html?web.html">Oracle
  HTTP Server Powered by Apache</A></H3>
  
  <P>Powered by Apache, the <A
  HREF="http://www.oracle.com/ip/deploy/ias/index.html?web.html">Oracle
  HTTP service</A> provides the stability, performance, and scalability
  needed to run the most demanding e-business applications.  Combines
  Apache with Oracle iAS.
  
  <P><HR> <H3><A NAME="oreilly"
  HREF="http://oreilly.apacheweek.com/">O'Reilly Network Apache
  Devcenter</A></H3>
  
  <P>The <A HREF="http://oreilly.apacheweek.com/">O'Reilly Network</A>
  provides news, tutorials, and discussions about Apache in conjunction
  with <A HREF="#apacheweek">ApacheWeek</A>.
  
  <P><hr>
  <h3><a name="redhat">Red Hat Secure Server</a></h3>
  
  <P>The <A HREF="http://www.redhat.com/product.phtml/WB2000">
  Red Hat Secure Server</a> is an integration of the popular Apache web server
  with the award-winning Red Hat Linux OS that has RSA key technology, and it's
  the out-of-the-box answer to your secure web serving needs.  Shop, sell, and
  transact via the web without worry. Available only to customers in the United
  States and Canada.
  
  <P><HR> <H3><A NAME="slashdot"
  HREF="http://slashdot.org/index.pl?section=apache">Slashdot Apache
  Section</A></H3>
  
  <P>The <A HREF="http://slashdot.org/index.pl?section=apache">Apache
  Section</A> of the popular <A HREF="http://slashdot.org/">Slashdot</A>
  news and discussion site has announcements, news, and information
  about the Apache Software Foundation and its projects.
  
  
  <P><HR>
  <H3><A NAME="stronghold">Stronghold</A></H3>
  
  <P>Stronghold is a commercial Apache-derivative webserver which bundles
  strong cryptography (SSL), commercial support, etc., into a full package.<P>
  
  <BLOCKQUOTE>
  For information on Stronghold see
  <A HREF="http://www.redhat.com/mna/c2net.html">Red Hat</A> 
  </BLOCKQUOTE>
  
  <P><HR>
  <h3><a name="stweb">StWeb -- Stratos Web and Application Server</a></h3>
  <p>
  StWeb is an easy-to-use, cross platform, Internet/Intranet development
  and deployment system for development and maintenance of web-enabled
  applications.
  
  <p>
  The main component of the system is the Stratos Web Application Server -
  an Apache based HTTP server integrated with Stratos application server.
  StWeb is platform and database independent. It runs on all major
  hardware  and operating systems and can be used with most of popular
  database servers. Application once developed, can be deployed on any of
  the supported systems ("write once, use anywhere" ).
  The Personal Edition  of StWeb is free and is available for download
  from the StWeb site.
  
  <blockquote>
  For more information visit StWeb home at
  &lt;<a href="http://www.stweb.org/">http://www.stweb.org/</a>&gt;.
  </BLOCKQUOTE>
  
  <P><HR>
  <H3><A NAME="moddav" HREF="http://www.webdav.org/mod_dav/"
      >WebDAV Protocol Extensions for Apache</A></H3>
  
      The <a href="http://www.webdav.org/mod_dav/">mod_dav</a> Apache
      module adds <a href="http://www.webdav.org/">WebDAV</a>
      capabilities to your Apache web server.
      <p>
        WebDAV stands for "Web-Based Distributed Authoring and
        Versioning." The WebDAV protocol is a set of extensions to HTTP
        to allow remote users to collaboratively edit and manage files
        on a web server.
  
  
  <P><HR>
  <H3><A NAME="tenon">WebTen, a MacOS port of Apache</A></H3>
  
  WebTen is a commercial Apache-derivative webserver for Power Macs.
  WebTen has been extended with a browser-based interface and Squid
  caching.  It supports standard Macintosh-style plug-ins and CGIs and
  includes SSL, DNS, FTP, and NFS.
  
  <BLOCKQUOTE>
  For more information visit
  <A HREF="http://www.tenon.com/products/webten/">Tenon's web site</A>.
  </BLOCKQUOTE>
  
  <HR>
  
  <A HREF="index.html"><IMG SRC="images/apache_home.gif" ALT="Home"></A>
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/robots.txt
  
  Index: robots.txt
  ===================================================================
  User-agent: *
  Disallow: /websrc
  
  
  
  
  1.1                  httpd-site/xdocs/security_report.xml
  
  Index: security_report.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Reporting Security Problems with Apache</title>
    </properties>
  <body>
  <section id="reporting">
  <title>Reporting Security Problems with Apache</title>
  <p>The Apache Group takes a very active stance in eliminating security
  problems and denial of service attacks against the Apache web server.
  We strongly encourage folks to report such problems to our private
  security mailing list first, before disclosing them in a public forum.</p>
  
  <p>The mailing address is:<br />
  <code>I-found-a-security-problem-in-the-apache-source-code@apache.org</code>
  </p>
  
  <p><strong>We cannot accept regular bug reports or other queries at this
  address, we ask that you use our <a href="/bug_report.html">bug
  reporting page</a> for those.  <font color="red">All mail sent to this
  address that does not relate to security issues will be ignored.
  </font></strong></p>
  
  <p>Note that all networked servers are subject to denial of service
  attacks, and we cannot promise magic workarounds to generic problems
  (such as a client streaming lots of data to your server, or re-requesting
  the same URL repeatedly).  In general our philosophy is to avoid any
  attacks which can cause the server to consume resources in a non-linear
  relationship to the size of inputs.</p>
  
  </section>
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/userslist.html
  
  Index: userslist.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache HTTP Server Users Mailing List</TITLE>
  </HEAD>
  
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <IMG SRC="images/apache_sub.gif" ALT="">
  <H1>Apache HTTP Server Users Mailing List</H1>
  
  <p>This mailing list is a place for users of the Apache HTTP Server to
  discuss Apache and help each other to install and configure the
  software.  Although some developers may participate in the list,
  the primary interaction is user-to-user.</p>
  
  <p>Please read the following guidelines before posting to the list.</p>
  
  <ul>
  
  <li><strong>There is no official support for the Apache HTTP
  Server:</strong> This mailing list is for users to help other users.
  If you want professional support, we suggest you contact a <a
  href="http://www.apache.org/info/support.cgi">professional</a>.
  
  <li><strong>Ask smart questions:</strong> Eric Raymond has written a
  very useful guide to <a
  href="http://www.tuxedo.org/~esr/faqs/smart-questions.html">Asking
  Questions the Smart Way</a>.</li>
  
  <li><strong>Send in plain text:</strong> Many email programs including
  Microsoft Outlook default to sending HTML or other <em>styled</em> email.
  Please configure your email client to send plain text so that everyone
  will be able to read your message.</li>
  
  <li><strong>Don't ask FAQs:</strong> Be sure to read the <a
  href="docs/misc/FAQ.html">FAQ</a> and search the <a
  href="#archives">archives</a> before you post.
  
  </ul>
  
  <h3>Subscribe</h3>
  
  <p>To subscribe, send an empty message to
  <code><strong>users-subscribe@httpd.apache.org</strong></code>.  You
  will receive a confirmation message with instructions on how to
  validate your subscription.</p>
  
  <h3>Un-Subscribe</h3>
  
  <p>To get off the mailing list, send a messages to
  <code><strong>users-unsubscribe@httpd.apache.org</strong></code>.
  You must send the unsubscribe message from the same email address that
  you used to subscribe to the list.</p>
  
  <h3><a name="archives">Archives</a></h3>
  
  <p>The list is brand new and doesn't have any archives yet.  But it
  will soon.</p>
  
  <p>Until then, please search the <a
  href="http://groups.google.com/groups?group=comp.infosystems.www.servers">usenet
  newsgroups</a> before posting.</p>
  
  
  <A HREF="index.html"><IMG SRC="images/apache_home.gif" ALT="Home"></A>
  
  </BODY></HTML>
  
  
  
  
  1.1                  httpd-site/xdocs/apreq/Apache-Cookie.html
  
  Index: Apache-Cookie.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache::Cookie - HTTP Cookies Class</TITLE>
  <LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
  </HEAD>
  
  <BODY>
  
  <!-- INDEX BEGIN -->
  
  <UL>
  
  	<LI><A HREF="#NAME">NAME</A>
  	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  	<LI><A HREF="#METHODS">METHODS</A>
  	<UL>
  
  		<LI><A HREF="#new">new</A>
  		<LI><A HREF="#bake">bake</A>
  		<LI><A HREF="#parse">parse</A>
  		<LI><A HREF="#fetch">fetch</A>
  		<LI><A HREF="#as_string">as_string</A>
  		<LI><A HREF="#name">name</A>
  		<LI><A HREF="#value">value</A>
  		<LI><A HREF="#domain">domain</A>
  		<LI><A HREF="#path">path</A>
  		<LI><A HREF="#expires">expires</A>
  		<LI><A HREF="#secure">secure</A>
  	</UL>
  
  	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
  	<LI><A HREF="#AUTHOR">AUTHOR</A>
  </UL>
  <!-- INDEX END -->
  
  <HR>
  <P>
  <H1><A NAME="NAME">NAME</A></H1>
  <P>
  Apache::Cookie - HTTP Cookies Class
  
  <P>
  <HR>
  <H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
  <P>
  <PRE>    use Apache::Cookie ();
      my $cookie = Apache::Cookie-&gt;new($r, ...);
  </PRE>
  <P>
  <HR>
  <H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
  <P>
  The Apache::Cookie module is a Perl interface to the cookie routines in <EM>libapreq</EM>. The interface is based on Lincoln Stein's CGI::Cookie module.
  
  <P>
  <HR>
  <H1><A NAME="METHODS">METHODS</A></H1>
  <P>
  This interface is identical the to <EM>CGI::Cookie</EM> interface with one exception noted below. Refer the to <EM>CGI::Cookie</EM> documentation while these docs are ``under construction.''
  
  <H2><A NAME="new">new</A></H2>
  <P>
  Just like CGI::Cookie::new, but requires an <EM>Apache</EM> request object:
  
  <P>
  <PRE>        my $cookie = Apache::Cookie-&gt;new($r,
                               -name    =&gt;  'foo', 
                               -value   =&gt;  'bar', 
                               -expires =&gt;  '+3M', 
                               -domain  =&gt;  '.capricorn.com', 
                               -path    =&gt;  '/cgi-bin/database',
                               -secure  =&gt;  1 
                              ); 
  </PRE>
  <H2><A NAME="bake">bake</A></H2>
  <P>
  Put cookie in the oven to bake. (Add a <EM>Set-Cookie</EM> header to the outgoing headers table.) 
  
  <P>
  <PRE>    $cookie-&gt;bake;
  </PRE>
  <H2><A NAME="parse">parse</A></H2>
  <P>
  This method parses the given string if present, otherwise, the incoming 
  <EM>Cookie</EM> header:
  
  <P>
  <PRE>    my $cookies = $cookie-&gt;parse; #hash ref
  </PRE>
  <P>
  <PRE>    my %cookies = $cookie-&gt;parse;
  </PRE>
  <P>
  <PRE>    my %cookies = $cookie-&gt;parse($cookie_string);
  </PRE>
  <H2><A NAME="fetch">fetch</A></H2>
  <P>
  Fetch and parse the incoming <EM>Cookie</EM> header:
  
  <P>
  <PRE>    my $cookies = Apache::Cookie-&gt;fetch; #hash ref
  </PRE>
  <P>
  <PRE>    my %cookies = Apache::Cookie-&gt;fetch;
  </PRE>
  <H2><A NAME="as_string">as_string</A></H2>
  <P>
  Format the cookie object as a string:
  
  <P>
  <PRE> #same as $cookie-&gt;bake
   $r-&gt;err_headers_out-&gt;add(&quot;Set-Cookie&quot; =&gt; $cookie-&gt;as_string);
  </PRE>
  <H2><A NAME="name">name</A></H2>
  <P>
  Get or set the name of the cookie:
  
  <P>
  <PRE> my $name = $cookie-&gt;name;
  </PRE>
  <P>
  <PRE> $cookie-&gt;name(&quot;Foo&quot;);
  </PRE>
  <H2><A NAME="value">value</A></H2>
  <P>
  Get or set the values of the cookie:
  
  <P>
  <PRE> my $value = $cookie-&gt;value; 
   my @values = $cookie-&gt;value;
  </PRE>
  <P>
  <PRE> $cookie-&gt;value(&quot;string&quot;);
   $cookie-&gt;value(\@array);
  </PRE>
  <H2><A NAME="domain">domain</A></H2>
  <P>
  Get or set the domain for the cookie:
  
  <P>
  <PRE> my $domain = $cookie-&gt;domain;
   $cookie-&gt;domain(&quot;.cp.net&quot;);
  </PRE>
  <H2><A NAME="path">path</A></H2>
  <P>
  Get or set the path for the cookie:
  
  <P>
  <PRE> my $path = $cookie-&gt;path;
   $cookie-&gt;path(&quot;/&quot;);
  </PRE>
  <H2><A NAME="expires">expires</A></H2>
  <P>
  Get or set the expire time for the cookie:
  
  <P>
  <PRE> my $expires = $cookie-&gt;expires;
   $cookie-&gt;expires(&quot;+3h&quot;);
  </PRE>
  <H2><A NAME="secure">secure</A></H2>
  <P>
  Get or set the secure flag for the cookie:
  
  <P>
  <PRE> my $secure = $cookie-&gt;secure;
   $cookie-&gt;secure(1);
  </PRE>
  
  <P>
  <HR>
  <H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
  <P>
  <CODE>Apache(3),</CODE> Apache::Request(3)
  
  <P>
  <HR>
  <H1><A NAME="AUTHOR">AUTHOR</A></H1>
  <P>
  Doug MacEachern
  </BODY>
  
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/apreq/Apache-Request.html
  
  Index: Apache-Request.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache::Request - Methods for dealing with client request data</TITLE>
  <LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
  </HEAD>
  
  <BODY>
  
  <!-- INDEX BEGIN -->
  
  <UL>
  
  	<LI><A HREF="#NAME">NAME</A>
  	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  	<LI><A HREF="#Apache_Request_METHODS">Apache::Request METHODS</A>
  	<UL>
  
  		<LI><A HREF="#new">new</A>
  		<LI><A HREF="#instance">instance</A>
  		<LI><A HREF="#parse">parse</A>
  		<LI><A HREF="#param">param</A>
  		<LI><A HREF="#upload">upload</A>
  	</UL>
  
  	<LI><A HREF="#Apache_Upload_METHODS">Apache::Upload METHODS</A>
  	<UL>
  
  		<LI><A HREF="#name">name</A>
  		<LI><A HREF="#filename">filename</A>
  		<LI><A HREF="#fh">fh</A>
  		<LI><A HREF="#size">size</A>
  		<LI><A HREF="#info">info</A>
  		<LI><A HREF="#type">type</A>
  		<LI><A HREF="#next">next</A>
  		<LI><A HREF="#tempname">tempname</A>
  		<LI><A HREF="#link">link</A>
  	</UL>
  
  	<LI><A HREF="#SEE_ALSO">SEE ALSO</A>
  	<LI><A HREF="#CREDITS">CREDITS</A>
  	<LI><A HREF="#AUTHOR">AUTHOR</A>
  </UL>
  <!-- INDEX END -->
  
  <HR>
  <P>
  <H1><A NAME="NAME">NAME</A></H1>
  <P>
  Apache::Request - Methods for dealing with client request data
  
  <P>
  <HR>
  <H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
  <P>
  <PRE>    use Apache::Request ();
      my $apr = Apache::Request-&gt;new($r);
  </PRE>
  <P>
  <HR>
  <H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
  <P>
  <EM>Apache::Request</EM> is a subclass of the <EM>Apache</EM> class, which adds methods for parsing <STRONG>GET</STRONG> requests and <STRONG>POST</STRONG> requests where <EM>Content-type</EM>
  is one of <EM>application/x-www-form-urlencoded</EM> or 
  <EM>multipart/form-data</EM>. See the <CODE>libapreq(3)</CODE> manpage for more details.
  
  <P>
  <HR>
  <H1><A NAME="Apache_Request_METHODS">Apache::Request METHODS</A></H1>
  <H2><A NAME="new">new</A></H2>
  <P>
  Create a new <EM>Apache::Request</EM> object with an <EM>Apache</EM> request_rec object:
  
  <P>
  <PRE>    my $apr = Apache::Request-&gt;new($r);
  </PRE>
  <P>
  All methods from the <EM>Apache</EM> class are inherited.
  
  <P>
  The following attributes are optional:
  
  <DL>
  <DT><STRONG><A NAME="item_POST_MAX">POST_MAX</A></STRONG><DD>
  <P>
  Limit the size of POST data.  <EM>Apache::Request::parse</EM> will return an error code if the size is exceeded:
  
  <P>
  <PRE> my $apr = Apache::Request-&gt;new($r, POST_MAX =&gt; 1024);
   my $status = $apr-&gt;parse;
  </PRE>
  <P>
  <PRE> if ($status) {
       my $errmsg = $apr-&gt;notes(&quot;error-notes&quot;);
       ...
       return $status;
   }
  </PRE>
  <DT><STRONG><A NAME="item_DISABLE_UPLOADS">DISABLE_UPLOADS</A></STRONG><DD>
  <P>
  Disable file uploads.  <EM>Apache::Request::parse</EM> will return an error code if a file upload is attempted:
  
  <P>
  <PRE> my $apr = Apache::Request-&gt;new($r, DISABLE_UPLOADS =&gt; 1);
   my $status = $apr-&gt;parse;
  </PRE>
  <P>
  <PRE> if ($status) {
       my $errmsg = $apr-&gt;notes(&quot;error-notes&quot;);
       ...
       return $status;
   }
  </PRE>
  <DT><STRONG><A NAME="item_TEMP_DIR">TEMP_DIR</A></STRONG><DD>
  <P>
  Sets the directory where upload files are spooled. On a *nix-like that
  supports <CODE>link(2),</CODE> the TEMP_DIR should be placed on the same
  file system as the final destination file:
  
  <P>
  <PRE> my $apr = Apache::Request-&gt;new($r, TEMP_DIR =&gt; &quot;/home/httpd/tmp&quot;);
   my $upload = $apr-&gt;upload('file');
   $upload-&gt;link(&quot;/home/user/myfile&quot;) || warn &quot;link failed: $!&quot;;
  </PRE>
  <DT><STRONG><A NAME="item_HOOK_DATA">HOOK_DATA</A></STRONG><DD>
  <P>
  Extra configuration info to be passed to and upload hook. See next item for
  details.
  
  <DT><STRONG><A NAME="item_UPLOAD_HOOK">UPLOAD_HOOK</A></STRONG><DD>
  <P>
  Sets up a callback to run whenever file upload data is read. This can be
  used to provide an upload progress meter during file uploads. Apache will
  automatically continue writing the original data to $upload-&gt;fh after
  the hook exits.
  
  <P>
  <PRE> my $transparent_hook = sub {
     my ($upload, $buf, $len, $hook_data) = @_;
     warn &quot;$hook_data: got $len bytes for &quot; . $upload-&gt;name;
   };
  </PRE>
  <P>
  <PRE> my $apr = Apache::Request-&gt;new($r, 
                                  HOOK_DATA =&gt; &quot;Note&quot;,
                                  UPLOAD_HOOK =&gt; $transparent_hook,
                                 );
   $apr-&gt;parse;
  </PRE>
  
  <H2><A NAME="instance">instance</A></H2>
  <P>
  The <CODE>instance()</CODE> class method allows Apache::Request to be a
  singleton. This means that whenever you call Apache::Request-&gt;instance()
  within a single request you always get the same Apache::Request object
  back. This solves the problem with creating the Apache::Request object
  twice within the same request - the symptoms being that the second
  Apache::Request object will not contain the form parameters because they
  have already been read and parsed.
  
  <P>
  <PRE>  my $apr = Apache::Request-&gt;instance($r, DISABLE_UPLOADS =&gt; 1);
  </PRE>
  <P>
  Note that <CODE>instance()</CODE> call will take the same parameters as the above call to <CODE>new()</CODE>, however the parameters will only have an effect the first time <CODE>instance()</CODE> is called within a single request. Extra parameters will be ignored on
  subsequent calls to <CODE>instance()</CODE> within the same request.
  
  <P>
  Subrequests receive a new Apache::Request object when they call
  <CODE>instance()</CODE> - the parent request's Apache::Request object is
  not copied into the subrequest.
  
  <P>
  Also note that it is unwise to use the <CODE>parse()</CODE> method when using
  <CODE>instance()</CODE> because you may end up trying to call it twice, and detecting errors where
  there are none.
  
  <H2><A NAME="parse">parse</A></H2>
  <P>
  The <EM>parse</EM> method does the actual work of parsing the request. It is called for you by
  the accessor methods, so it is not required but can be useful to provide a
  more user-friendly message should an error occur: my <CODE>$r</CODE> =
  shift; my <CODE>$apr</CODE> = Apache::Request-&gt;new($r); my
  <CODE>$status</CODE> = $apr-&gt;parse; unless ($status == OK) {
  $apr-&gt;custom_response($status, $apr-&gt;notes(``error-notes'')); return
  $status; } 
  
  <H2><A NAME="param">param</A></H2>
  <P>
  Get or set request parameters:
  
  <P>
  <PRE>    my $value = $apr-&gt;param('foo');
      my @values = $apr-&gt;param('foo');
      my @params = $apr-&gt;param;
      $apr-&gt;param('foo' =&gt; [qw(one two three)]);
  </PRE>
  <H2><A NAME="upload">upload</A></H2>
  <P>
  Returns a single <EM>Apache::Upload</EM> object in a scalar context or all <EM>Apache::Upload</EM> objects in an array context: 
  
  <P>
  <PRE>    my $upload = $apr-&gt;upload;
      my $fh = $upload-&gt;fh;
      my $lines = 0; 
      while(&lt;$fh&gt;) { 
          ++$lines; 
          ...
      } 
  </PRE>
  <P>
  An optional name parameter can be passed to return the <EM>Apache::Upload</EM>
  object associated with the given name:
  
  <P>
  <PRE>    my $upload = $apr-&gt;upload($name);
  </PRE>
  
  <P>
  <HR>
  <H1><A NAME="Apache_Upload_METHODS">Apache::Upload METHODS</A></H1>
  <H2><A NAME="name">name</A></H2>
  <P>
  The name of the filefield parameter:
  
  <P>
  <PRE>    my $name = $upload-&gt;name;
  </PRE>
  <H2><A NAME="filename">filename</A></H2>
  <P>
  The filename of the uploaded file:
  
  <P>
  <PRE>    my $filename = $upload-&gt;filename;
  </PRE>
  <H2><A NAME="fh">fh</A></H2>
  <P>
  The filehandle pointing to the uploaded file:
  
  <P>
  <PRE>    my $fh = $upload-&gt;fh;
      while (&lt;$fh&gt;) {
          ...
      }
  </PRE>
  <H2><A NAME="size">size</A></H2>
  <P>
  The size of the file in bytes:
  
  <P>
  <PRE>    my $size = $upload-&gt;size;
  </PRE>
  <H2><A NAME="info">info</A></H2>
  <P>
  The additional header information for the uploaded file. Returns a hash
  reference tied to the <EM>Apache::Table</EM> class. An optional <EM>key</EM> argument can be passed to return the value of a given header rather than a
  hash reference. Examples:
  
  <P>
  <PRE>    my $info = $upload-&gt;info;
      while (my($key, $val) = each %$info) {
          ...
      }
  </PRE>
  <P>
  <PRE>    my $val = $upload-&gt;info(&quot;Content-type&quot;);
  </PRE>
  <H2><A NAME="type">type</A></H2>
  <P>
  Returns the <EM>Content-Type</EM> for the given <EM>Apache::Upload</EM> object:
  
  <P>
  <PRE>    my $type = $upload-&gt;type;
      #same as
      my $type = $upload-&gt;info(&quot;Content-Type&quot;);
  </PRE>
  <H2><A NAME="next">next</A></H2>
  <P>
  As an alternative to using the <EM>Apache::Request</EM>  <EM>upload</EM> method in an array context:
  
  <P>
  <PRE>    for (my $upload = $apr-&gt;upload; $upload; $upload = $upload-&gt;next) {
          ...
      }
  </PRE>
  <P>
  <PRE>    #functionally the same as:
  </PRE>
  <P>
  <PRE>    for my $upload ($apr-&gt;upload) {
          ...
      }
  </PRE>
  <H2><A NAME="tempname">tempname</A></H2>
  <P>
  Provides the name of the spool file.
  
  <H2><A NAME="link">link</A></H2>
  <P>
  To avoid recopying the spool file on a Unix-like system,
  <EM>link</EM> will create a hard link to it:
  
  <P>
  <PRE>  my $upload = $apr-&gt;upload('file');
    $upload-&gt;link(&quot;/path/to/newfile&quot;) or
        die sprintf &quot;link from '%s' failed: $!&quot;, $upload-&gt;tempname;
  </PRE>
  <P>
  Typically the new name must lie on the same file system as the spool file.
  Check your system's <CODE>link(2)</CODE> manpage for details.
  
  
  <P>
  <HR>
  <H1><A NAME="SEE_ALSO">SEE ALSO</A></H1>
  <P>
  <CODE>libapreq(3)</CODE>
  
  <P>
  <HR>
  <H1><A NAME="CREDITS">CREDITS</A></H1>
  <P>
  This interface is based on the original pure Perl version by Lincoln Stein.
  
  <P>
  <HR>
  <H1><A NAME="AUTHOR">AUTHOR</A></H1>
  <P>
  Doug MacEachern
  </BODY>
  
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/apreq/index.html
  
  Index: index.html
  ===================================================================
  <html>
  <head>
    <title>libapreq - Generic Apache Request Library</title>
  </head>
  <body bgcolor="#ffffff" text="#000000" link="#0000cc" vlink="#cc00cc" alink="#cc0000">
  
  <img src="../images/apache_sub.gif" width="500" height="62" alt="Apache">
  <h1>libapreq - Generic Apache Request Library</h1>
  
  <p>This package contains modules for manipulating client request
  data via the Apache API with Perl and C. Functionality includes:</p>
  
  <ul>
    <li>parsing of application/x-www-form-urlencoded data</li>
    <li>parsing of multipart/form-data</li>
    <li>parsing of HTTP cookies</li>
  </ul>
  
  <p>You can view the documentation for the C interface <a
  href="libapreq.html">here</a>.
  
  <p>You can view the documentation for the perl interfaces <a
  href="Apache-Request.html">here (Apache::Request and Apache::Upload)</a>
  and <a href="Apache-Cookie.html">here (Apache::Cookie)</a>.
  
  <hr noshade size="1">
  
  <h2>News</h2>
  
  <p><b>June 19, 2001</b> - libapreq-0.33 was released.</p>
  
  <p><b>December 23, 2000</b> - libapreq-0.31_03 was released for testing.</p>
  
  <p><b>December 17, 2000</b> - libapreq-0.31_02 was released for testing.</p>
  
  <hr noshade size="1">
  
  <h2>Downloads</h2>
  
  <p>You can download the latest stable version of libapreq from:</p>
  
  <ul>
    <li><a href="http://www.apache.org/dist/httpd/">http://www.apache.org/dist/httpd/</a></li>
    <li><a href="http://search.cpan.org/search?mode=module&query=libapreq">CPAN</a> ('perl -MCPAN -e "install libapreq"')
  </ul>
  
  <!-- TODO: provide information on getting latest source via public cvs server -->
  
  <p>You can also browse through <a href="http://www.apache.org/websrc/viewcvs.cgi/httpd-apreq/">the CVS repository for libapreq</a>.</p>
  
  <hr noshade size="1">
  
  <h2>Mailing Lists</h2>
  
  <p>There are two mailing lists devoted to the development of libapreq.</p>
  
  <ul>
    <li><a href="mailto:apreq-dev-subscribe@httpd.apache.org">apreq-dev&#64;httpd.apache.org</a> - for discussion about the development of libapreq (low volume)</li>
    <li><a href="mailto:apreq-cvs-subscribe@httpd.apache.org">apreq-cvs&#64;httpd.apache.org</a> - when changes are commited to the cvs repository, cvs log messages are automatically sent to this list (low volume)</li>
  </ul>
  
  <hr noshade size="1">
  
  <small>$Id: index.html,v 1.1 2001/11/21 07:14:16 jerenkrantz Exp $</small>
  
  </table>
  </body>
  </html>
  
  
  
  1.1                  httpd-site/xdocs/apreq/libapreq.html
  
  Index: libapreq.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>libapreq - Apache Request C Library</TITLE>
  <LINK REV="made" HREF="mailto:hackers@FreeBSD.org">
  </HEAD>
  
  <BODY>
  
  <!-- INDEX BEGIN -->
  
  <UL>
  
  	<LI><A HREF="#NAME">NAME</A>
  	<LI><A HREF="#SYNOPSIS">SYNOPSIS</A>
  	<LI><A HREF="#DESCRIPTION">DESCRIPTION</A>
  	<LI><A HREF="#ApacheRequest">ApacheRequest</A>
  	<UL>
  
  		<LI><A HREF="#ApacheRequest_ApacheRequest_new">ApacheRequest *ApacheRequest_new (request_rec *r)</A>
  		<LI><A HREF="#int_ApacheRequest_parse_ApacheR">int ApacheRequest_parse (ApacheRequest *req)</A>
  		<LI><A HREF="#const_char_ApacheRequest_param_">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A>
  		<LI><A HREF="#array_header_ApacheRequest_para">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A>
  		<LI><A HREF="#char_ApacheRequest_params_as_st">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A>
  		<LI><A HREF="#ApacheUpload_upload_ApacheReq">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A>
  	</UL>
  
  	<LI><A HREF="#ApacheUpload">ApacheUpload</A>
  	<UL>
  
  		<LI><A HREF="#ApacheUpload_ApacheUpload_find_">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A>
  		<LI><A HREF="#const_char_ApacheUpload_info_A">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A>
  		<LI><A HREF="#const_char_ApacheUpload_type_A">const char *ApacheUpload_type (ApacheUpload *upload)</A>
  	</UL>
  
  	<LI><A HREF="#ApacheCookie">ApacheCookie</A>
  	<UL>
  
  		<LI><A HREF="#ApacheCookie_ApacheCookie_new_">ApacheCookie *ApacheCookie_new (request_rec *r, ...) </A>
  		<LI><A HREF="#char_ApacheCookie_attr_ApacheC">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val) </A>
  		<LI><A HREF="#ApacheCookieJar_ApacheCookie_pa">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data) </A>
  		<LI><A HREF="#int_ApacheCookieItems_ApacheCoo">int ApacheCookieItems (ApacheCookie *c)</A>
  		<LI><A HREF="#char_ApacheCookieFetch_ApacheC">char *ApacheCookieFetch (ApacheCookie *c, int n)</A>
  		<LI><A HREF="#void_ApacheCookieAdd_ApacheCook">void ApacheCookieAdd (ApacheCookie *c, char *value)</A>
  		<LI><A HREF="#int_ApacheCookieJarItems_Apache">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A>
  		<LI><A HREF="#ApacheCookie_ApacheCookieJarFet">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A>
  		<LI><A HREF="#void_ApacheCookieJarAdd_ApacheC">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A>
  		<LI><A HREF="#char_ApacheCookie_expires_Apac">char *ApacheCookie_expires (ApacheCookie *c, char *time_str) </A>
  		<LI><A HREF="#void_ApacheCookie_bake_ApacheCo">void ApacheCookie_bake (ApacheCookie *c)</A>
  		<LI><A HREF="#char_ApacheCookie_as_string_Ap">char *ApacheCookie_as_string (ApacheCookie *c)  </A>
  	</UL>
  
  	<LI><A HREF="#CREDITS">CREDITS</A>
  	<LI><A HREF="#AUTHOR">AUTHOR</A>
  </UL>
  <!-- INDEX END -->
  
  <HR>
  <P>
  <H1><A NAME="NAME">NAME</A></H1>
  <P>
  libapreq - Apache Request C Library
  
  <P>
  <HR>
  <H1><A NAME="SYNOPSIS">SYNOPSIS</A></H1>
  <P>
  <HR>
  <H1><A NAME="DESCRIPTION">DESCRIPTION</A></H1>
  <P>
  <HR>
  <H1><A NAME="ApacheRequest">ApacheRequest</A></H1>
  <DL>
  <DT><STRONG><A NAME="item_req">req-&gt;parms</A></STRONG><DD>
  <P>
  This field is an Apache <EM>table</EM> that holds the parsed contents of
  <STRONG>GET</STRONG> and <STRONG>POST</STRONG> requests. Example:
  
  <P>
  <PRE> table *data = req-&gt;parms;
   ap_table_set(data, &quot;Key&quot;, &quot;Value&quot;);
  </PRE>
  <DT><STRONG><A NAME="item_req">req-&gt;post_max</A></STRONG><DD>
  <P>
  Limit the size of POST data.  <EM>ApacheRequest_parse</EM> will return an error code if the size is exceeded:
  
  <P>
  <PRE> int status;
   ApacheRequest *req = ApacheRequest_new(r);
  </PRE>
  <P>
  <PRE> req-&gt;post_max = 1204;
   if((status = ApacheRequest_parse(req)) != OK) {
       char *errmsg = ap_table_get(r-&gt;notes, &quot;error-notes&quot;);
       ...
       return status;
   }
  </PRE>
  <DT><STRONG><A NAME="item_req">req-&gt;disable_uploads</A></STRONG><DD>
  <P>
  Disable file uploads.  <EM>ApacheRequest_parse</EM> will return an error code if a file upload is attempted:
  
  <P>
  <PRE> int status;
   ApacheRequest *req = ApacheRequest_new(r);
  </PRE>
  <P>
  <PRE> req-&gt;disable_uploads = 1;
   if((status = ApacheRequest_parse(req)) != OK) {
       char *errmsg = ap_table_get(r-&gt;notes, &quot;error-notes&quot;);
       ...
       return status;
   }
  </PRE>
  <DT><STRONG><A NAME="item_req">req-&gt;temp_dir</A></STRONG><DD>
  <P>
  Sets the directory where upload files are spooled.
  
  <P>
  <PRE>  char dir[] = &quot;/usr/tmp&quot;;
    req-&gt;temp_dir = dir;
  </PRE>
  <DT><STRONG><A NAME="item_req">req-&gt;hook_data</A></STRONG><DD>
  <DT><STRONG><A NAME="item_req">req-&gt;upload_hook</A></STRONG><DD>
  <P>
  Redirects upload data to be processed by the hook.
  
  <P>
  <PRE>  req-&gt;hook_data = (void *) some_struct_pointer;
    req-&gt;upload_hook = (int(*)(void*,char*,int,const ApacheUpload*)) some_function;
  </PRE>
  <P>
  In this case 
  
  <P>
  <PRE>  some_function(req-&gt;hookdata,buffer,bufsize,upload);
  </PRE>
  <P>
  will be called repeatedly during the file upload instead of writing the
  data to a temp file.
  
  </DL>
  <P>
  <HR>
  <H2><A NAME="ApacheRequest_ApacheRequest_new">ApacheRequest *ApacheRequest_new (request_rec *r)</A></H2>
  <P>
  This function creates a new <EM>ApacheRequest</EM> object using the given
  <EM>request_rec</EM> structure:
  
  <P>
  <PRE> ApacheRequest *req = ApacheRequest_new(r);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="int_ApacheRequest_parse_ApacheR">int ApacheRequest_parse (ApacheRequest *req)</A></H2>
  <P>
  If the request method is <STRONG>GET</STRONG> or <STRONG>POST</STRONG>, the query string arguments and the client form data will be read, parsed
  and saved. In addition, if the request method is <STRONG>POST</STRONG> and the <EM>Content-type</EM> is
  <EM>multipart/form-data</EM>, the uploaded files will be written to temporary files which can be
  accessed with the <EM>upload</EM> field names. The return value is <STRONG>OK</STRONG> on success, otherwise an error code that your handler should return.
  
  <P>
  <HR>
  <H2><A NAME="const_char_ApacheRequest_param_">const char *ApacheRequest_param (ApacheRequest *req, const char *key)</A></H2>
  <P>
  This function will return the value of the given parameter <EM>key</EM>:
  
  <P>
  <PRE> const char *value = ApacheRequest_param(req, &quot;Key&quot;);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="array_header_ApacheRequest_para">array_header *ApacheRequest_params (ApacheRequest *req, const char *key)</A></H2>
  <P>
  This function will return an <EM>array_header</EM> of values for the given parameter <EM>key</EM>: 
  
  <P>
  <PRE> array_header *values = ApacheRequest_params(req, &quot;Key&quot;);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="char_ApacheRequest_params_as_st">char *ApacheRequest_params_as_string (ApacheRequest *req, const char *key)</A></H2>
  <P>
  This function will format multi-value parmeters into a comma delimited
  string.
  
  <P>
  <PRE> char *list = ApacheRequest_params_as_string(req, &quot;Key&quot;);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="ApacheUpload_upload_ApacheReq">ApacheUpload *upload = ApacheRequest_upload (ApacheRequest *req)</A></H2>
  <P>
  If the request <EM>Content-type</EM> was that of <EM>multipart/form-data</EM>, this will return an <EM>ApacheUpload</EM> pointer containing the upload data,
  <STRONG>NULL</STRONG> otherwise. See <EM>ApacheUpload</EM>.
  
  <P>
  <PRE> ApacheUpload *upload = ApacheRequest_upload(req);
  </PRE>
  <P>
  <HR>
  <H1><A NAME="ApacheUpload">ApacheUpload</A></H1>
  <P>
  The <EM>ApacheUpload</EM> structure holds all information for all uploaded files and is accessed via
  the <EM>upload</EM> field of an <EM>ApacheRequest</EM>
  structure.  
  
  <DL>
  <DT><STRONG><A NAME="item_upload">upload-&gt;name</A></STRONG><DD>
  <P>
  The name of the filefield parameter:
  
  <P>
  <PRE> char *name = upload-&gt;name;
  </PRE>
  <DT><STRONG><A NAME="item_upload">upload-&gt;filename</A></STRONG><DD>
  <P>
  The name of the upload file as reported by the client:
  
  <P>
  <PRE> char *filename = upload-&gt;filename;
  </PRE>
  <DT><STRONG><A NAME="item_upload">upload-&gt;fp</A></STRONG><DD>
  <P>
  A file pointer to the uploaded file:
  
  <P>
  <PRE> FILE *fp = upload-&gt;fp;
  </PRE>
  <DT><STRONG><A NAME="item_upload">upload-&gt;tempname</A></STRONG><DD>
  <P>
  The name of the temporary upload file on the server:
  
  <P>
  char <CODE>*tempname</CODE> = upload-&gt;tempname;
  
  <DT><STRONG><A NAME="item_upload">upload-&gt;size</A></STRONG><DD>
  <P>
  The size of the uploaded file in bytes:
  
  <P>
  <PRE> long size = upload-&gt;size;
  </PRE>
  <DT><STRONG><A NAME="item_upload">upload-&gt;info</A></STRONG><DD>
  <P>
  The additional header information for the uploaded file:
  
  <P>
  <PRE> table *info = upload-&gt;info;
   const char *type = ap_table_get(info, &quot;Content-type&quot;);
  </PRE>
  <DT><STRONG><A NAME="item_upload">upload-&gt;next</A></STRONG><DD>
  <P>
  Pointer to the next <EM>ApacheUpload</EM> structure if multiple files were uploaded:
  
  <P>
  <PRE>    ApacheUpload *uptr;
      for (uptr = ApacheRequest_upload(req); uptr; uptr = uptr-&gt;next) {
          char *name = uptr-&gt;name;
          FILE *fp   = uptr-&gt;fp;
          ...
      }
  </PRE>
  </DL>
  <P>
  <HR>
  <H2><A NAME="ApacheUpload_ApacheUpload_find_">ApacheUpload *ApacheUpload_find (ApacheUpload *upload, char *name)</A></H2>
  <P>
  Returns the <EM>ApacheUpload</EM> pointer associated with <EM>name</EM> or
  <STRONG>NULL</STRONG> if <EM>name</EM> is not found in the list:
  
  <P>
  <PRE> ApacheUpload *upload = ApacheUpload_find(upload, name);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="const_char_ApacheUpload_info_A">const char *ApacheUpload_info (ApacheUpload *upload, char *key)</A></H2>
  <P>
  Shortcut for accessing the <EM>info</EM> table:
  
  <P>
  <PRE> const char *type = ApacheUpload_info(upload, &quot;Content-Type&quot;);
  </PRE>
  <P>
  <HR>
  <H2><A NAME="const_char_ApacheUpload_type_A">const char *ApacheUpload_type (ApacheUpload *upload)</A></H2>
  <P>
  Shortcut for accessing the uploaded file <EM>Content-Type</EM>:
  
  <P>
  <PRE> const char *type = ApacheUpload_type(upload);
  </PRE>
  <P>
  <HR>
  <H1><A NAME="ApacheCookie">ApacheCookie</A></H1>
  <H2><A NAME="ApacheCookie_ApacheCookie_new_">ApacheCookie *ApacheCookie_new (request_rec *r, ...)</A></H2>
  <P>
  This function creates a new <EM>ApacheCookie</EM> object, using the given
  <EM>request_request</EM> and optional attribute arguments which are as follows:
  
  <DL>
  <DT><STRONG><A NAME="item__name">-name</A></STRONG><DD>
  <P>
  Sets the <EM>name</EM> field to the given value.
  
  <DT><STRONG><A NAME="item__value">-value</A></STRONG><DD>
  <P>
  Adds the value to <EM>values</EM> field.
  
  <DT><STRONG><A NAME="item__expires">-expires</A></STRONG><DD>
  <P>
  Sets the <EM>expires</EM> field to the calculated date string. See <EM>ApacheCookie_expires</EM> for a listing of format options. The default is <STRONG>NULL</STRONG>.
  
  <DT><STRONG><A NAME="item__domain">-domain</A></STRONG><DD>
  <P>
  Sets the <EM>domain</EM> field to the given value. The default is <STRONG>NULL</STRONG>.
  
  <DT><STRONG><A NAME="item__path">-path</A></STRONG><DD>
  <P>
  Sets the <EM>path</EM> field to the given value. The default <EM>path</EM> is derived from the requested <EM>uri</EM>.
  
  <DT><STRONG><A NAME="item__secure">-secure</A></STRONG><DD>
  <P>
  Sets the <EM>secure</EM> field to true or false using a given string value of <EM>On</EM> or <EM>Off</EM>. The default is <EM>Off</EM>.
  
  
  <P>
  Example:
  
  <P>
  <PRE> ApacheCookie *c = ApacheCookie_new(r,
                          &quot;-name&quot;,    &quot;foo&quot;, 
                          &quot;-value&quot;,   &quot;bar&quot;, 
                          &quot;-expires&quot;, &quot;+3M&quot;, 
                          &quot;-domain&quot;,  &quot;.cp.net&quot;, 
                          &quot;-path&quot;,    &quot;/mypath/database&quot;, 
                          &quot;-secure&quot;,  &quot;On&quot;, 
                          NULL); 
  </PRE>
  <H2><A NAME="char_ApacheCookie_attr_ApacheC">char *ApacheCookie_attr (ApacheCookie *c, char *key, char *val)</A></H2>
  <P>
  This function is used to get or set a cookie attribute pair, accepting the
  same attributes as the list above. Example:
  
  <P>
  <PRE> char *name = ApacheCookie_attr(c, &quot;-name&quot;); /* same as c-&gt;name */
   (void *)ApacheCookie_attr(c, &quot;-expires&quot;, &quot;+3h&quot;);
  </PRE>
  <H2><A NAME="ApacheCookieJar_ApacheCookie_pa">ApacheCookieJar *ApacheCookie_parse (request_rec *r, const char *data)</A></H2>
  <P>
  This function parses the given <EM>data</EM> string or the incoming
  <EM>Cookie</EM> header, returning an <EM>ApacheCookieJar</EM> of <EM>ApacheCookie</EM>
  objects.  
  
  <P>
  Example:
  
  <P>
  <PRE> int i;
   ApacheCookieJar *cookies = ApacheCookie_parse(r, NULL);
   for (i = 0; i &lt; ApacheCookieJarItems(cookies); i++) { 
       ApacheCookie *c = ApacheCookieJarFetch(cookies, i);
       int j;
       for (j = 0; j &lt; ApacheCookieItems(c); j++) {
           char *name = c-&gt;name;
           char *value = ApacheCookieFetch(c, j);
           ...
       }
   }
  </PRE>
  <H2><A NAME="int_ApacheCookieItems_ApacheCoo">int ApacheCookieItems (ApacheCookie *c)</A></H2>
  <P>
  The number of values for the given cookie.
  
  <H2><A NAME="char_ApacheCookieFetch_ApacheC">char *ApacheCookieFetch (ApacheCookie *c, int n)</A></H2>
  <P>
  The <EM>n</EM>th value for the given cookie.
  
  <H2><A NAME="void_ApacheCookieAdd_ApacheCook">void ApacheCookieAdd (ApacheCookie *c, char *value)</A></H2>
  <P>
  Add a new value to the cookie.
  
  <H2><A NAME="int_ApacheCookieJarItems_Apache">int ApacheCookieJarItems (ApacheCookieJar *cookies)</A></H2>
  <P>
  The number of cookies in the given cookie jar.
  
  <H2><A NAME="ApacheCookie_ApacheCookieJarFet">ApacheCookie *ApacheCookieJarFetch (ApacheCookieJar *cookies, int n)</A></H2>
  <P>
  The <EM>n</EM>th cookie in the given cookie jar.
  
  <H2><A NAME="void_ApacheCookieJarAdd_ApacheC">void ApacheCookieJarAdd (ApacheCookieJar *cookies, ApacheCookie *c)</A></H2>
  <P>
  Add a new cookie to the cookie jar.
  
  <H2><A NAME="char_ApacheCookie_expires_Apac">char *ApacheCookie_expires (ApacheCookie *c, char *time_str)</A></H2>
  <P>
  This function gets or sets the expiration date for cookie. The following
  forms are all valid for the <EM>time_str</EM> parmeter:
  
  <P>
  <PRE>        +30s                              30 seconds from now 
          +10m                              ten minutes from now 
          +1h                               one hour from now 
          -1d                               yesterday (i.e. &quot;ASAP!&quot;) 
          now                               immediately 
          +3M                               in three months 
          +10y                              in ten years time 
          Thursday, 25-Apr-1999 00:40:33 GMT  at the indicated time &amp; date 
  </PRE>
  <H2><A NAME="void_ApacheCookie_bake_ApacheCo">void ApacheCookie_bake (ApacheCookie *c)</A></H2>
  <P>
  Put cookie in the oven to bake. (Add a <EM>Set-Cookie</EM> header to the outgoing headers table.)
  
  <P>
  <PRE> ApacheCookie_bake(c);
  </PRE>
  <H2><A NAME="char_ApacheCookie_as_string_Ap">char *ApacheCookie_as_string (ApacheCookie *c)</A></H2>
  <P>
  Returns a string version of the cookie:
  
  <P>
  <PRE> ap_table_add(r-&gt;headers_out, &quot;Set-Cookie&quot;, ApacheCookie_as_string(c));
  </PRE>
  
  <P>
  <HR>
  <H1><A NAME="CREDITS">CREDITS</A></H1>
  <P>
  This library is based on Perl modules by Lincoln Stein.
  
  <P>
  <HR>
  <H1><A NAME="AUTHOR">AUTHOR</A></H1>
  <P>
  Doug MacEachern
  
  </BODY>
  
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/contributors/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache Contributors</title>
    </properties>
  <body>
  
  <section>
  <!-- in alphabetical order as of 23 August 2001 -->
  <title>Current Apache HTTP Server Project Members</title>
  
  <p>This page exists to recognize the efforts and contributions of the
  core individuals in the Apache HTTP Server Project.</p>
  
  <table border="0">
  <tr valign="top">
    <th align="left">Contributor</th>
    <th align="left">Activities</th>
  </tr>
  <tr valign="top">
    <td><strong><a href="#behlendorf">Brian Behlendorf</a></strong></td>
    <td>Various, focusing on infrastructure for development.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#bloom">Ryan Bloom</a></strong></td>
    <td>APR and initial work to hybridize Apache..</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#coar">Ken Coar</a></strong></td>
    <td>HTML pedant, FAQ editor, UI perfectionist, bugdb script hacker</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#cox">Mark Cox</a></strong></td>
    <td>Cookie module, Status module, DBM code.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#lars">Lars Eilebrecht</a></strong></td>
    <td>Bug hunter</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#rse">Ralf S. Engelschall</a></strong></td>
    <td>Dr. Cosmetics, mod_rewrite, DSO support, Configure, APACI, apxs, etc.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#jerenkrantz">Justin Erenkrantz</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#fielding">Roy T. Fielding</a></strong></td>
    <td>Standards Cop.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#fanf">Tony Finch</a></strong></td>
    <td>Mass virtual hosting</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#dgaudet">Dean Gaudet</a></strong></td>
    <td>Performance freak.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#hartill">Rob Hartill</a></strong></td>
    <td>general trouble maker, comments to offend all.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#bjh">Brian Havard</a></strong></td>
    <td>OS/2 porting.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#bhyde">Ben Hyde</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#jagielski">Jim Jagielski</a></strong></td>
    <td>Porter and general hacks.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#kasichainula">Manoj Kasichainula</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#kosut">Alexei Kosut</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#kraemer">Martin Kraemer</a></strong></td>
    <td>EBCDIC Port to BS2000 mainframes.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#laurie">Ben Laurie</a></strong></td>
    <td>SCO and QNX porting, Apache-SSL author, pedant.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#minfrin">Graham Leggett</a></strong></td>
    <td>mod_cache, mod_proxy, mod_ldap, mod_headers</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#lerdorf">Rasmus Lerdorf</a></strong></td>
    <td>mod_info, mod_php, mod_php3</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#dougm">Doug MacEachern</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#mirzadeh">Aram W. Mirzadeh</a></strong></td>
    <td>Linux &amp; SCO porting.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#murcko">Chuck Murcko</a></strong></td>
    <td>mod_proxy, porting to various OS</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#orlikowski">Victor J. Orlikowski</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#sameer">Sameer Parekh</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#reder">Paul J. Reder</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#ridruejo">Daniel L&#243;pez Ridruejo</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#wrowe">William A. Rowe, Jr.</a></strong></td>
    <td>WinNT porting and support</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#wsanchez">Wilfredo S&#225;nchez</a></strong></td>
    <td>Mac OS porting</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#skolnick">Cliff Skolnick</a></strong></td>
    <td>Solaris porting.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#slemko">Marc Slemko</a></strong></td>
    <td>Security, networking issues</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#slive">Joshua Slive</a></strong></td>
    <td>Documentation</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#stein">Greg Stein</a></strong></td>
    <td>For now: general pest. Future: WebDAV integration.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#stoddard">Bill Stoddard</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#sutton">Paul Sutton</a></strong></td>
    <td>Documentation writing, code hacking, bug fixing</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#terbush">Randy Terbush</a></strong></td>
    <td>Logo design, bugfixes, NetBSD, BSDI &amp; SunOS porting.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#trawick">Jeff Trawick</a></strong></td>
    <td>Bug fixing</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#vangulik">Dirk van Gulik</a></strong></td>
    <td />
  </tr>
  <tr valign="top">
    <td><strong><a href="#jwoolley">Cliff Woolley</a></strong></td>
    <td />
  </tr>
  </table>
  
  </section>
  
  <section>
  <title>Apache Emeritae (old group members now off doing other things)</title>
  
  <table border="0">
  <tr valign="top">
    <th align="left">Contributor</th>
    <th align="left">Activities</th>
  </tr>
  <tr valign="top">
    <td><strong><a href="#robinson">David Robinson</a></strong></td>
    <td>Patch database, documentation.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#thau">Robert Thau</a></strong></td>
    <td>Designed and implemented module API, did server core overhaul, 
    process pool model, content negotiation, lots and lots of 
    other stuff.</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#wilson">Andrew Wilson</a></strong></td>
    <td />
  </tr>
  </table>
  </section>
  
  <section>
  <title>Other major contributors</title>
  
  <table border="0">
  <tr valign="top">
    <th align="left">Contributor</th>
    <th align="left">Activities</th>
  </tr>
  <tr valign="top">
    <td><strong><a href="#fear">Howard Fear</a></strong></td>
    <td>SSI extensions.</td>
  </tr>
  <tr valign="top">
    <td><strong>Florent Guillaume</strong></td>
    <td>Language Negotiation</td>
  </tr>
  <tr valign="top">
    <td><strong>Koen Holtman</strong></td>
    <td>Rewrite of mod_negotiation</td>
  </tr>
  <tr valign="top">
    <td><strong>Kevin Hughes</strong></td>
    <td>Creator of all those nifty icons</td>
  </tr>
  <tr valign="top">
    <td><strong>Brandon Long and Beth Frank</strong></td>
    <td>NCSA Server Development Team, post-1.3</td>
  </tr>
  <tr valign="top">
    <td><strong>Ambarish Malpani</strong></td>
    <td>Beginning of the NT port</td>
  </tr>
  <tr valign="top">
    <td><strong>Rob McCool</strong></td>
    <td>Original author of NCSA httpd 1.3</td>
  </tr>
  <tr valign="top">
    <td><strong>Paul Richards</strong></td>
    <td>Convinced the group to use remote CVS after 1.0</td>
  </tr>
  <tr valign="top">
    <td><strong><a href="#smiley">Garey Smiley</a></strong></td>
    <td>OS/2 port.</td>
  </tr>
  <tr valign="top">
    <td><strong>Henry Spencer</strong></td>
    <td>Author of the regex library</td>
  </tr>
  </table>
  
  <p>Hundreds of people have made individual contributions to the Apache
  project.  Patch contributors are listed in the src/CHANGES file.
  Frequent contributors have included Petr Lampa, Tom Tromey, James
  H. Cloos Jr., Ed Korthof, Nathan Neulinger, Jason S. Clary, Jason
  A. Dour, Michael Douglass, Brian Havard, Tony Sanders, Brian Tao,
  Michael Smith, Adam Sussman, Nathan Schrenk, Matthew Gray, and John
  Heidemann.</p>
  
  </section>
  
  <section>
  <title>Descriptions</title>
  
  <p>
  <strong>Name:</strong> <a name="behlendorf">Brian Behlendorf</a><br />
  <strong>Email:</strong> <a href="mailto:brian@behlendorf.com">brian@behlendorf.com</a><br />
  <strong>URL:</strong> <a href="http://www.behlendorf.com/">http://www.behlendorf.com</a><br />
  <strong>Organization:</strong> <a href="http://www.collab.net/">Collab.Net</a><br />
  <strong>Occupation:</strong> CTO<br />
  <strong>Location:</strong> San Francisco, CA, USA<br />
  <strong>Comments:</strong> Infrastructure, baby!<br />
  <strong>OS Expertise:</strong> FreeBSD<br />
  <strong>Contributions:</strong> Various, focusing on assisting the development
        process itself.
  </p>
  
  <p>
  <strong>Name:</strong> <a name="bloom">Ryan Bloom</a><br />
  <strong>Email:</strong> <a href="mailto:rbb@apache.org">rbb@apache.org</a><br />
  <strong>URL:</strong> <a href="http://www.ntrnet.net/~rbb">http://www.ntrnet.net/~rbb</a><br />
  <strong>Organization:</strong>Covalent Technologies<br />
  <strong>Occupation:</strong> Software Engineer<br />
  <strong>Location:</strong> Research Triangle Park, NC<br />
  <strong>OS Expertise:</strong> Linux, AIX, Windows <br />
  <strong>Contributions:</strong> Apache Portable Run-Time.  Initial work to make Apache a hybrid model.
  </p>
  
  <p>
  <img src="../images/coar.gif" align="right" alt="[photo]" width="153" height="146" />
  <strong>Name:</strong> <a name="coar">Ken Coar</a><br />
  <strong>Email:</strong> <a href="mailto:coar@Apache.Org">coar@Apache.Org</a><br />
  <strong>URL:</strong> <a href="http://Web.Golux.Com/coar/">http://Web.Golux.Com/coar/</a><br />
  <strong>Organization:</strong> IBM Corporation<br />
  <strong>Occupation:</strong> Software &amp; Web development<br />
  <strong>Location:</strong> Research Triangle Park, North Carolina, USA<br />
  <strong>Comments:</strong> HTML pedant, FAQ editor, UI perfectionist, bugdb script
       hacker<br />
  <strong>OS Expertise:</strong> Digital UNIX, OpenVMS, Linux (RedHat)<br />
  <strong>Contributions:</strong>
       The 1.2 example API module, moderately updated FAQ,
       mod_autoindex and mod_speling enhancements, conditional logging,
       various minor bug fixes and documentation corrections.  Eminently 
       capable of writing code that will Rule The World by consuming
       resources - but in an elegant way.
  <br clear="all" />
  </p>
  
  <p>
  <strong>Name:</strong> <a name="cox">Mark Cox</a><br />
  <strong>email:</strong> <a href="mailto:mark@awe.com">mark@awe.com</a><br />
  <strong>URL:</strong> <a href="http://www.awe.com/mark/">http://www.awe.com/mark/</a><br />
  <strong>Organization:</strong> Red Hat, Inc.<br />
  <strong>Occupation:</strong> Director of Engineering<br />
  <strong>Location:</strong> England<br />
  <strong>Contributions:</strong> Various patches, bug fixes, and DBM code alterations bringing
    Apache in line with what we were using on www.telescope.org.  Cookie
    module.  Server Status module.
    Editor of <a href="http://www.apacheweek.com/">Apache Week</a><br />
  </p>
  
  <p>
  <img src="../images/lars.jpg" align="right" alt="[photo]" width="72" height="102" />
  <strong>Name:</strong> <a name="lars">Lars Eilebrecht</a><br />
  <strong>Email:</strong> <a href="mailto:lars@apache.org">lars@apache.org</a><br />
  <strong>Organization:</strong> Parc Technologies<br />
  <strong>Occupation:</strong> Project Manager<br />
  <strong>Location:</strong> Munich, Germany<br />
  <strong>Comments:</strong> To err is human, but I can <EM>really</EM> foul things up.<br />
  <strong>OS Expertise:</strong> Linux, Solaris<br />
  <strong>Contributions:</strong> Bugs, bug fixes, documentation, binary builds.
  </p>
  
  <p>
  <strong>Name:</strong> <a name="rse">Ralf S. Engelschall</a><br />
  <strong>email:</strong> <a href="mailto:rse@engelschall.com">rse@engelschall.com</a><br />
  <strong>URL:</strong> <a href="http://www.engelschall.com/">http://www.engelschall.com/</a><br />
  <strong>Organization:</strong> Private<br />
  <strong>Occupation:</strong> Cable &amp; Wireless Deutschland GmbH<br />
  <strong>Location:</strong> Munich, Germany<br />
  <strong>Contributions:</strong> Contributor of
      the <EM>URL Rewriting Module</EM> (mod_rewrite),
      the <EM>Dynamic Shared Object</EM> (DSO) support,
      the <EM>Apache Autoconf-style Interface</EM> (APACI),
      the overhauling of the Configure script and Makefile templates
      and various bugfixes and minor features: <EM>Line Continuation</EM> for
      config files, programs for the <EM>Big Symbol Renaming</EM> in April 1998
      (foo -&gt; ap_foo), Reverse Proxy support, etc. In general Ralf is <EM>Dr.
      Cosmetics</EM> at the Apache Group because his opinion is that every type
      of hacking is some sort of art and hence needs to be maximum clean and
      perfect. 
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="jerenkrantz">Justin Erenkrantz</a><br />
  <strong>Email:</strong> jerenkrantz&#64;eBuilt.com<br />
  <strong>URL:</strong> <a href="http://www.erenkrantz.com/">http://www.erenkrantz.com/</a><br />
  <strong>Organization:</strong> <a href="http://www.eBuilt.com/">eBuilt, Inc.</a><br />
  <strong>Occupation:</strong> Software Engineer<br />
  <strong>Location:</strong> Irvine, California<br />
  <strong>Contributions:</strong> Justin does anything that he thinks needs 
      to be done.  He's also to blame for httpd-mbox and flood (in httpd-test).
  </p>
  
  <p>
  <strong>Name:</strong> <a name="fear">Howard Fear</a><br />
  <strong>email:</strong> <a href="mailto:hsf@pageplus.com">hsf@pageplus.com</a><br />
  <strong>URL:</strong> <a href="http://www.pageplus.com/~hsf/">http://www.pageplus.com/~hsf/</a><br />
  <strong>Organization:</strong> NetPlus+, RedCape Policy Software, Inc.<br />
  <strong>Occupation:</strong> Everything software<br />
  <strong>Location:</strong> Colorado<br />
  <strong>Comments:</strong> The story teller makes no choice. Soon you will not hear his voice.
            His job is to shed light, and not to master.<br />
  <strong>Contributions:</strong> SSI extensions and occasional bug fixes<br />
  </p>
  
  
  <p>
  
  <strong>Name:</strong> <a name="fielding">Roy T. Fielding</a><br />
  <strong>Email:</strong> fielding&#64;eBuilt.com<br />
  <strong>URL:</strong> <a href="http://www.ics.uci.edu/~fielding/">
                       http://www.ics.uci.edu/~fielding/</a><br />
  <strong>Organization:</strong> <a href="http://www.eBuilt.com/">eBuilt, Inc.</a><br />
  <strong>Occupation:</strong> Chief Scientist<br />
  <strong>Location:</strong> Irvine, California <br />
  <strong>Contributions:</strong> Roy is the standards cop.
     He keeps the group informed of changes
     to the standards for HTTP, HTML and URI, and makes sure that Apache
     conforms to those worth conforming to.  On a good day,
     he'll even test the code, dabble in software engineering practice,
     submit a few patches, and squeeze out an agenda.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="fanf">Tony Finch</a><br />
  <strong>Email:</strong> <a href="mailto:dot@dotat.at">dot@dotat.at</a><br />
  <strong>URL:</strong> <a href="http://www.apache.org/~fanf/">
                       http://www.apache.org/~fanf/</a><br />
  <strong>Organization:</strong> Covalent Technologies<br />
  <strong>Occupation:</strong> Software Engineer<br />
  <strong>Location:</strong> London<br />
  <strong>Contributions:</strong> Simplified mass virtual hosting<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="dgaudet">Dean Gaudet</a><br />
  <!-- I hate mailto:s because of spiders that collect them for spam -->
  <strong>Email:</strong> dean@apache.org<br />
  <strong>URL:</strong> <a href="http://arctic.org/~dean/">http://arctic.org/~dean/</a><br />
  <strong>Organization:</strong> <a href="http://www.transmeta.com/">Transmeta Corporation</a>
  <br />
  <strong>Occupation:</strong> Member of the Technical Staff<br />
  <strong>Location:</strong> San Francisco, CA, USA<br />
  <strong>Comments:</strong> Performance freak.<br />
  <strong>OS Expertise:</strong> Linux<br />
  <strong>Contributions:</strong>
          Performance/reliability coding, and general bug fixes.  Believes
    in the One True Tab Width of 8 columns.  Known to be a hard-nosed
    pain in the butt.<br />
  </p>
  <p>
  
  <strong>Name:</strong>           <a name="gray">Matthew Gray</a><br />
  <strong>Email:</strong>          <a href="mailto:mkgray@mit.edu">mkgray@mit.edu</a><br />
  <strong>URL:</strong>            http://www.mit.edu/~mkgray/<br />
  <strong>Organization:</strong>        MIT<br />
  <strong>Occupation:</strong>      Research Assistant<br />
  <strong>Location:</strong>       Cambridge, MA, USA<br />
  <strong>Contributions:</strong>  NCSA1.4 logging compatibility modules, miscellaneous patches<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="hartill">Rob Hartill</a><br />
  <strong>Email:</strong> <a href="mailto:robh@imdb.com">robh@imdb.com</a><br />
  <strong>URL:</strong> <a href="http://us.imdb.com/">IMDb</a><br />
  <strong>Organization:</strong> Los Alamos National Laboratory &amp; Internet Movie Database.<br />
  <strong>Occupation:</strong> Post-doc PERL guru<br />
  <strong>Location:</strong> Los Alamos, New Mexico, Good Old US of A<br />
  <strong>Comments:</strong> write it in PERL<br />
  </p>
  
  <p>
  
  <strong>Name:</strong>    <a name="bjh">Brian Havard</a><br />
  <strong>Email:</strong>    <a href="mailto:bjh@apache.org">bjh@apache.org</a><br />
  <strong>URL:</strong>    <a href="http://silk.apana.org.au">http://silk.apana.org.au</a><br />
  <strong>Occupation:</strong>  Software Engineer<br />
  <strong>OS Expertise:</strong>  OS/2<br />
  <strong>Location:</strong>   Melbourne, Australia<br />
  <strong>Contributions:</strong>  Maintenance of <a href="http://silk.apana.org.au/apache/">OS/2 port</a><br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="bhyde">Ben Hyde</a><br />
  <strong>Organization:</strong> <a href="http://www.gensym.com">Gensym</a>.<br />
  <strong>Occupation:</strong> Principle Engineer<br />
  <strong>Location:</strong> Cambridge, Massachusetts<br />
  <strong>Comments:</strong> Beware of antinomian mysticism<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="jagielski">Jim Jagielski</a><br />
  <strong>Email:</strong> <a href="mailto:jim@jaguNET.com">jim@jaguNET.com</a><br />
  <strong>URL:</strong> <a href="http://www.jaguNET.com/jim.html">http://www.jaguNET.com/jim.html</a><br />
  <strong>Organization:</strong> <a href="http://www.jaguNET.com/">jaguNET Access Services, LLC</a><br />
  <strong>Occupation:</strong> ISP and Web Hosting/Design firm<br />
  <strong>Location:</strong> Forest Hill, Maryland, USA<br />
  <strong>OS Expertise:</strong> FreeBSD and various SysV flavors<br />
  <strong>Contributions:</strong> Started off with the A/UX port;
      added SysV shared memory support for the scoreboard; flock mutexes;
      several mod_status updates such as bytes/requests counters and making
      ExtendedStatus runtime instead of compile-time; the second main revision
      of Configure, including the concept/implementation of Rules, most of the
      big main "helper" scripts and auto-OS detection; some new directives;
      various fixes/hacks and lately coordinating the Releases.
      General porter, coder and trouble maker. Plays "devil's
      advocate" a bit too often <TT>:-)</TT><br />
  </p>
  
  <p>
  <strong>Name:</strong> <a name="kasichainula">Manoj Kasichainula</a><br />
  <strong>Email:</strong> <a href="mailto:manojk+apachepages@io.com">manojk@io.com</a><br />
  <strong>URL:</strong> <a href="http://www.io.com/~manojk/">http://www.io.com/~manojk/</a><br />
  <strong>Organization:</strong> Collab.Net<br />
  <strong>Occupation:</strong> Senior Software Developer<br />
  <strong>Location:</strong> San Francisco, CA, USA<br />
  <strong>OS Expertise:</strong> Linux, various Unixes<br />
  <strong>Contributions:</strong> Initial pthread hybrid server work,
      Dexter MPM, 2.0 status API, other 2.0 stuff, arguing with Ryan<br />
  <strong>Comments:</strong> I am the one responsible for killing children with a pipe.<br />
  </p>
  <p>
  
  
  <strong>Name:</strong> <a name="kosut">Alexei Kosut</a><br />
  <strong>Email:</strong> <a href="mailto:akosut@stanford.edu">akosut@stanford.edu</a><br />
  <strong>URL:</strong> <a href="http://www.stanford.edu/~akosut/">http://www.stanford.edu/~akosut/</a><br />
  <strong>Organization:</strong> Stanford University<br />
  <strong>Occupation:</strong> Student<br />
  <strong>Location:</strong> Stanford, California<br />
  <strong>Contributions:</strong> Introduces a lot of bugs someone else
  has to fix: Initial support for keepalive, HTTP/1.1, name-based
  virtual hosts. Original author of mod_actions, mod_digest,
  mod_isapi, mod_jserv, mod_proxy, mod_speling. Partly at fault for the
  Win32 port. Apparently really likes free T-shirts.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="kraemer">Martin Kraemer</a><br />
  <strong>Email:</strong> Martin.Kraemer&#64;mchp.siemens.de<br />
  <strong>Organization:</strong> <a href="http://www.fujitsu-siemens.com/">Fujitsu-Siemens Computers</a><br />
  <strong>Occupation:</strong> Software Development Engineer<br />
  <strong>Location:</strong> Munich, Germany<br />
  <strong>Comments:</strong> I like portable code that's easily understood.<br />
  <strong>Contributions:</strong> Various proxy patches, the BS2000 EBCDIC port, SVR4 patches<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="laurie">Ben Laurie</a><br />
  <strong>Email:</strong> <a href="mailto:ben@algroup.co.uk">ben@algroup.co.uk</a><br />
  <strong>URL:</strong> <a href="http://www.algroup.co.uk/">http://www.algroup.co.uk/</a><br />
  <strong>Organization:</strong> A.L. Digital Ltd<br />
  <strong>Occupation:</strong> Freelance Consultant and Technical Director<br />
  <strong>Location:</strong> London, England<br />
  <strong>OS Expertise:</strong> SCO, QNX, SGI, Windows (all flavours), DOS<br />
  <strong>Contribution:</strong> Apache-SSL, extensive debate on escaping characters, and the odd bug fix.<br />
  <strong>Comments:</strong> What am I doing here?<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="minfrin">Graham Leggett</a><br />
  <strong>Email:</strong> <a href="mailto:minfrin@apache.org">minfrin@apache.org</a><br />
  <strong>Occupation:</strong> Freelance Consultant / Multiple Hat Wearer <br />
  <strong>Location:</strong> Johannesburg, South Africa<br />
  <strong>OS Expertise:</strong> Linux, Solaris<br />
  <strong>Contribution:</strong> Designed mod_cache, hacked and chopped on
  mod_proxy, mod_ldap and mod_headers for v2.0.<br />
  <strong>Comment:</strong> No comment.<br />
  <br clear="all" />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="lerdorf">Rasmus Lerdorf</a><br />
  <strong>Email:</strong> <a href="mailto:rasmus@apache.org">rasmus@apache.org</a><br />
  <strong>URL:</strong> <a href="http://www.lerdorf.on.ca/">http://www.lerdorf.on.ca/</a><br />
  <strong>Company:</strong> IBM Corporation<br />
  <strong>Occupation:</strong> Senior Software Engineer<br />
  <strong>Location:</strong> Research Triangle Park, NC<br />
  <strong>OS Expertise:</strong> Solaris, Linux<br />
  <strong>Contribution:</strong> Wrote mod_info module included in the
     distribution, as well as mod_php which is available separately from 
  <a href="http://www.php.net">www.php.net</a>.<br />
  <br clear="all" />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="ridruejo">Daniel L&#243;pez Ridruejo</a><br />
  <strong>email:</strong> ridruejo@apache.org<br />
  <strong>Location:</strong> San Francisco, CA, USA <br />
  <strong>Contributions:</strong> <a href="http://comanche.com.dtu.dk/">Comanche</a>
  </p>
  
  
  <p>
  
  
  <strong>Name:</strong> <a name="dougm">Doug MacEachern</a><br />
  <strong>email:</strong> dougm@pobox.com<br />
  <strong>Organization:</strong> <a href="http://www.itixs.com/">iTixs</a><br /> 
  <strong>Occupation:</strong> Senior Software Engineer <br />
  <strong>Location:</strong> San Francisco, CA, USA <br />
  <strong>Contributions:</strong> <a href="http://perl.apache.org/">mod_perl</a>,
  various API additions
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="mirzadeh">Aram W. Mirzadeh</a><br />
  <strong>email:</strong> <a href="mailto:awm@li-fish.net">awm@li-fish.net</a><br />
  <strong>URL:</strong> <br />
  <strong>Organization:</strong> <br />
  <strong>Occupation:</strong> <br />
  <strong>Location:</strong> <br />
  <strong>Comment:</strong> To err is human, to really screw up you need a computer.<br />
  <strong>OS Expertise:</strong> Linux &amp; SCO<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="murcko">Chuck Murcko</a><br />
  <strong>Email:</strong> <a href="mailto:chuck@topsail.org">chuck@topsail.org</a><br />
  <strong>URL:</strong> <a href="http://www.topsail.org/">http://www.topsail.org/</a><br />
  <strong>Organization:</strong> Topsail Group<br />
  <strong>Occupation:</strong> Grinder<br />
  <strong>Location:</strong> West Chester PA USA<br />
  <strong>Comments:</strong> Tinkero ergo sum<br />
  <strong>OS Expertise:</strong> UnixWare, IRIX (secondarily) FreeBSD, BSDI, Solaris<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="orlikowski">Victor J. Orlikowski</a><br />
  <strong>Email:</strong> <a href="mailto:orlikowski@apache.org">orlikowski@apache.org</a><br />
  <strong>URL:</strong> <br />
  <strong>Organization:</strong> IBM<br />
  <strong>Occupation:</strong> DSO fiend<br />
  <strong>Location:</strong> Durham, NC USA<br />
  <strong>Comments:</strong> Someday, apachectl will be an emacs mode.<br />
  <strong>OS Expertise:</strong> Linux, AIX<br />
  </p>
  <p>
  
  
  <strong>Name:</strong> <a name="sameer">Sameer Parekh</a><br />
  <strong>Email:</strong> <a href="mailto:sameer@c2.net">sameer@c2.net</a><br />
  <strong>URL:</strong> <a href="http://www.c2.net/~sameer/">http://www.c2.net/~sameer/</a><br />
  <strong>Organization:</strong> C2Net Software, Inc.<br />
  <strong>Occupation:</strong> Management (whee)<br />
  <strong>Location:</strong> Oakland, CA, USA<br />
  <strong>Contribution:</strong> Bugfixes, documentation, website,
  administrative/legal, various binary builds as needed<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="reder">Paul J. Reder</a><br />
  <strong>Email:</strong> <a href="mailto:rederpj@raleigh.ibm.com">rederpj@raleigh.ibm.com</a><br />
  <strong>Organization:</strong> IBM Corp.<br />
  <strong>Occupation:</strong> Programmer, Software Engineer, Coder, hacker, whatever...<br />
  <strong>Location:</strong> Research Triangle Park, NC, USA<br />
  <strong>OS Expertise:</strong> Linux, Unix, OS/2, others.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="richards">Paul Richards</a><br />
  <strong>Email:</strong> <a href="mailto:paul@FreeBSD.org">paul@FreeBSD.org</a><br />
  <strong>URL:</strong> <a href="http://www.freebsd.org/~paul">http://www.freebsd.org/~paul</a><br />
  <strong>Organization:</strong> Bluebird Computer Systems. FreeBSD core team member.<br />
  <strong>Occupation:</strong> <br />
  <strong>Location:</strong> UK<br />
  <strong>Comments:</strong> <br />
  <strong>OS Expertise:</strong> FreeBSD<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="wrowe">William A. Rowe, Jr. (a.k.a. wrowe, OtherBill)</a><br />
  <strong>Email:</strong> <a href="mailto:wrowe@apache.org">wrowe@apache.org</a><br />
  <strong>URL:</strong> <a href="http://dev.apache.org/wrowe/">http://dev.apache.org/wrowe/</a><br />
  <strong>Organization:</strong> Covalent<br />
  <strong>Occupation:</strong> Software Architect; Development and Integration<br />
  <strong>Location:</strong> Gurnee, IL, US<br />
  <strong>Contributions:</strong> Bashing on the Win32 Apache kernel for fun and profit.<br />
  
  </p>
  <p>
  
  <strong>Name:</strong> <a name="wsanchez">Wilfredo S&#225;nchez</a><br />
  <strong>Email:</strong> <a href="mailto:wsanchez@apache.org">wsanchez@apache.org</a><br />
  <strong>URL:</strong> <a href="http://www.mit.edu/people/wsanchez/">http://www.mit.edu/people/wsanchez/</a><br />
  <strong>Organization:</strong> Apple Computer, Inc.<br />
  <strong>Occupation:</strong> Software Engineer<br />
  <strong>Location:</strong> Cupertino, CA, USA<br />
  <strong>OS Expertise:</strong> Mac OS X, *BSD<br />
  <strong>Contribution:</strong> Mac OS X port, build fixes.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="robinson">David Robinson</a><br />
  <strong>Email:</strong> <a href="mailto:drtr@ast.cam.ac.uk">drtr@ast.cam.ac.uk</a><br />
  <strong>URL:</strong><br />
  <strong>Organization:</strong> University of Cambridge<br />
  <strong>Occupation:</strong> Astronomer<br />
  <strong>Location:</strong> Cambridge, UK<br />
  <strong>Comments:</strong> <br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="skolnick">Cliff Skolnick</a><br />
  <strong>email:</strong> <a href="mailto:cliff@steam.com">cliff@steam.com</a><br />
  <strong>URL:</strong> <a href="http://www.steam.com/~cliff/">http://www.steam.com/~cliff/</a><br />
  <strong>Organization:</strong> steam.com<br />
  <strong>Occupation:</strong> Network/Unix Consultant<br />
  <strong>Location:</strong> San Francisco, CA, USA<br />
  <strong>Comments:</strong> <br />
  <strong>OS Expertise:</strong> Solaris, *BSD<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="slemko">Marc Slemko</a><br />
  <strong>email:</strong> marcs@znep.com<br />
  <strong>Occupation:</strong> Software Engineer / General Irritant<br />
  <strong>Location:</strong> Seattle, WA, USA<br />
  <strong>Contributions:</strong> Security patches, bug hunting and debugging 
  of networking issues.<br />
  <strong>OS Expertise:</strong>*BSD, Solaris, Linux<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="slive">Joshua Slive</a><br />
  <strong>email:</strong> joshua@slive.ca<br />
  <strong>URL:</strong> <a href="http://slive.ca/">http://slive.ca/</a><br />
  <strong>Location:</strong> Montreal, Quebec, Canada<br />
  <strong>Contributions:</strong> Documentation
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="smiley">Garey Smiley</a><br />
  <strong>Email:</strong> <a href="mailto:garey@slink.com">garey@slink.com</a><br />
  <strong>URL:</strong> <a href="http://www.slink.com/">http://www.slink.com/</a><br />
  <strong>Organization:</strong> SoftLink Services<br />
  <strong>Occupation:</strong> Consultant in cross platform applications and web development.<br />
  <strong>Location:</strong> Akron, Ohio USA<br />
  <strong>Comments:</strong> If you can't do UNIX do OS/2.<br />
  <strong>OS Expertise:</strong> OS/2, Win32s, Windows NT, and UNIX.<br />
  <strong>Contributions:</strong> OS/2 port of Apache. See the OS/2 specific pages at
  <a href="http://www.slink.com/ApacheOS2/">http://www.slink.com/ApacheOS2/</a><br />
  </p>
  
  <p>
  
  <img src="../images/stein.jpg" align="right" alt="[photo]" width="75" height="105" />
  <strong>Name:</strong> <a name="stein">Greg Stein</a><br />
  <strong>Email:</strong> <a href="mailto:gstein@lyra.org">gstein@lyra.org</a><br />
  <strong>URL:</strong> <a href="http://www.lyra.org/">http://www.lyra.org/</a><br />
  <strong>Occupation:</strong> Non-employed Open Source Developer<br />
  <strong>Location:</strong> Palo Alto, CA, USA<br />
  <strong>OS Expertise:</strong> Linux<br />
  <strong>Comments:</strong> <a href="http://www.python.org/">Python</a> rules!<br />
  <strong>Contributions:</strong> Minor tweaks and fixes. Code review. One day, I'll join the Big Boys.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="stoddard">Bill Stoddard</a><br />
  <strong>Email:</strong> <a href="mailto:wgstodda@us.ibm.com">wgstodda@us.ibm.com</a><br />
  <strong>URL:</strong> <a href="http://www.software.ibm.com/webservers/">http://www.software.ibm.com/webservers/</a><br />
  <strong>Organization:</strong> IBM Corp.<br />
  <strong>Occupation:</strong> Software Development Engineer<br />
  <strong>Location:</strong> Research Triangle Park, NC, USA<br />
  <strong>OS Expertise:</strong> AIX, Windows NT<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="sutton">Paul Sutton</a><br />
  <strong>Email:</strong> <a href="mailto:pcs@apache.org">pcs@apache.org</a><br />
  <strong>URL:</strong> <a href="http://www.awe.com/~paul/"> http://www.awe.com/~paul/ <br /></a>
  <strong>Location:</strong> Seattle, USA<br />
  <strong>Comments:</strong> I like documenting things, I really do. Why are you wearing white suits?<br />
  <strong>Contributions:</strong>
  Long time Apache convert (fixed a bug in version 0.5.2). Actually
  likes documentation and commenting source. Contributions include some
  content negotiation stuff, various bug fixes and testing, mod_headers,
  multiple log files, options +/-. Edited <a
  href="http://www.apacheweek.com/">Apache Week</a> until 1999.
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="terbush">Randy Terbush</a><br />
  <strong>Email:</strong> <a href="mailto:randy@covalent.net">randy@covalent.net</a><br />
  <strong>URL:</strong> <a href="http://www.covalent.net/">http://www.covalent.net/</a><br />
  <strong>Organization:</strong> Covalent Technologies<br />
  <strong>Occupation:</strong> Network Administration<br />
  <strong>Location:</strong> Lincoln, NE, USA<br />
  <strong>Comments:</strong> <br />
  <strong>OS Expertise:</strong> *BSD<br />
  </p>
  
  <p>
  
  
  <strong>Name:</strong> <a name="thau">Robert Thau</a><br />
  <strong>Email:</strong> <a href="mailto:rst@ai.mit.edu">rst@ai.mit.edu</a><br />
  <strong>URL:</strong> <a href="http://www.ai.mit.edu/people/rst/rst.html">http://www.ai.mit.edu/people/rst/rst.html</a><br />
  <strong>Organization:</strong> MIT Artificial Intelligence Lab<br />
  <strong>Occupation:</strong> grad student &amp; random hacker<br />
  <strong>Location:</strong> Boston, Mass., USA<br />
  <strong>Contributions:</strong> Designed the module interface, and the internal data structures
    which support it, and adapted the first (and somewhat less than
    perfect ;-) versions of the modules providing functionality
    equivalent to Apache 0.6, starting from an early version of Rob
    Hartill's 0.7 work.  Also designed and wrote large portions of the
    current server core from scratch (alloc.c, http_config.c,
    http_core.c, and portions of other files), again adapting the rest
    from 0.7, to produce the first versions of what became Apache
    0.8/1.0 (then called Shambhala), after further work by the rest of
    the group.  Various other contributions include the original Apache
    0.6 content negotiation code, the SpareServers machinery (for better
    or worse), the experimental (as of 0.8/1.0) dld module and LogFormat
    support, and the 0.8/1.0 Configuration script.<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="trawick">Jeff Trawick</a><br />
  <strong>Email:</strong> <a href="mailto:trawick@apache.org">trawick@apache.org</a><br />
  <strong>Organization:</strong> IBM<br />
  <strong>Occupation:</strong> Apache developer<br />
  <strong>Location:</strong> Research Triangle Park, NC, USA<br />
  </p>
  
  <p>
  
  <strong>Name:</strong> <a name="vangulik">Dirk-Willem van Gulik</a><br />
  <strong>Email:</strong> <a href="mailto:dirkx@webweaving.org">dirkx@webweaving.org</a><br />
  <strong>URL:</strong> <a href="http://www.webweaving.org">http://www.webweaving.org</a><br />
  <strong>Organization:</strong>WebWeaving Consultancy<br />
  <strong>Occupation:</strong> Internet consultant/contractor<br />
  <strong>Location:</strong> <a href="http://www.ceo.org/geotool/newserver/centeurmap/centeurdisp.pl?156,242">Sunny Italy</a><br />
  <strong>Contributions:</strong>
          Full time web development for various remote sensing related projects; playing
          around with mSQL and Cookies access control for apache (and wu-ftpd). Dreamt
          up the silly anonymous scheme to allow user tracking which works with almost
          any client. Like to play around with the language tags. <br />
  <strong>Comments:</strong> But still prefer walking and sailing in this beautiful part of Europe.<br />
  </p>
  
  <p>
  <strong>Name:</strong> <a name="wilson">Andrew Wilson</a><br />
  <strong>Email:</strong> <a href="mailto:Andrew.Wilson@cm.cf.ac.uk">Andrew.Wilson@cm.cf.ac.uk</a><br />
  <strong>URL:</strong> <a href="http://www.cm.cf.ac.uk/User/Andrew.Wilson/"> http://www.cm.cf.ac.uk/User/Andrew.Wilson/<br /></a>
  <strong>Organization:</strong> REED Elsevier Science<br />
  <strong>Occupation:</strong> Internet Consultant<br />
  <strong>Location:</strong> Oxford, UK<br />
  <strong>Comments:</strong> I'm really looking forward to this hangover.<br />
  </p>
  
  <p>
  <strong>Name:</strong> <a name="jwoolley">Cliff Woolley</a><br />
  <strong>Email:</strong> <a href="mailto:cliffwoolley@yahoo.com">cliffwoolley@yahoo.com</a><br />
  <strong>URL:</strong> <a href="http://www.wlu.edu/~jwoolley">http://www.wlu.edu/~jwoolley</a><br />
  <strong>Organization:</strong> University of Virginia<br />
  <strong>Occupation:</strong> Graduate Student<br />
  <strong>Location:</strong> Charlottesville, VA<br />
  <strong>Contributions:</strong> bugfixes, occasional API work<br />
  </p>
  
  <hr />
  
  <H3>And a special thanks to <a
  href="http://people.netscape.com/robm/index.html">Rob McCool</a> and the
  team at NCSA for the original httpd source code, which provided a
  solid base for Apache's development.</H3>
  
  </section>
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  *.Z
  *.gz
  *.tar
  cgi-bin-old
  dist
  docs
  from-cvs
  incoming
  mail
  manual
  newpatch
  patches
  patchgen
  presentation
  test
  .counts
  .message
  
  
  
  1.1                  httpd-site/xdocs/dev/404.html
  
  Index: 404.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Sorry! Invalid URL</TITLE>
  </HEAD>
  <BODY>
  
  <H1>Sorry! Couldn't find it</H1>
  
  <P>Hyperreal's primary web server was unable to find whatever it was you 
  were looking for.  There are two reasons why this may have happened:
  </P>
  
  <OL>
  
  <LI><STRONG>You attempted to access a URL that is not valid here.</STRONG>
  Double-check the URL for typos.  Perhaps the correct URL has changed from
  what it used to be, or perhaps whoever referred you to this URL got it
  wrong.  Try going to the <A HREF="http://hyperreal.com/">Hyperreal home 
  page</A> if all else fails, and begin searching from there.
  
  <BR><BR>
  
  <LI><STRONG>You were attempting to access a URL through a non-standard port,
  but your network access provider is running a firewall or proxy cache
  server that is stripping the port number from the URL.</STRONG> For example,
  you may have tried to access :2000 but the firewall or cache is submitting
  the URL without the port number.  If you were attempting to access an http
  URL via :70, <EM>USE PORT 2000 INSTEAD</EM>.  If you were attempting to
  access port 2000 and received this message, it is definitely a proxy cache
  server or firewall problem, and you should consult with your network
  access provider. 
  
  <!--#if expr="!\"$HTTP_HOST\"" -->
  
  <BR><BR>
  <LI><STRONG>Your browser does not support the Host: header - thus you may
  have been trying to access a page which exists on one of Hyperreal's
  web sites but not another, and the server couldn't tell which one you
  wanted</STRONG>.  You can follow the links below to get to the content from
  their respective home pages, but we recommend you upgrade your browser.
  
  <!--#include virtual="/home/vhosts.html" -->
  
  <!--#endif --> 
  
  </OL>
  
  <P>
  A <A HREF="http://www.hyperreal.com/map.html">Brief Map/Index of This Site</A> is available.
  </P>
  
  <P>
  Good Luck!   <EM>--The Hyperreal Staff</EM>
  </P>
  
  </BODY>
  </HTML>
  
  
  
  
  1.1                  httpd-site/xdocs/dev/API-dict.html
  
  Index: API-dict.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
    <TITLE>Apache Web server API Dictionary
    </TITLE>
   </HEAD>
   <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  <!--#include virtual="header.html" -->
    <H1 ALIGN="CENTER">
     Apache Web server API Dictionary
    </H1>
    <BLOCKQUOTE>
     <STRONG>
      This file is very much under construction.  You should not take
      anything you find in it at face value.
     </STRONG>
    </BLOCKQUOTE>
  
  <!--
  	Each symbol is defined as a link target.  The name of the target
  	is *identical* to the symbol, including upper- and lower-case
  	spelling.
  
  	Each definition that references an Apache structure type must
  	make the reference into a link to the type's definition.
  
  API_EXPORT_NONSTD(int) ap_bprintf(BUFF *fb, const char *fmt, ...)
  API_EXPORT(char *) ap_canonical_filename(pool *p, const char *file)
  API_EXPORT(mutex *) ap_create_mutex(char *name)
  API_EXPORT(void) ap_destroy_mutex(mutex *mutex_id)
  API_EXPORT(char *) ap_escape_quotes(pool *, const char *)
  API_EXPORT(const char *) ap_get_server_built(void)
  API_EXPORT(const char *) ap_get_server_version(void)
  API_EXPORT(void) ap_log_error_old(const char *err, server_rec *s)
  API_EXPORT(char *) ap_md5(pool *a, unsigned char *string)
  API_EXPORT(char *) ap_md5contextTo64(pool *p, AP_MD5_CTX * context)
  API_EXPORT(char *) ap_md5digest(pool *p, FILE *infile)
  API_EXPORT(mutex *) ap_open_mutex(char *name)
  API_EXPORT(int) ap_parse_hostinfo_components(pool *p, const char *hostinfo, uri_components *uptr)
  API_EXPORT_NONSTD(char *) ap_psprintf(struct pool *, const char *fmt, ...)
  API_EXPORT(char *) ap_pvsprintf(struct pool *, const char *fmt, va_list)
  API_EXPORT(int) ap_release_mutex(mutex *mutex_id)
  API_EXPORT(int) ap_snprintf(char *, size_t, const char *, ...)
  
  -->
  <!-- DO NOT EDIT BELOW THIS LINE.  The contents of this file between -->
  <!-- the sentinel lines is generated by a script, so any edits here  -->
  <!-- will be lost the next time the script is run.                   -->
  <!-- %%BEGIN%% -->
    <H2>Table of Contents</H2>
    <UL>
     <LI><A HREF="#Routines">Routine Descriptions</A>
     </LI>
     <LI><A HREF="#Structures">Data Structure Definitions</A>
     </LI>
     <LI><A HREF="#Cells">Global Data Cells</A>
     </LI>
     <LI><A HREF="#Constants">Constant Definitions</A>
     </LI>
    </UL>
    <HR>
    <H2>
     <A NAME="Routines">
      Routine Descriptions
     </A>
    </H2>
    <HR>
    <H3>
     <A NAME="ap_acquire_mutex">
      ap_acquire_mutex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_acquire_mutex(<A HREF="#mutex">mutex</A> *mutex_id);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_create_mutex"><SAMP>ap_create_mutex</SAMP></A>,
          <A HREF="#ap_destroy_mutex"><SAMP>ap_destroy_mutex</SAMP></A>,
          <A HREF="#ap_open_mutex"><SAMP>ap_open_mutex</SAMP></A>,
          <A HREF="#mutex"><SAMP>mutex</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_add_cgi_vars">
      ap_add_cgi_vars
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_add_cgi_vars(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_add_common_vars">
      ap_add_common_vars
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_add_common_vars(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_add_module">
      ap_add_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_add_module(<A HREF="#module">module</A> *m);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_add_named_module"><SAMP>ap_add_named_module</SAMP></A>,
          <A HREF="#core_module"><SAMP>core_module</SAMP></A>,
          <A HREF="#module"><SAMP>module</SAMP></A>,
          <A HREF="#top_module"><SAMP>top_module</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_add_named_module">
      ap_add_named_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_add_named_module(const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_add_module"><SAMP>ap_add_module</SAMP></A>,
          <A HREF="#core_module"><SAMP>core_module</SAMP></A>,
          <A HREF="#module"><SAMP>module</SAMP></A>,
          <A HREF="#top_module"><SAMP>top_module</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_add_per_dir_conf">
      ap_add_per_dir_conf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_add_per_dir_conf(<A HREF="#server_rec">server_rec</A> *s, void *dir_config);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_add_per_url_conf">
      ap_add_per_url_conf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_add_per_url_conf(<A HREF="#server_rec">server_rec</A> *s, void *url_config);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_allow_options">
      ap_allow_options
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_allow_options(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_allow_overrides">
      ap_allow_overrides
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_allow_overrides(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_append_arrays">
      ap_append_arrays
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#array_header">array_header</A> *ap_append_arrays(<A HREF="#pool">pool</A> *p, const <A HREF="#array_header">array_header</A> *a, const <A HREF="#array_header">array_header</A> *);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_array_cat">
      ap_array_cat
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_array_cat(<A HREF="#array_header">array_header</A> *dst, const <A HREF="#array_header">array_header</A> *src);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_auth_name">
      ap_auth_name
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_auth_name(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_auth_type">
      ap_auth_type
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_auth_type(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_basic_http_header">
      ap_basic_http_header
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_basic_http_header(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bclose">
      ap_bclose
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bclose(<A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bcreate">
      ap_bcreate
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#BUFF">BUFF</A> *ap_bcreate(<A HREF="#pool">pool</A> *p, int flags);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bfilbuf">
      ap_bfilbuf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bfilbuf(<A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bfileno">
      ap_bfileno
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bfileno(<A HREF="#BUFF">BUFF</A> *fb, int direction);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bflsbuf">
      ap_bflsbuf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bflsbuf(int c, <A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bflush">
      ap_bflush
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bflush(<A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bgetopt">
      ap_bgetopt
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bgetopt(<A HREF="#BUFF">BUFF</A> *fb, int optname, void *optval);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bgets">
      ap_bgets
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bgets(char *s, int n, <A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bhalfduplex">
      ap_bhalfduplex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_bhalfduplex(<A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_block_alarms">
      ap_block_alarms
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_block_alarms(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_blookc">
      ap_blookc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_blookc(char *buff, <A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bnonblock">
      ap_bnonblock
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bnonblock(<A HREF="#BUFF">BUFF</A> *fb, int direction);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bonerror">
      ap_bonerror
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_bonerror(<A HREF="#BUFF">BUFF</A> *fb, void (*error) (<A HREF="#BUFF">BUFF</A> *b, int, void *), void *data);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bprintf">
      ap_bprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bprintf(<A HREF="#BUFF">BUFF</A> *fb, const char *fmt, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bpushfd">
      ap_bpushfd
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_bpushfd(<A HREF="#BUFF">BUFF</A> *fb, int fd_in, int fd_out);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bputs">
      ap_bputs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bputs(const char *x, <A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bread">
      ap_bread
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bread(<A HREF="#BUFF">BUFF</A> *fb, void *buf, int nbyte);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bsetflag">
      ap_bsetflag
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bsetflag(<A HREF="#BUFF">BUFF</A> *fb, int flag, int value);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bsetopt">
      ap_bsetopt
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bsetopt(<A HREF="#BUFF">BUFF</A> *fb, int optname, const void *optval);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bskiplf">
      ap_bskiplf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bskiplf(<A HREF="#BUFF">BUFF</A> *fb);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bvputs">
      ap_bvputs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bvputs(<A HREF="#BUFF">BUFF</A> *fb, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bwrite">
      ap_bwrite
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_bwrite(<A HREF="#BUFF">BUFF</A> *fb, const void *buf, int nbyte);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bytes_in_free_blocks">
      ap_bytes_in_free_blocks
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_bytes_in_free_blocks(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_bytes_in_pool">
      ap_bytes_in_pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_call_exec">
      ap_call_exec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_call_exec(<A HREF="#request_rec">request_rec</A> *r, char *argv0, char **env, int shellcmd);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_can_exec">
      ap_can_exec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_can_exec(const struct stat *fstat);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_cfg_closefile">
      ap_cfg_closefile
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_cfg_closefile(<A HREF="#configfile_t">configfile_t</A> *fp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_cfg_getc">
      ap_cfg_getc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_cfg_getc(<A HREF="#configfile_t">configfile_t</A> *cfp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_cfg_getline">
      ap_cfg_getline
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_cfg_getline(char *buf, size_t bufsize, <A HREF="#configfile_t">configfile_t</A> *cfp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_chdir_file">
      ap_chdir_file
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_chdir_file(const char *file);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_checkmask">
      ap_checkmask
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_checkmask(const char *data, const char *mask);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_check_access">
      ap_check_access
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_check_alarm">
      ap_check_alarm
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_check_alarm(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_check_auth">
      ap_check_auth
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_check_cmd_context">
      ap_check_cmd_context
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_check_cmd_context(<A HREF="#cmd_parms">cmd_parms</A> *cmd, unsigned forbidden);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_check_user_id">
      ap_check_user_id
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_child_exit_modules">
      ap_child_exit_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_child_init_modules">
      ap_child_init_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_child_terminate">
      ap_child_terminate
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_child_terminate(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_cleanup_for_exec">
      ap_cleanup_for_exec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_cleanup_for_exec(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_clear_module_list">
      ap_clear_module_list
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_clear_module_list(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_clear_pool">
      ap_clear_pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_clear_table">
      ap_clear_table
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_clear_table(<A HREF="#table">table</A> *t);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_close_piped_log">
      ap_close_piped_log
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_close_piped_log(<A HREF="#piped_log">piped_log</A> *plp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_open_piped_log"><SAMP>ap_open_piped_log</SAMP></A>,
          <A HREF="#piped_log"><SAMP>piped_log</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_construct_server">
      ap_construct_server
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_construct_server(<A HREF="#pool">pool</A> *p, const char *hostname, unsigned port, const <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_construct_url">
      ap_construct_url
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_construct_url(<A HREF="#pool">pool</A> *p, const char *uri, const <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_copy_array">
      ap_copy_array
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#array_header">array_header</A> *ap_copy_array(<A HREF="#pool">pool</A> *p, const <A HREF="#array_header">array_header</A> *src);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_copy_array_hdr">
      ap_copy_array_hdr
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#array_header">array_header</A> *ap_copy_array_hdr(<A HREF="#pool">pool</A> *p, const <A HREF="#array_header">array_header</A> *src);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_copy_table">
      ap_copy_table
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#table">table</A> *ap_copy_table(<A HREF="#pool">pool</A> *p, const <A HREF="#table">table</A> *t);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_core_reorder_directories">
      ap_core_reorder_directories
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_count_dirs">
      ap_count_dirs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_count_dirs(const char *path);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_cpystrn">
      ap_cpystrn
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_cpystrn(char *buf, const char *str, size_t numbytes);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
    <P>
    Copies at most <SAMP>numbytes</SAMP> of <SAMP>str</SAMP> to <SAMP>buf</SAMP>.
    Differs from <SAMP>strncpy()</SAMP> in that <SAMP>buf</SAMP> is
    <EM>always</EM> null terminated, but is <EM>not</EM> null filled.
    Therefore, <SAMP>buf</SAMP> should always be at least
    <SAMP>numbytes&nbsp;+&nbsp;1</SAMP> bytes long.
    Returns a pointer to the terminating <SAMP>'\0</SAMP>'.
    </P>
    <HR>
    <H3>
     <A NAME="ap_create_environment">
      ap_create_environment
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char **ap_create_environment(<A HREF="#pool">pool</A> *p, <A HREF="#table">table</A> *t);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_create_mutex">
      ap_create_mutex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
   <A HREF="#mutex">mutex</A> *ap_create_mutex(char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_acquire_mutex"><SAMP>ap_acquire_mutex</SAMP></A>,
          <A HREF="#ap_destroy_mutex"><SAMP>ap_destroy_mutex</SAMP></A>,
          <A HREF="#ap_open_mutex"><SAMP>ap_open_mutex</SAMP></A>,
          <A HREF="#mutex"><SAMP>mutex</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_create_per_dir_config">
      ap_create_per_dir_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void *ap_create_per_dir_config(<A HREF="#pool">pool</A> *p);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_create_request_config">
      ap_create_request_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_default_port_for_request">
      ap_default_port_for_request
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  unsigned short ap_default_port_for_request(const <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_default_port_for_scheme">
      ap_default_port_for_scheme
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  unsigned short ap_default_port_for_scheme(const char *scheme_str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_default_type">
      ap_default_type
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_default_type(request_req *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_destroy_mutex">
      ap_destroy_mutex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_destroy_mutex(<A HREF="#mutex">mutex</A> *mutex_id);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_acquire_mutex"><SAMP>ap_acquire_mutex</SAMP></A>,
          <A HREF="#ap_create_mutex"><SAMP>ap_create_mutex</SAMP></A>,
          <A HREF="#ap_open_mutex"><SAMP>ap_open_mutex</SAMP></A>,
          <A HREF="#mutex"><SAMP>mutex</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_destroy_pool">
      ap_destroy_pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_destroy_pool(<A HREF="#pool">pool</A> *p);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
    <P>
    This function will recursively destroy the specified
    <A HREF="#pool">pool</A> allocation area and any sub-pools of it,
    making any memory allocated to them available for use elsewhere.
    </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_destroy_sub_req">
      ap_destroy_sub_req
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_destroy_sub_req(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_die">
      ap_die
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_discard_request_body">
      ap_discard_request_body
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_discard_request_body(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_document_root">
      ap_document_root
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_document_root(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_each_byterange">
      ap_each_byterange
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_each_byterange(<A HREF="#request_rec">request_rec</A> *r, long *offset, long *length);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_error_log2stderr">
      ap_error_log2stderr
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_error_log2stderr(<A HREF="#server_rec">server_rec</A> *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_escape_html">
      ap_escape_html
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_escape_html(<A HREF="#pool">pool</A> *p, const char *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_escape_path">
      ap_escape_path
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_escape_path(<A HREF="#pool">pool</A> *p, const char *path, int partial);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_escape_path_segment">
      ap_escape_path_segment
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_escape_path_segment(<A HREF="#pool">pool</A> *p, const char *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_escape_quotes">
      ap_escape_quotes
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_escape_quotes(<A HREF="#pool">pool</A> *p, const char *str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_escape_shell_cmd">
      ap_escape_shell_cmd
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_escape_shell_cmd(<A HREF="#pool">pool</A> *p, const char *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_exists_scoreboard_image">
      ap_exists_scoreboard_image
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_finalize_request_protocol">
      ap_finalize_request_protocol
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_finalize_sub_req_protocol">
      ap_finalize_sub_req_protocol
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_command">
      ap_find_command
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const <A HREF="#command_rec">command_rec</A> *ap_find_command(const char *name, const <A HREF="#command_rec">command_rec</A> *cmds);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_command_in_modules">
      ap_find_command_in_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const <A HREF="#command_rec">command_rec</A> *ap_find_command_in_modules(const char *cmd_name, <A HREF="#module">module</A> **m);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_last_token">
      ap_find_last_token
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_find_last_token(<A HREF="#pool">pool</A> *p, const char *line, const char *tok);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_linked_module">
      ap_find_linked_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#module">module</A> *ap_find_linked_module(const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_module_name">
      ap_find_module_name
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_find_module_name(<A HREF="#module">module</A> *m);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_path_info">
      ap_find_path_info
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_find_path_info(const char *uri, const char *path_info);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_pool">
      ap_find_pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_find_token">
      ap_find_token
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_find_token(<A HREF="#pool">pool</A> *p, const char *line, const char *tok);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_find_types">
      ap_find_types
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_fini_vhost_config">
      ap_fini_vhost_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_fnmatch">
      ap_fnmatch
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_fnmatch(const char *s1, const char *s2, int n);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_force_library_loading">
      ap_force_library_loading
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getparents">
      ap_getparents
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_getparents(char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword">
      ap_getword
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword(<A HREF="#pool">pool</A> *p, const char **line, char stop);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_conf">
      ap_getword_conf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_conf(<A HREF="#pool">pool</A> *p, const char **line);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_conf_nc">
      ap_getword_conf_nc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_conf_nc(<A HREF="#pool">pool</A> *p, char **line);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_nc">
      ap_getword_nc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_nc(<A HREF="#pool">pool</A> *p, char **line, char stop);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_nulls">
      ap_getword_nulls
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_nulls(<A HREF="#pool">pool</A> *p, const char **line, char stop);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_nulls_nc">
      ap_getword_nulls_nc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_nulls_nc(<A HREF="#pool">pool</A> *p, char **line, char stop);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_white">
      ap_getword_white
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_white(<A HREF="#pool">pool</A> *p, const char **line);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_getword_white_nc">
      ap_getword_white_nc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_getword_white_nc(<A HREF="#pool">pool</A> *p, char **line);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_basic_auth_pw">
      ap_get_basic_auth_pw
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_get_basic_auth_pw(<A HREF="#request_rec">request_rec</A> *r, char **pw);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_client_block">
      ap_get_client_block
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_get_client_block(<A HREF="#request_rec">request_rec</A> *r, char *buffer, int bufsiz);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_gmtoff">
      ap_get_gmtoff
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  struct tm *ap_get_gmtoff(int *tz);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_local_host">
      ap_get_local_host
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_module_config">
      ap_get_module_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void *ap_get_module_config(void *conf_vector, <A HREF="#module">module</A> *m);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_remote_host">
      ap_get_remote_host
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_get_remote_host(<A HREF="#conn_rec">conn_rec</A> *conn, void *dir_config, int type);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_remote_logname">
      ap_get_remote_logname
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_get_remote_logname(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_server_built">
      ap_get_server_built
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_get_server_built(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  char *string;
  string = ap_get_server_built();
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_get_server_name"><SAMP>ap_get_server_name</SAMP></A>,
          <A HREF="#ap_get_server_version"><SAMP>ap_get_server_version</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_get_server_name">
      ap_get_server_name
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_get_server_name(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
   char *string;
  string = ap_get_server_name();
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_get_server_built"><SAMP>ap_get_server_built</SAMP></A>,
          <A HREF="#ap_get_server_version"><SAMP>ap_get_server_version</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_get_server_port">
      ap_get_server_port
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  unsigned ap_get_server_port(const *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_server_version">
      ap_get_server_version
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_get_server_version(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
   char *string;
  string = ap_get_server_version();
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_get_server_built"><SAMP>ap_get_server_built</SAMP></A>,
          <A HREF="#ap_get_server_name"><SAMP>ap_get_server_name</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_get_time">
      ap_get_time
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_get_time(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_token">
      ap_get_token
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_get_token(<A HREF="#pool">pool</A> *p, char **accept_line, int accept_white);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_get_virthost_addr">
      ap_get_virthost_addr
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_gm_timestr_822">
      ap_gm_timestr_822
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_gm_timestr_822(<A HREF="#pool">pool</A> *p, time_t t);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_gname2id">
      ap_gname2id
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  gid_t ap_gname2id(const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_handle_command">
      ap_handle_command
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_handle_command(<A HREF="#cmd_parms">cmd_parms</A> *parms, void *config, const char *l);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_hard_timeout">
      ap_hard_timeout
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_hard_timeout(char *reason, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_header_parse">
      ap_header_parse
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_ht_time">
      ap_ht_time
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_ht_time(<A HREF="#pool">pool</A> *p, time_t t, const char *fmt, int gmt);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_ind">
      ap_ind
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_ind(const char *str, char c);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_index_of_response">
      ap_index_of_response
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_index_of_response(int status);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_init_alloc">
      ap_init_alloc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_init_modules">
      ap_init_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_init_vhost_config">
      ap_init_vhost_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_init_virtual_host">
      ap_init_virtual_host
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_init_virtual_host(<A HREF="#pool">pool</A> *p, const char *hostname, <A HREF="#server_rec">server_rec</A> *main_server, <A HREF="#server_rec">server_rec</A> **);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_internal_redirect">
      ap_internal_redirect
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_internal_redirect(const char *new_uri, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_internal_redirect_handler">
      ap_internal_redirect_handler
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_internal_redirect_handler(const char *new_uri, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_invoke_handler">
      ap_invoke_handler
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_is_directory">
      ap_is_directory
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_is_directory(const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_is_fnmatch">
      ap_is_fnmatch
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_is_fnmatch(const char *str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_is_initial_req">
      ap_is_initial_req
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_is_initial_req(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_is_matchexp">
      ap_is_matchexp
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_is_matchexp(const char *str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_is_url">
      ap_is_url
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_is_url(const char *u);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_keepalive_timeout">
      ap_keepalive_timeout
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_kill_cleanup">
      ap_kill_cleanup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_kill_cleanup(<A HREF="#pool">pool</A> *p, void *data, void (*plain_cleanup) (void *));
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_kill_cleanups_for_fd">
      ap_kill_cleanups_for_fd
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_kill_cleanups_for_fd(<A HREF="#pool">pool</A> *p, int fd);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_kill_cleanups_for_socket">
      ap_kill_cleanups_for_socket
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_kill_cleanups_for_socket(<A HREF="#pool">pool</A> *p, int sock);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_kill_timeout">
      ap_kill_timeout
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_kill_timeout(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_limit_section">
      ap_limit_section
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_limit_section(R (const char *szExp, const char *szFile, int nLine);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_error">
      ap_log_error
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_log_error(const char *file, int line, int level, const <A HREF="#server_rec">server_rec</A> *s, const char *fmt, ...) __attribute__((format(printf,5,6)));
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_error_old">
      ap_log_error_old
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_log_error_old(const char *err, <A HREF="#server_rec">server_rec</A> *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_pid">
      ap_log_pid
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_printf">
      ap_log_printf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_log_printf(const <A HREF="#server_rec">server_rec</A> *s, const char *fmt, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_reason">
      ap_log_reason
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_log_reason(const char *reason, const char *fname, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_transaction">
      ap_log_transaction
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_log_unixerr">
      ap_log_unixerr
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_log_unixerr(const char *routine, const char *file, const char *msg, <A HREF="#server_rec">server_rec</A> *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_make_array">
      ap_make_array
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#array_header">array_header</A> *ap_make_array(<A HREF="#pool">pool</A> *p, int nelts, int elt_size);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_make_dirstr">
      ap_make_dirstr
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_make_dirstr(<A HREF="#pool">pool</A> *a, const char *s, int n);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_make_dirstr_parent">
      ap_make_dirstr_parent
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_make_dirstr_parent(<A HREF="#pool">pool</A> *p, const char *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_make_dirstr_prefix">
      ap_make_dirstr_prefix
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_make_dirstr_prefix(char *d, const char *s, int n);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_make_full_path">
      ap_make_full_path
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_make_full_path(<A HREF="#pool">pool</A> *a, const char *dir, const char *f);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_make_sub_pool">
      ap_make_sub_pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#pool">pool</A> *ap_make_sub_pool(<A HREF="#pool">pool</A> *p);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
    <P>
    This function creates a new <A HREF="#pool">pool area</A>
    for memory allocation.  The
    new area is considered to be a &quot;child&quot; of the pool
    passed to the routine; this permits a hierarchy of related storage
    areas.  When a pool is destroyed (see
    <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>),
    any sub-pools it may have are also destroyed recursively.
    </P>
    <P>
    An example of when this hierarchy concept is useful can be found in the
    <A HREF="http://www.apache.org/docs/mod/mod_autoindex.html"
    >automatic directory listing module</A>.  Since the module can't
    tell in advance how many files it will have to list, nor how long the
    names will be, nor what other functions might need to allocate memory
    to process the request, it creates a sub-pool of the one associated
    with the request, does the <em>per</EM>-filename processing in
    it, and clears it for each new file.
    </P>
    <P>
    If the pointer passed to <SAMP>ap_make_sub_pool</SAMP> is <CODE>NULL</CODE>,
    a new top-level (<EM>i.e.</EM>, parentless) pool is created.  This
    is generally not recommended, however, since the only record of a
    pool's existence is the pointer returned - a simple logic error can
    result in pools being created and lost, along with any allocations
    made in them.  Most pools are created to deal with <EM>per</EM>-request
    processing, and hence should be sub-pools of the request's pool
    (<A HREF="#request_rec"><SAMP>r-&gt;pool</SAMP></A>) to ensure that
    they are properly cleaned up on request completion.
    </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_make_table">
      ap_make_table
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#table">table</A> *ap_make_table(<A HREF="#pool">pool</A> *p, int nelts);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_matches_request_vhost">
      ap_matches_request_vhost
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_matches_request_vhost(<A HREF="#request_rec">request_rec</A> *r, const char *host, unsigned port);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_md5">
      ap_md5
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_md5(<A HREF="#pool">pool</A> *a, unsigned char *string);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_md5context">
      ap_md5context
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_md5context(<A HREF="#pool">pool</A> *p, <A HREF="#AP_MD5_CTX">AP_MD5_CTX</A> *context);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_md5contextTo64">
      ap_md5contextTo64
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_md5digest">
      ap_md5digest
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_md5digest(<A HREF="#pool">pool</A> *p, FILE *infile);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_MD5Final">
      ap_MD5Final
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_MD5Final(unsigned char digest[16], <A HREF="#AP_MD5_CTX">AP_MD5_CTX</A> *context);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_MD5Init">
      ap_MD5Init
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_MD5Init(<A HREF="#AP_MD5_CTX">AP_MD5_CTX</A> *context);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_MD5Update">
      ap_MD5Update
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_MD5Update(<A HREF="#AP_MD5_CTX">AP_MD5_CTX</A> *context, const unsigned char *input, unsigned int inputLen);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#AP_MD5_CTX"><SAMP>AP_MD5_CTX</SAMP></A>,
          <A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_meets_conditions">
      ap_meets_conditions
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_meets_conditions(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_merge_per_dir_configs">
      ap_merge_per_dir_configs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_no2slash">
      ap_no2slash
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_no2slash(char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_auth_failure">
      ap_note_auth_failure
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_auth_failure(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_basic_auth_failure">
      ap_note_basic_auth_failure
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_basic_auth_failure(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_cleanups_for_fd">
      ap_note_cleanups_for_fd
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_cleanups_for_fd(<A HREF="#pool">pool</A> *p, int fd);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_cleanups_for_file">
      ap_note_cleanups_for_file
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_cleanups_for_file(<A HREF="#pool">pool</A> *p, FILE *f);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_cleanups_for_socket">
      ap_note_cleanups_for_socket
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_cleanups_for_socket(<A HREF="#pool">pool</A> *p, int sock);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_digest_auth_failure">
      ap_note_digest_auth_failure
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_digest_auth_failure(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_note_subprocess">
      ap_note_subprocess
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_note_subprocess(<A HREF="#pool">pool</A> *p, int pid, enum <A HREF="#kill_conditions">kill_conditions</A> how);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_null_cleanup">
      ap_null_cleanup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_null_cleanup(void *data);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_open_logs">
      ap_open_logs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_open_mutex">
      ap_open_mutex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#mutex">mutex</A> *ap_open_mutex(char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_acquire_mutex"><SAMP>ap_acquire_mutex</SAMP></A>,
          <A HREF="#ap_create_mutex"><SAMP>ap_create_mutex</SAMP></A>,
          <A HREF="#ap_destroy_mutex"><SAMP>ap_destroy_mutex</SAMP></A>,
          <A HREF="#mutex"><SAMP>mutex</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_open_piped_log">
      ap_open_piped_log
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#piped_log">piped_log</A> *ap_open_piped_log(<A HREF="#pool">pool</A> *p, const char *program);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_close_piped_log"><SAMP>ap_close_piped_log</SAMP></A>,
          <A HREF="#piped_log"><SAMP>piped_log</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_os_canonical_filename">
      ap_os_canonical_filename
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_os_canonical_filename(<A HREF="#pool">pool</A> *p, const char *file);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_os_is_path_absolute">
      ap_os_is_path_absolute
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_overlay_tables">
      ap_overlay_tables
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#table">table</A> *ap_overlay_tables(<A HREF="#pool">pool</A> *p, const <A HREF="#table">table</A> *overlay, const <A HREF="#table">table</A> *base);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_palloc">
      ap_palloc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void *ap_palloc(struct <A HREF="#pool">pool</A> *p, int nbytes);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_parseHTTPdate">
      ap_parseHTTPdate
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  time_t ap_parseHTTPdate(const char *date);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_parse_hostinfo_components">
      ap_parse_hostinfo_components
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_parse_hostinfo_components(<A HREF="#pool">pool</A> *p, const char *hostinfo, <A HREF="#uri_components">uri_components</A> *uptr);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_parse_htaccess">
      ap_parse_htaccess
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_parse_uri">
      ap_parse_uri
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_parse_uri(<A HREF="#request_rec">request_rec</A> *r, const char *uri);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_parse_uri_components">
      ap_parse_uri_components
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_parse_uri_components(<A HREF="#pool">pool</A> *p, const char *uri, <A HREF="#uri_components">uri_components</A> *uptr);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_parse_vhost_addrs">
      ap_parse_vhost_addrs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_pcalloc">
      ap_pcalloc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void *ap_pcalloc(struct <A HREF="#pool">pool</A> *p, int nbytes);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pcfg_openfile">
      ap_pcfg_openfile
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#configfile_t">configfile_t</A> *ap_pcfg_openfile(<A HREF="#pool">pool</A> *p, const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_pcfg_open_custom">
      ap_pcfg_open_custom
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#configfile_t">configfile_t</A> *ap_pcfg_open_custom(<A HREF="#pool">pool</A> *p, const char *descr, void *param, int(*getc_func)(void*), void *(*gets_func) (void *buf, size_t bufsiz, void *param),int (*close_func) (void *a));
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_pclosedir">
      ap_pclosedir
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_pclosedir(<A HREF="#pool">pool</A> *p, DIR * d);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pclosef">
      ap_pclosef
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_pclosef(struct <A HREF="#pool">pool</A> *p, int fd);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pclosesocket">
      ap_pclosesocket
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_pclosesocket(<A HREF="#pool">pool</A> *p, int sock);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pduphostent">
      ap_pduphostent
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  struct hostent *ap_pduphostent(<A HREF="#pool">pool</A> *p, struct hostent *hp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pfclose">
      ap_pfclose
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_pfclose(struct <A HREF="#pool">pool</A> *p, FILE *f);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pfdopen">
      ap_pfdopen
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  FILE *ap_pfdopen(struct <A HREF="#pool">pool</A> *p, int fd, const char *fmode);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pfopen">
      ap_pfopen
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  FILE *ap_pfopen(struct <A HREF="#pool">pool</A> *p, const char *name, const char *fmode);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pgethostbyname">
      ap_pgethostbyname
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  struct hostent *ap_pgethostbyname(<A HREF="#pool">pool</A> *p, const char *hostname);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pool_is_ancestor">
      ap_pool_is_ancestor
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pool_join">
      ap_pool_join
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_popendir">
      ap_popendir
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  DIR *ap_popendir(<A HREF="#pool">pool</A> *p, const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_popenf">
      ap_popenf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_popenf(struct <A HREF="#pool">pool</A> *p, const char *name, int flg, int mode);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pregcomp">
      ap_pregcomp
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#regex_t">regex_t</A> *ap_pregcomp(<A HREF="#pool">pool</A> *p, const char *pattern, int cflags);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pregfree">
      ap_pregfree
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_pregfree(<A HREF="#pool">pool</A> *p, <A HREF="#regex_t">regex_t</A> *reg);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pregsub">
      ap_pregsub
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_pregsub(<A HREF="#pool">pool</A> *p, const char *input, const char *source, size_t nmatch, <A HREF="#regmatch_t">regmatch_t</A> pmatch[]);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_process_request">
      ap_process_request
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_process_resource_config">
      ap_process_resource_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_psignature">
      ap_psignature
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_psignature(const char *prefix, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_psocket">
      ap_psocket
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_psocket(<A HREF="#pool">pool</A> *p, int i, int j, int k);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_psprintf">
      ap_psprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_psprintf(struct <A HREF="#pool">pool</A> *p, const char *fmt, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_pstrcat">
      ap_pstrcat
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_pstrcat(struct <A HREF="#pool">pool</A> *p, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pstrdup">
      ap_pstrdup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_pstrdup(struct <A HREF="#pool">pool</A> *p, const char *s);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pstrndup">
      ap_pstrndup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_pstrndup(struct <A HREF="#pool">pool</A> *p, const char *s, int n);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#pool"><SAMP>pool</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_push_array">
      ap_push_array
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void *ap_push_array(<A HREF="#array_header">array_header</A> *a);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#array_header"><SAMP>array_header</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_pvsprintf">
      ap_pvsprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_pvsprintf(struct <A HREF="#pool">pool</A> *p, const char *fmt, va_list);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rationalize_mtime">
      ap_rationalize_mtime
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  time_t ap_rationalize_mtime(<A HREF="#request_rec">request_rec</A> *r, time_t mtime);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_read_config">
      ap_read_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_read_request">
      ap_read_request
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_register_cleanup">
      ap_register_cleanup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_register_cleanup(<A HREF="#pool">pool</A> *p, void *data, void (*plain_cleanup) (void *), void (*child_cleanup) (void *));
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_register_other_child">
      ap_register_other_child
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_register_other_child(int pid, void (*maintenance) (int reason, void *data, int status), void *data, int write_fd);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_remove_module">
      ap_remove_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_remove_module(<A HREF="#module">module</A> *m);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_requires">
      ap_requires
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#array_header">array_header</A> *ap_requires(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_reset_timeout">
      ap_reset_timeout
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_reset_timeout(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_response_code_string">
      ap_response_code_string
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rfc1413">
      ap_rfc1413
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rflush">
      ap_rflush
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rflush(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rind">
      ap_rind
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rind(const char *str, char c);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rprintf">
      ap_rprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rprintf(<A HREF="#request_rec">request_rec</A> *r, const char *fmt, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rputc">
      ap_rputc
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rputc(int c, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rputs">
      ap_rputs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rputs(const char *str, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_run_cleanup">
      ap_run_cleanup
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_run_cleanup(<A HREF="#pool">pool</A> *p, void *data, void (*cleanup) (void *));
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_run_fixups">
      ap_run_fixups
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_run_post_read_request">
      ap_run_post_read_request
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_run_sub_req">
      ap_run_sub_req
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_run_sub_req(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rvputs">
      ap_rvputs
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rvputs(<A HREF="#request_rec">request_rec</A> *r, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_rwrite">
      ap_rwrite
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_rwrite(const void *buf, int nbyte, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_satisfies">
      ap_satisfies
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_satisfies(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_scan_script_header_err">
      ap_scan_script_header_err
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_scan_script_header_err(<A HREF="#request_rec">request_rec</A> *r, FILE *f, char *buffer);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_scan_script_header_err_buff">
      ap_scan_script_header_err_buff
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_scan_script_header_err_buff(<A HREF="#request_rec">request_rec</A> *r, <A HREF="#BUFF">BUFF</A> *f, char *buffer);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_error_response">
      ap_send_error_response
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_fb">
      ap_send_fb
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_send_fb(<A HREF="#BUFF">BUFF</A> *f, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_fb_length">
      ap_send_fb_length
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_send_fb_length(<A HREF="#BUFF">BUFF</A> *f, <A HREF="#request_rec">request_rec</A> *r, long length);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_fd">
      ap_send_fd
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_send_fd(FILE *f, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_fd_length">
      ap_send_fd_length
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  long ap_send_fd_length(FILE *f, <A HREF="#request_rec">request_rec</A> *r, long length);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_header_field">
      ap_send_header_field
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_send_header_field(<A HREF="#request_rec">request_rec</A> *r, const char *fieldname, const char *fieldval);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_http_header">
      ap_send_http_header
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_send_http_header(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_http_options">
      ap_send_http_options
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_http_trace">
      ap_send_http_trace
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_mmap">
      ap_send_mmap
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  size_t ap_send_mmap(void *mm, <A HREF="#request_rec">request_rec</A> *r, size_t offset, size_t length);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_send_size">
      ap_send_size
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_send_size(size_t size, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_server_root_relative">
      ap_server_root_relative
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_server_root_relative(<A HREF="#pool">pool</A> *p, char *fname);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_setup_client_block">
      ap_setup_client_block
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_setup_client_block(<A HREF="#request_rec">request_rec</A> *r, int read_policy);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_setup_prelinked_modules">
      ap_setup_prelinked_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_byterange">
      ap_set_byterange
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_set_byterange(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_callback_and_alarm">
      ap_set_callback_and_alarm
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_content_length">
      ap_set_content_length
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_set_content_length(<A HREF="#request_rec">request_rec</A> *r, long length);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_etag">
      ap_set_etag
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_set_etag(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_file_slot">
      ap_set_file_slot
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_set_file_slot(<A HREF="#cmd_parms">cmd_parms</A> *cmd, char *s1, char *s2);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_flag_slot">
      ap_set_flag_slot
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_set_flag_slot(<A HREF="#cmd_parms">cmd_parms</A> *cmd, char *s1, int flag);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_keepalive">
      ap_set_keepalive
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_set_keepalive(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_last_modified">
      ap_set_last_modified
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_set_last_modified(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_module_config">
      ap_set_module_config
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_set_module_config(void *conf_vector, <A HREF="#module">module</A> *m, void *val);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_name_virtual_host">
      ap_set_name_virtual_host
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_string_slot">
      ap_set_string_slot
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_set_string_slot(<A HREF="#cmd_parms">cmd_parms</A> *cmd, char *s1, char *s2);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_string_slot_lower">
      ap_set_string_slot_lower
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_set_string_slot_lower(<A HREF="#cmd_parms">cmd_parms</A> *cmd, char *s1, char *s2);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_set_sub_req_protocol">
      ap_set_sub_req_protocol
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_should_client_block">
      ap_should_client_block
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_should_client_block(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_show_directives">
      ap_show_directives
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_show_modules">
      ap_show_modules
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_snprintf">
      ap_snprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_snprintf(char *buf, size_t nbytes, const char *fmt, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_soft_timeout">
      ap_soft_timeout
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_soft_timeout(char *str, <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_some_auth_required">
      ap_some_auth_required
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_some_auth_required(<A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_spawn_child_err">
      ap_spawn_child_err
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_spawn_child_err(<A HREF="#pool">pool</A> *p, int (*)(void *), void *, enum <A HREF="#kill_conditions">kill_conditions</A>, FILE **pipe_in, FILE **pipe_out, FILE **pipe_err);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_spawn_child_err_buff">
      ap_spawn_child_err_buff
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_spawn_child_err_buff(<A HREF="#pool">pool</A> *p, int (*)(void *), void *, enum <A HREF="#kill_conditions">kill_conditions</A>, <A HREF="#BUFF">BUFF</A> **pipe_in, <A HREF="#BUFF">BUFF</A> **pipe_out, <A HREF="#BUFF">BUFF</A> **pipe_err);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_srm_command_loop">
      ap_srm_command_loop
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char *ap_srm_command_loop(<A HREF="#cmd_parms">cmd_parms</A> *parms, void *config);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_start_restart">
      ap_start_restart
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_start_shutdown">
      ap_start_shutdown
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_strcasecmp_match">
      ap_strcasecmp_match
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_strcasecmp_match(const char *str, const char *exp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_strcmp_match">
      ap_strcmp_match
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_strcmp_match(const char *str, const char *exp);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_str_tolower">
      ap_str_tolower
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_str_tolower(char *str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_sub_req_lookup_file">
      ap_sub_req_lookup_file
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#request_rec">request_rec</A> *ap_sub_req_lookup_file(const char *new_file, const <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_sub_req_lookup_uri">
      ap_sub_req_lookup_uri
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#request_rec">request_rec</A> *ap_sub_req_lookup_uri(const char *new_file, const <A HREF="#request_rec">request_rec</A> *r);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_sync_scoreboard_image">
      ap_sync_scoreboard_image
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_add">
      ap_table_add
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_table_add(<A HREF="#table">table</A> *t, const char *key, const char *val);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_addn">
      ap_table_addn
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_table_addn(<A HREF="#table">table</A> *t, const char *key, const char *val);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_do">
      ap_table_do
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_table_do(int (*comp) (void *d, const char *key, const char *val), void *rec, const <A HREF="#table">table</A> *t, ...);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_get">
      ap_table_get
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_merge">
      ap_table_merge
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_mergen">
      ap_table_mergen
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_set">
      ap_table_set
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_setn">
      ap_table_setn
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_table_unset">
      ap_table_unset
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#table"><SAMP>table</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_time_process_request">
      ap_time_process_request
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_tm2sec">
      ap_tm2sec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  time_t ap_tm2sec(const struct tm *t);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_translate_name">
      ap_translate_name
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_uname2id">
      ap_uname2id
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  uid_t ap_uname2id(const char *name);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_unblock_alarms">
      ap_unblock_alarms
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_unblock_alarms(void);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_unescape_url">
      ap_unescape_url
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_unescape_url(char *url);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_unparse_uri_components">
      ap_unparse_uri_components
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_unparse_uri_components(<A HREF="#pool">pool</A> *p, const <A HREF="#uri_components">uri_components</A> *uptr, unsigned flags);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_unregister_other_child">
      ap_unregister_other_child
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  void ap_unregister_other_child(void *data);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_update_child_status">
      ap_update_child_status
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_update_mtime">
      ap_update_mtime
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  time_t ap_update_mtime(<A HREF="#request_rec">request_rec</A> *r, time_t dependency_mtime);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_update_vhost_from_headers">
      ap_update_vhost_from_headers
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_update_vhost_given_ip">
      ap_update_vhost_given_ip
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_util_init">
      ap_util_init
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_util_uri_init">
      ap_util_uri_init
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_uudecode">
      ap_uudecode
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_uudecode(<A HREF="#pool">pool</A> *p, const char *str);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_vbprintf">
      ap_vbprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_vbprintf(<A HREF="#BUFF">BUFF</A> *fb, const char *fmt, va_list vlist);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_vformatter">
      ap_vformatter
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_vformatter(int (*flush_func)(<A HREF="#ap_vformatter_buff">ap_vformatter_buff</A> *f), <A HREF="#ap_vformatter_buff">ap_vformatter_buff</A> *b, const char *fmt, va_list ap);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_vsnprintf">
      ap_vsnprintf
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_vsnprintf(char *buf, size_t numbytes, const char *fmt, va_list ap);
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="is_HTTP_CLIENT_ERROR">
      is_HTTP_CLIENT_ERROR
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_CLIENT_ERROR(x) (((x) &gt;= 400) &amp;&amp; ((x) &lt; 500))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="is_HTTP_ERROR">
      is_HTTP_ERROR
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_ERROR(x) (((x) &gt;= 400) &amp;&amp; ((x) &lt; 600))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="is_HTTP_INFO">
      is_HTTP_INFO
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_INFO(x) (((x) &gt;= 100) &amp;&amp; ((x) &lt; 200))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="is_HTTP_REDIRECT">
      is_HTTP_REDIRECT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_REDIRECT(x) (((x) &gt;= 300) &amp;&amp; ((x) &lt; 400))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="is_HTTP_SERVER_ERROR">
      is_HTTP_SERVER_ERROR
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_SERVER_ERROR(x) (((x) &gt;= 500) &amp;&amp; ((x) &lt; 600))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="is_HTTP_SUCCESS">
      is_HTTP_SUCCESS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define is_HTTP_SUCCESS(x) (((x) &gt;= 200) &amp;&amp; ((x) &lt; 300))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#status_drops_connection"><SAMP>status_drops_connection</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="status_drops_connection">
      status_drops_connection
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define status_drops_connection(x) (((x) == <A HREF="#HTTP_BAD_REQUEST">HTTP_BAD_REQUEST</A>)           &#124;&#124;
                                      ((x) == <A HREF="#HTTP_REQUEST_TIME_OUT">HTTP_REQUEST_TIME_OUT</A>)      &#124;&#124;
                                      ((x) == <A HREF="#HTTP_LENGTH_REQUIRED">HTTP_LENGTH_REQUIRED</A>)       &#124;&#124;
                                      ((x) == <A HREF="#HTTP_REQUEST_ENTITY_TOO_LARGE">HTTP_REQUEST_ENTITY_TOO_LARGE</A>) &#124;&#124;
                                      ((x) == <A HREF="#HTTP_REQUEST_URI_TOO_LARGE">HTTP_REQUEST_URI_TOO_LARGE</A>) &#124;&#124;
                                      ((x) == <A HREF="#HTTP_INTERNAL_SERVER_ERROR">HTTP_INTERNAL_SERVER_ERROR</A>) &#124;&#124;
                                      ((x) == <A HREF="#HTTP_SERVICE_UNAVAILABLE">HTTP_SERVICE_UNAVAILABLE</A>) &#124;&#124;
                                      ((x) == <A HREF="#HTTP_NOT_IMPLEMENTED">HTTP_NOT_IMPLEMENTED</A>))
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#is_HTTP_CLIENT_ERROR"><SAMP>is_HTTP_CLIENT_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_ERROR"><SAMP>is_HTTP_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_INFO"><SAMP>is_HTTP_INFO</SAMP></A>,
          <A HREF="#is_HTTP_REDIRECT"><SAMP>is_HTTP_REDIRECT</SAMP></A>,
          <A HREF="#is_HTTP_SERVER_ERROR"><SAMP>is_HTTP_SERVER_ERROR</SAMP></A>,
          <A HREF="#is_HTTP_SUCCESS"><SAMP>is_HTTP_SUCCESS</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H2>
     <A NAME="Structures">
      Data Structure Definitions
     </A>
    </H2>
    <HR>
    <H3>
     <A NAME="AP_MD5_CTX">
      AP_MD5_CTX
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  This is an opaque structure; you don't need to access any of its elements.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  AP_MD5_CTX <EM>identifier</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_MD5Final"><SAMP>ap_MD5Final</SAMP></A>,
          <A HREF="#ap_MD5Init"><SAMP>ap_MD5Init</SAMP></A>,
          <A HREF="#ap_MD5Update"><SAMP>ap_MD5Update</SAMP></A>,
          <A HREF="#ap_md5"><SAMP>ap_md5</SAMP></A>,
          <A HREF="#ap_md5context"><SAMP>ap_md5context</SAMP></A>,
          <A HREF="#ap_md5contextTo64"><SAMP>ap_md5contextTo64</SAMP></A>,
          <A HREF="#ap_md5digest"><SAMP>ap_md5digest</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_vformatter_buff">
      ap_vformatter_buff
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct {
      char *curpos;
      char *endpos;
  } ap_vformatter_buff;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="array_header">
      array_header
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      <A HREF="#pool">pool</A> *<A HREF="#pool">pool</A>; 
      int elt_size; 
      int nelts; 
      int nalloc; 
      char *elts; 
  } array_header; 
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_append_arrays"><SAMP>ap_append_arrays</SAMP></A>,
          <A HREF="#ap_array_cat"><SAMP>ap_array_cat</SAMP></A>,
          <A HREF="#ap_copy_array"><SAMP>ap_copy_array</SAMP></A>,
          <A HREF="#ap_copy_array_hdr"><SAMP>ap_copy_array_hdr</SAMP></A>,
          <A HREF="#ap_make_array"><SAMP>ap_make_array</SAMP></A>,
          <A HREF="#ap_push_array"><SAMP>ap_push_array</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="BUFF">
      BUFF
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct buff_struct BUFF; 
  struct buff_struct { 
      int flags; 
      unsigned char *inptr; 
      int incnt; 
      int outchunk; 
      int outcnt; 
      unsigned char *inbase; 
      unsigned char *outbase; 
      int bufsiz; 
      void (*error) (BUFF *fb, int op, void *data); 
      void *error_data; 
      long int bytes_sent; 
      <A HREF="#pool">pool</A> *<A HREF="#pool">pool</A>; 
      int fd; 
      int fd_in; 
      void *t_handle; 
  #ifdef B_SFIO 
      Sfio_t *sf_in; 
      Sfio_t *sf_out; 
  #endif 
  };
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="cmd_parms">
      cmd_parms
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      void *info; 
      int override; 
      int limited; 
      <A HREF="#configfile_t">configfile_t</A> *config_file; 
      <A HREF="#pool">pool</A> *<A HREF="#pool">pool</A>; 
      struct <A HREF="#pool">pool</A> *temp_pool; 
      <A HREF="#server_rec">server_rec</A> *server; 
      char *path; 
      const <A HREF="#command_rec">command_rec</A> *cmd; 
      const char *end_token; 
  } cmd_parms;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="command_rec">
      command_rec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct command_rec {
      const char *name;
      const char *(*func) ();
      void *cmd_data;
      int req_override;
      enum <A HREF="#cmd_how">cmd_how</A> args_how;
      const char *errmsg;
  } command_rec;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="configfile_t">
      configfile_t
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      int (*getch) (void *param); 
      void *(*getstr) (void *buf, size_t bufsiz, void *param); 
      int (*close) (void *param); 
      void *param; 
      const char *name; 
      unsigned line_number; 
  } configfile_t;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="conn_rec">
      conn_rec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct conn_rec conn_rec; 
  struct conn_rec { 
      <A HREF="#pool">pool</A> *<A HREF="#pool">pool</A>; 
      <A HREF="#server_rec">server_rec</A> *server; 
      <A HREF="#server_rec">server_rec</A> *base_server; 
      void *vhost_lookup_data; 
      int child_num; 
      <A HREF="#BUFF">BUFF</A> *client; 
      struct sockaddr_in local_addr; 
      struct sockaddr_in remote_addr; 
      char *remote_ip; 
      char *remote_host; 
      char *remote_logname; 
      char *user; 
      char *<A HREF="#ap_auth_type">ap_auth_type</A>; 
      unsigned aborted:1; 
      signed int keepalive:2; 
      unsigned keptalive:1; 
      signed int double_reverse:2; 
      int keepalives; 
  };
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="global_score">
      global_score
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      int exit_generation; 
  } global_score;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="module">
      module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct module_struct { 
      int version; 
      int module_index; 
      const char *name; 
      void *dynamic_load_handle; 
      struct module_struct *next; 
  #ifdef ULTRIX_BRAIN_DEATH 
      void (*init) (); 
      void *(*create_dir_config) (); 
      void *(*merge_dir_config) (); 
      void *(*create_server_config) (); 
      void *(*merge_server_config) (); 
  #else 
      void (*init) (<A HREF="#server_rec">server_rec</A> *s, <A HREF="#pool">pool</A> *p); 
      void *(*create_dir_config) (<A HREF="#pool">pool</A> *p, char *dir); 
      void *(*merge_dir_config) (<A HREF="#pool">pool</A> *p, void *base_conf, void *new_conf); 
      void *(*create_server_config) (<A HREF="#pool">pool</A> *p, <A HREF="#server_rec">server_rec</A> *s); 
      void *(*merge_server_config) (<A HREF="#pool">pool</A> *p, void *base_conf, void *new_conf); 
  #endif 
      const <A HREF="#command_rec">command_rec</A> *cmds; 
      const handler_rec *handlers; 
      int (*translate_handler) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*<A HREF="#ap_check_user_id">ap_check_user_id</A>) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*auth_checker) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*access_checker) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*type_checker) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*fixer_upper) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*logger) (<A HREF="#request_rec">request_rec</A> *r); 
      int (*header_parser) (<A HREF="#request_rec">request_rec</A> *r); 
  #ifdef ULTRIX_BRAIN_DEATH 
      void (*child_init) (); 
      void (*child_exit) (); 
  #else 
      void (*child_init) (<A HREF="#server_rec">server_rec</A> *s, <A HREF="#pool">pool</A> *p); 
      void (*child_exit) (<A HREF="#server_rec">server_rec</A> *s, <A HREF="#pool">pool</A> *p); 
  #endif 
      int (*post_read_request) (<A HREF="#request_rec">request_rec</A> *)r; 
  } module; 
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  module *mpointer; 
     <EM>or</EM> 
  module action_module = 
  { 
      STANDARD_MODULE_STUFF, 
      NULL,                       /* initializer */ 
      create_action_dir_config,   /* dir config creater */ 
      merge_action_dir_configs,   /* dir merger --- default is to override */ 
      NULL,                       /* server config */ 
      NULL,                       /* merge server config */ 
      action_cmds,                /* command <A HREF="#table">table</A> */ 
      action_handlers,            /* handlers */ 
      NULL,                       /* filename translation */ 
      NULL,                       /* check_user_id */ 
      NULL,                       /* check auth */ 
      NULL,                       /* check access */ 
      NULL,                       /* type_checker */ 
      NULL,                       /* fixups */ 
      NULL,                       /* logger */ 
      NULL,                       /* header parser */ 
      NULL,                       /* child_init */ 
      NULL,                       /* child_exit */ 
      NULL                        /* post read-request */ 
  }; 
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_add_module"><SAMP>ap_add_module</SAMP></A>,
          <A HREF="#ap_add_named_module"><SAMP>ap_add_named_module</SAMP></A>,
          <A HREF="#core_module"><SAMP>core_module</SAMP></A>,
          <A HREF="#top_module"><SAMP>top_module</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="mutex">
      mutex
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  This is an opaque structure; you don't need to access any of its elements.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  mutex <EM>identifier</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="parent_score">
      parent_score
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      pid_t pid; 
  #ifdef OPTIMIZE_TIMEOUTS 
      time_t last_rtime; 
      <A HREF="#vtime_t">vtime_t</A> last_vtime; 
  #endif 
  } parent_score;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="piped_log">
      piped_log
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct piped_log { 
      <A HREF="#pool">pool</A> *p; 
  #ifndef NO_RELIABLE_PIPED_LOGS 
      char *program; 
      int pid; 
      int fds[2]; 
  #else 
      FILE *write_f; 
  #endif 
  } piped_log;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_close_piped_log"><SAMP>ap_close_piped_log</SAMP></A>,
          <A HREF="#ap_open_piped_log"><SAMP>ap_open_piped_log</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="pool">
      pool
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  [struct] pool <EM>opaque-structure</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  pool *p; 
  char *foo; 
  foo = <A HREF="#ap_pstrcat">ap_pstrcat</A>(p, "string 1", "string 2", NULL);
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_bytes_in_pool"><SAMP>ap_bytes_in_pool</SAMP></A>,
          <A HREF="#ap_clear_pool"><SAMP>ap_clear_pool</SAMP></A>,
          <A HREF="#ap_destroy_pool"><SAMP>ap_destroy_pool</SAMP></A>,
          <A HREF="#ap_find_pool"><SAMP>ap_find_pool</SAMP></A>,
          <A HREF="#ap_make_sub_pool"><SAMP>ap_make_sub_pool</SAMP></A>,
          <A HREF="#ap_palloc"><SAMP>ap_palloc</SAMP></A>,
          <A HREF="#ap_pcalloc"><SAMP>ap_pcalloc</SAMP></A>,
          <A HREF="#ap_pclosedir"><SAMP>ap_pclosedir</SAMP></A>,
          <A HREF="#ap_pclosef"><SAMP>ap_pclosef</SAMP></A>,
          <A HREF="#ap_pclosesocket"><SAMP>ap_pclosesocket</SAMP></A>,
          <A HREF="#ap_pduphostent"><SAMP>ap_pduphostent</SAMP></A>,
          <A HREF="#ap_pfclose"><SAMP>ap_pfclose</SAMP></A>,
          <A HREF="#ap_pfdopen"><SAMP>ap_pfdopen</SAMP></A>,
          <A HREF="#ap_pfopen"><SAMP>ap_pfopen</SAMP></A>,
          <A HREF="#ap_pgethostbyname"><SAMP>ap_pgethostbyname</SAMP></A>,
          <A HREF="#ap_pool_is_ancestor"><SAMP>ap_pool_is_ancestor</SAMP></A>,
          <A HREF="#ap_pool_join"><SAMP>ap_pool_join</SAMP></A>,
          <A HREF="#ap_popendir"><SAMP>ap_popendir</SAMP></A>,
          <A HREF="#ap_popenf"><SAMP>ap_popenf</SAMP></A>,
          <A HREF="#ap_pregcomp"><SAMP>ap_pregcomp</SAMP></A>,
          <A HREF="#ap_pregfree"><SAMP>ap_pregfree</SAMP></A>,
          <A HREF="#ap_psocket"><SAMP>ap_psocket</SAMP></A>,
          <A HREF="#ap_pstrcat"><SAMP>ap_pstrcat</SAMP></A>,
          <A HREF="#ap_pstrdup"><SAMP>ap_pstrdup</SAMP></A>,
          <A HREF="#ap_pstrndup"><SAMP>ap_pstrndup</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="regex_t">
      regex_t
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
          int re_magic; 
          size_t re_nsub; 
          const char *re_endp; 
          struct re_guts *re_g; 
  } regex_t;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="regmatch_t">
      regmatch_t
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="request_rec">
      request_rec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
   typedef struct request_rec request_rec; 
  struct request_rec { 
      <A HREF="#pool">pool</A> *<A HREF="#pool">pool</A>; 
      <A HREF="#conn_rec">conn_rec</A> *connection; 
      <A HREF="#server_rec">server_rec</A> *server; 
      request_rec *next; 
      request_rec *prev; 
      request_rec *main; 
      char *the_request; 
      int assbackwards; 
      int proxyreq; 
      int header_only; 
      char *protocol; 
      int proto_num; 
      char *hostname; 
      time_t request_time; 
      char *status_line; 
      int status; 
      char *method; 
      int method_number; 
      int allowed; 
      int sent_bodyct; 
      long bytes_sent; 
      time_t mtime; 
      int chunked; 
      int byterange; 
      char *boundary; 
      char *range; 
      long clength; 
      long remaining; 
      long read_length; 
      int read_body; 
      int read_chunked; 
      <A HREF="#table">table</A> *headers_in; 
      <A HREF="#table">table</A> *headers_out; 
      <A HREF="#table">table</A> *err_headers_out; 
      <A HREF="#table">table</A> *subprocess_env; 
      <A HREF="#table">table</A> *notes; 
      char *content_type; 
      char *handler; 
      char *content_encoding; 
      char *content_language; 
      <A HREF="#array_header">array_header</A> *content_languages; 
      int no_cache; 
      int no_local_copy; 
      char *unparsed_uri; 
      char *uri; 
      char *filename; 
      char *path_info; 
      char *args; 
      struct stat finfo; 
      <A HREF="#uri_components">uri_components</A> parsed_uri; 
      void *per_dir_config; 
      void *request_config; 
      const struct htaccess_result *htaccess; 
  };
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="scoreboard">
      scoreboard
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      <A HREF="#short_score">short_score</A> servers[<A HREF="#HARD_SERVER_LIMIT">HARD_SERVER_LIMIT</A>]; 
      <A HREF="#parent_score">parent_score</A> parent[<A HREF="#HARD_SERVER_LIMIT">HARD_SERVER_LIMIT</A>]; 
      <A HREF="#global_score">global_score</A> global; 
  } scoreboard;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="server_rec">
      server_rec
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  No prototype or definition available.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="short_score">
      short_score
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
  #ifdef OPTIMIZE_TIMEOUTS 
      <A HREF="#vtime_t">vtime_t</A> cur_vtime; 
      unsigned short timeout_len; 
  #endif 
      unsigned char status; 
  #if defined(STATUS) 
      unsigned long access_count; 
      unsigned long bytes_served; 
      unsigned long my_access_count; 
      unsigned long my_bytes_served; 
      unsigned long conn_bytes; 
      unsigned short conn_count; 
  #if defined(NO_GETTIMEOFDAY) 
      clock_t start_time; 
      clock_t stop_time; 
  #else 
      struct timeval start_time; 
      struct timeval stop_time; 
  #endif 
  #ifndef NO_TIMES 
      struct tms times; 
  #endif 
  #ifndef OPTIMIZE_TIMEOUTS 
      time_t last_used; 
  #endif 
      char client[32]; 
      char request[64]; 
      char vhost[32]; 
  #endif 
  } short_score;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="table">
      table
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct table {<EM>opaque-structure</EM>}
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_clear_table"><SAMP>ap_clear_table</SAMP></A>,
          <A HREF="#ap_copy_table"><SAMP>ap_copy_table</SAMP></A>,
          <A HREF="#ap_make_table"><SAMP>ap_make_table</SAMP></A>,
          <A HREF="#ap_overlay_tables"><SAMP>ap_overlay_tables</SAMP></A>,
          <A HREF="#ap_table_add"><SAMP>ap_table_add</SAMP></A>,
          <A HREF="#ap_table_addn"><SAMP>ap_table_addn</SAMP></A>,
          <A HREF="#ap_table_do"><SAMP>ap_table_do</SAMP></A>,
          <A HREF="#ap_table_get"><SAMP>ap_table_get</SAMP></A>,
          <A HREF="#ap_table_merge"><SAMP>ap_table_merge</SAMP></A>,
          <A HREF="#ap_table_mergen"><SAMP>ap_table_mergen</SAMP></A>,
          <A HREF="#ap_table_set"><SAMP>ap_table_set</SAMP></A>,
          <A HREF="#ap_table_setn"><SAMP>ap_table_setn</SAMP></A>,
          <A HREF="#ap_table_unset"><SAMP>ap_table_unset</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="uri_components">
      uri_components
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef struct { 
      char *scheme; 
      char *hostinfo; 
      char *user; 
      char *password; 
      char *hostname; 
      char *port_str; 
      char *path; 
      char *query; 
      char *fragment; 
      struct hostent *hostent; 
      unsigned short port; 
      unsigned is_initialized:1; 
      unsigned dns_looked_up:1; 
      unsigned dns_resolved:1; 
  } uri_components; 
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="vtime_t">
      vtime_t
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  typedef unsigned vtime_t;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H2>
     <A NAME="Cells">
      Global Data Cells
     </A>
    </H2>
    <HR>
    <H3>
     <A NAME="ap_day_snames">
      ap_day_snames
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char ap_day_snames[7][4];
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_month_snames">
      ap_month_snames
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  const char ap_month_snames[12][4];
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_restart_time">
      ap_restart_time
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  time_t ap_restart_time;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_scoreboard_image">
      ap_scoreboard_image
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  extern <A HREF="#scoreboard">scoreboard</A> *ap_scoreboard_image;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ap_server_argv0">
      ap_server_argv0
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char *ap_server_argv0;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_server_root">
      ap_server_root
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  char ap_server_root[<A HREF="#MAX_STRING_LEN">MAX_STRING_LEN</A>];
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ap_suexec_enabled">
      ap_suexec_enabled
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  int ap_suexec_enabled;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="core_module">
      core_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#module">module</A> core_module {<EM><A HREF="#module">module</A>-specific-info</EM>};
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_add_module"><SAMP>ap_add_module</SAMP></A>,
          <A HREF="#ap_add_named_module"><SAMP>ap_add_named_module</SAMP></A>,
          <A HREF="#module"><SAMP>module</SAMP></A>,
          <A HREF="#top_module"><SAMP>top_module</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="top_module">
      top_module
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <A HREF="#module">module</A> *top_module;
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ap_add_module"><SAMP>ap_add_module</SAMP></A>,
          <A HREF="#ap_add_named_module"><SAMP>ap_add_named_module</SAMP></A>,
          <A HREF="#core_module"><SAMP>core_module</SAMP></A>,
          <A HREF="#module"><SAMP>module</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H2>
     <A NAME="Constants">
      Constant Definitions
     </A>
    </H2>
     <P>
     Many of the compile-time choices are determined by the settings of
     various constants created with <CODE>#define</CODE> statements.
     Things like the maximum size of fixed-length buffers, the server
     version string, and operating system-specific code fragment compilation
     are controlled by constants.
     </P>
     <P>
     Some of the Apache Web server's constants (such as
     <A HREF="#SERVER_VERSION"><SAMP>SERVER_VERSION</SAMP></A>)
     can be overridden with
     compile-time definitions on the compiler command line.  Others, like
     <A HREF="#MAX_STRING_LEN"><SAMP>MAX_STRING_LEN</SAMP></A>,
     are provided as conveniences, and shouldn't be modified except under
     special circumstances.  Still others, such as
     <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
     have specific values that <STRONG>must not</STRONG> be altered.
     </P>
    <HR>
    <H3>
     <A NAME="ACCESS_CONF">
      ACCESS_CONF
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define ACCESS_CONF <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="cmd_how">
      cmd_how
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  enum cmd_how { 
      <A HREF="#RAW_ARGS">RAW_ARGS</A>, 
      <A HREF="#TAKE1">TAKE1</A>, 
      <A HREF="#TAKE2">TAKE2</A>, 
      <A HREF="#ITERATE">ITERATE</A>, 
      <A HREF="#ITERATE2">ITERATE2</A>, 
      <A HREF="#FLAG">FLAG</A>, 
      <A HREF="#NO_ARGS">NO_ARGS</A>, 
      <A HREF="#TAKE12">TAKE12</A>, 
      <A HREF="#TAKE3">TAKE3</A>, 
      <A HREF="#TAKE23">TAKE23</A>, 
      <A HREF="#TAKE123">TAKE123</A>, 
      <A HREF="#TAKE13">TAKE13</A> 
  }; 
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="DECLINED">
      DECLINED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define DECLINED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#DONE"><SAMP>DONE</SAMP></A>,
          <A HREF="#OK"><SAMP>OK</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="DONE">
      DONE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define DONE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#DECLINED"><SAMP>DECLINED</SAMP></A>,
          <A HREF="#OK"><SAMP>OK</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="FLAG">
      FLAG
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> autoindex_cmds[] =
  {
          :
      {"FancyIndexing", fancy_indexing, NULL, DIR_CMD_PERMS, FLAG,
       "Limited to 'on' or 'off' (superseded by IndexOptions FancyIndexing)"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="HARD_SERVER_LIMIT">
      HARD_SERVER_LIMIT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HARD_SERVER_LIMIT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_ACCEPTED">
      HTTP_ACCEPTED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_ACCEPTED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_BAD_GATEWAY">
      HTTP_BAD_GATEWAY
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_BAD_GATEWAY <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_BAD_REQUEST">
      HTTP_BAD_REQUEST
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_BAD_REQUEST <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_CONFLICT">
      HTTP_CONFLICT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_CONFLICT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_CONTINUE">
      HTTP_CONTINUE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_CONTINUE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_CREATED">
      HTTP_CREATED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_CREATED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_FORBIDDEN">
      HTTP_FORBIDDEN
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_FORBIDDEN <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_GATEWAY_TIME_OUT">
      HTTP_GATEWAY_TIME_OUT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_GATEWAY_TIME_OUT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_GONE">
      HTTP_GONE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_GONE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_INTERNAL_SERVER_ERROR">
      HTTP_INTERNAL_SERVER_ERROR
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_INTERNAL_SERVER_ERROR <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_LENGTH_REQUIRED">
      HTTP_LENGTH_REQUIRED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_LENGTH_REQUIRED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_METHOD_NOT_ALLOWED">
      HTTP_METHOD_NOT_ALLOWED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_METHOD_NOT_ALLOWED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_MOVED_PERMANENTLY">
      HTTP_MOVED_PERMANENTLY
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_MOVED_PERMANENTLY <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_MOVED_TEMPORARILY">
      HTTP_MOVED_TEMPORARILY
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_MOVED_TEMPORARILY <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_MULTIPLE_CHOICES">
      HTTP_MULTIPLE_CHOICES
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_MULTIPLE_CHOICES <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NON_AUTHORITATIVE">
      HTTP_NON_AUTHORITATIVE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NON_AUTHORITATIVE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NOT_ACCEPTABLE">
      HTTP_NOT_ACCEPTABLE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NOT_ACCEPTABLE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NOT_FOUND">
      HTTP_NOT_FOUND
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NOT_FOUND <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NOT_IMPLEMENTED">
      HTTP_NOT_IMPLEMENTED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NOT_IMPLEMENTED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NOT_MODIFIED">
      HTTP_NOT_MODIFIED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NOT_MODIFIED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_NO_CONTENT">
      HTTP_NO_CONTENT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_NO_CONTENT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_OK">
      HTTP_OK
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_OK <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_PARTIAL_CONTENT">
      HTTP_PARTIAL_CONTENT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_PARTIAL_CONTENT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_PAYMENT_REQUIRED">
      HTTP_PAYMENT_REQUIRED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_PAYMENT_REQUIRED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_PRECONDITION_FAILED">
      HTTP_PRECONDITION_FAILED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_PRECONDITION_FAILED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_PROXY_AUTHENTICATION_REQUIRED">
      HTTP_PROXY_AUTHENTICATION_REQUIRED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_PROXY_AUTHENTICATION_REQUIRED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_REQUEST_ENTITY_TOO_LARGE">
      HTTP_REQUEST_ENTITY_TOO_LARGE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_REQUEST_ENTITY_TOO_LARGE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_REQUEST_TIME_OUT">
      HTTP_REQUEST_TIME_OUT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_REQUEST_TIME_OUT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_REQUEST_URI_TOO_LARGE">
      HTTP_REQUEST_URI_TOO_LARGE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_REQUEST_URI_TOO_LARGE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_RESET_CONTENT">
      HTTP_RESET_CONTENT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_RESET_CONTENT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_SEE_OTHER">
      HTTP_SEE_OTHER
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_SEE_OTHER <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_SERVICE_UNAVAILABLE">
      HTTP_SERVICE_UNAVAILABLE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_SERVICE_UNAVAILABLE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_SWITCHING_PROTOCOLS">
      HTTP_SWITCHING_PROTOCOLS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_SWITCHING_PROTOCOLS <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_UNAUTHORIZED">
      HTTP_UNAUTHORIZED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_UNAUTHORIZED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_UNSUPPORTED_MEDIA_TYPE">
      HTTP_UNSUPPORTED_MEDIA_TYPE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_UNSUPPORTED_MEDIA_TYPE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_USE_PROXY">
      HTTP_USE_PROXY
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_USE_PROXY <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_VARIANT_ALSO_VARIES">
      HTTP_VARIANT_ALSO_VARIES
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_VARIANT_ALSO_VARIES <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="HTTP_VERSION_NOT_SUPPORTED">
      HTTP_VERSION_NOT_SUPPORTED
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define HTTP_VERSION_NOT_SUPPORTED <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="ITERATE">
      ITERATE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> autoindex_cmds[] =
  {
          :
      {"IndexIgnore", add_ignore, NULL, DIR_CMD_PERMS, ITERATE,
       "one or more file extensions"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="ITERATE2">
      ITERATE2
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> autoindex_cmds[] =
  {
      {"AddIcon", add_icon, BY_PATH, DIR_CMD_PERMS, ITERATE2,
       "an icon URL followed by one or more filenames"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="kill_conditions">
      kill_conditions
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  enum kill_conditions { 
      kill_never, 
      kill_always, 
      kill_after_timeout, 
      just_wait, 
      kill_only_once 
  };
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="MAX_STRING_LEN">
      MAX_STRING_LEN
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define MAX_STRING_LEN <EM>numbytes</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  char random_string[MAX_STRING_LEN];
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="MODULE_MAGIC_NUMBER">
      MODULE_MAGIC_NUMBER
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define MODULE_MAGIC_NUMBER <EM>monotonically-increasing-value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="M_CONNECT">
      M_CONNECT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_CONNECT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_DELETE">
      M_DELETE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_DELETE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_GET">
      M_GET
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_GET <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_INVALID">
      M_INVALID
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_INVALID <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_OPTIONS">
      M_OPTIONS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_OPTIONS <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_POST">
      M_POST
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_POST <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_PUT">
      M_PUT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_PUT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_TRACE"><SAMP>M_TRACE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="M_TRACE">
      M_TRACE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define M_TRACE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#M_CONNECT"><SAMP>M_CONNECT</SAMP></A>,
          <A HREF="#M_DELETE"><SAMP>M_DELETE</SAMP></A>,
          <A HREF="#M_GET"><SAMP>M_GET</SAMP></A>,
          <A HREF="#M_INVALID"><SAMP>M_INVALID</SAMP></A>,
          <A HREF="#M_OPTIONS"><SAMP>M_OPTIONS</SAMP></A>,
          <A HREF="#M_POST"><SAMP>M_POST</SAMP></A>,
          <A HREF="#M_PUT"><SAMP>M_PUT</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="NO_ARGS">
      NO_ARGS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> negotiation_cmds[] =
  {
      {"CacheNegotiatedDocs", cache_negotiated_docs, NULL, <A HREF="#RSRC_CONF">RSRC_CONF</A>, NO_ARGS,
       "no arguments (either present or absent)"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OK">
      OK
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OK <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#DECLINED"><SAMP>DECLINED</SAMP></A>,
          <A HREF="#DONE"><SAMP>DONE</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OR_AUTHCFG">
      OR_AUTHCFG
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OR_AUTHCFG <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OR_FILEINFO">
      OR_FILEINFO
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OR_FILEINFO <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OR_INDEXES">
      OR_INDEXES
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OR_INDEXES <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OR_LIMIT">
      OR_LIMIT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OR_LIMIT <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="OR_OPTIONS">
      OR_OPTIONS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define OR_OPTIONS <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#RSRC_CONF"><SAMP>RSRC_CONF</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="RAW_ARGS">
      RAW_ARGS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> autoindex_cmds[] =
  {
          :
      {"IndexOptions", add_opts, NULL, DIR_CMD_PERMS, RAW_ARGS,
       "one or more index options"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="RSRC_CONF">
      RSRC_CONF
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define RSRC_CONF <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#ACCESS_CONF"><SAMP>ACCESS_CONF</SAMP></A>,
          <A HREF="#OR_AUTHCFG"><SAMP>OR_AUTHCFG</SAMP></A>,
          <A HREF="#OR_FILEINFO"><SAMP>OR_FILEINFO</SAMP></A>,
          <A HREF="#OR_INDEXES"><SAMP>OR_INDEXES</SAMP></A>,
          <A HREF="#OR_LIMIT"><SAMP>OR_LIMIT</SAMP></A>,
          <A HREF="#OR_OPTIONS"><SAMP>OR_OPTIONS</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_BUSY_DNS">
      SERVER_BUSY_DNS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_BUSY_DNS <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_BUSY_KEEPALIVE">
      SERVER_BUSY_KEEPALIVE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_BUSY_KEEPALIVE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_BUSY_LOG">
      SERVER_BUSY_LOG
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_BUSY_LOG <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_BUSY_READ">
      SERVER_BUSY_READ
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_BUSY_READ <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_BUSY_WRITE">
      SERVER_BUSY_WRITE
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_BUSY_WRITE <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_DEAD">
      SERVER_DEAD
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_DEAD <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_GRACEFUL">
      SERVER_GRACEFUL
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_GRACEFUL <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_NUM_STATUS">
      SERVER_NUM_STATUS
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_NUM_STATUS <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_READY">
      SERVER_READY
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_READY <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_STARTING">
      SERVER_STARTING
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_STARTING <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="SERVER_SUPPORT">
      SERVER_SUPPORT
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_SUPPORT "http://www.apache.org/"
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="SERVER_VERSION">
      SERVER_VERSION
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define SERVER_VERSION <EM>string</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  Deprecated; use <A HREF="#ap_get_server_version">ap_get_server_version</A>() instead.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
    <HR>
    <H3>
     <A NAME="START_PREQUEST">
      START_PREQUEST
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define START_PREQUEST <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#STOP_PREQUEST"><SAMP>STOP_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="STOP_PREQUEST">
      STOP_PREQUEST
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  #define STOP_PREQUEST <EM>value</EM>
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#SERVER_BUSY_DNS"><SAMP>SERVER_BUSY_DNS</SAMP></A>,
          <A HREF="#SERVER_BUSY_KEEPALIVE"><SAMP>SERVER_BUSY_KEEPALIVE</SAMP></A>,
          <A HREF="#SERVER_BUSY_LOG"><SAMP>SERVER_BUSY_LOG</SAMP></A>,
          <A HREF="#SERVER_BUSY_READ"><SAMP>SERVER_BUSY_READ</SAMP></A>,
          <A HREF="#SERVER_BUSY_WRITE"><SAMP>SERVER_BUSY_WRITE</SAMP></A>,
          <A HREF="#SERVER_DEAD"><SAMP>SERVER_DEAD</SAMP></A>,
          <A HREF="#SERVER_GRACEFUL"><SAMP>SERVER_GRACEFUL</SAMP></A>,
          <A HREF="#SERVER_NUM_STATUS"><SAMP>SERVER_NUM_STATUS</SAMP></A>,
          <A HREF="#SERVER_READY"><SAMP>SERVER_READY</SAMP></A>,
          <A HREF="#SERVER_STARTING"><SAMP>SERVER_STARTING</SAMP></A>,
          <A HREF="#START_PREQUEST"><SAMP>START_PREQUEST</SAMP></A>,
          <A HREF="#ap_exists_scoreboard_image"><SAMP>ap_exists_scoreboard_image</SAMP></A>,
          <A HREF="#ap_scoreboard_image"><SAMP>ap_scoreboard_image</SAMP></A>,
          <A HREF="#ap_sync_scoreboard_image"><SAMP>ap_sync_scoreboard_image</SAMP></A>,
          <A HREF="#global_score"><SAMP>global_score</SAMP></A>,
          <A HREF="#parent_score"><SAMP>parent_score</SAMP></A>,
          <A HREF="#scoreboard"><SAMP>scoreboard</SAMP></A>,
          <A HREF="#short_score"><SAMP>short_score</SAMP></A>,
          <A HREF="#vtime_t"><SAMP>vtime_t</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE1">
      TAKE1
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> autoindex_cmds[] =
  {
          :
      {"HeaderName", add_header, NULL, DIR_CMD_PERMS, TAKE1, "a filename"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE12">
      TAKE12
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> config_log_cmds[] =
  {
          :
      {"LogFormat", log_format, NULL, <A HREF="#RSRC_CONF">RSRC_CONF</A>, TAKE12,
       "a log format string (see docs) and an optional format name"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE123">
      TAKE123
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE13">
      TAKE13
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE2">
      TAKE2
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> action_cmds[] =
  {
      {"Action", add_action, NULL, <A HREF="#OR_FILEINFO">OR_FILEINFO</A>, TAKE2,
       "a media type followed by a script name"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE23">
      TAKE23
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  static const <A HREF="#command_rec">command_rec</A> headers_cmds[] =
  {
      {"Header", header_cmd, NULL, <A HREF="#OR_FILEINFO">OR_FILEINFO</A>, TAKE23,
       "an action, header and value"},
          :
      {NULL}
  };
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE3"><SAMP>TAKE3</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
    <H3>
     <A NAME="TAKE3">
      TAKE3
     </A>
    </H3>
     <P>
     Definition:
     </P>
     <DL>
      <DD>
       <PRE>
  <EM>See</EM> <A HREF="#cmd_how">cmd_how</A>.
       </PRE>
      </DD>
     </DL>
     <P>
     Usage example:
     </P>
     <DL>
      <DD>
       <PRE>
  No examples available.
       </PRE>
      </DD>
     </DL>
     <P>
     No documentation available.
     </P>
     <DL COMPACT>
      <DT><EM>See also:</EM>
      </DT>
      <DD><A HREF="#FLAG"><SAMP>FLAG</SAMP></A>,
          <A HREF="#ITERATE"><SAMP>ITERATE</SAMP></A>,
          <A HREF="#ITERATE2"><SAMP>ITERATE2</SAMP></A>,
          <A HREF="#NO_ARGS"><SAMP>NO_ARGS</SAMP></A>,
          <A HREF="#RAW_ARGS"><SAMP>RAW_ARGS</SAMP></A>,
          <A HREF="#TAKE1"><SAMP>TAKE1</SAMP></A>,
          <A HREF="#TAKE12"><SAMP>TAKE12</SAMP></A>,
          <A HREF="#TAKE123"><SAMP>TAKE123</SAMP></A>,
          <A HREF="#TAKE13"><SAMP>TAKE13</SAMP></A>,
          <A HREF="#TAKE2"><SAMP>TAKE2</SAMP></A>,
          <A HREF="#TAKE23"><SAMP>TAKE23</SAMP></A>,
          <A HREF="#cmd_how"><SAMP>cmd_how</SAMP></A>
      </DD>
     </DL>
    <HR>
  <!-- %%END%% -->
  <!-- DO NOT EDIT ABOVE THIS LINE.  The contents of this file between -->
  <!-- the sentinel lines is generated by a script, so any edits here  -->
  <!-- will be lost the next time the script is run.                   -->
  
  <!--#include virtual="footer.html" -->
   </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/API.html
  
  Index: API.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Shambhala API notes</TITLE>
  </HEAD>
  <BODY>
  <H1>Shambhala API notes</H1>
  
  These are some notes on the Shambhala API and the data structures you
  have to deal with, etc.  They are not yet nearly complete, but
  hopefully, they will help you get your bearings.<P>
  
  A few notes on general pedagogical style here.  In the interest of
  conciseness, all structure declarations here are incomplete --- the
  real ones have more slots, that I'm not telling you about.  For the
  most part, these are reserved to one component of the server core or
  another, and should be altered by modules with caution.  However, in
  some cases, they really are things I just haven't gotten around to
  yet.  Welcome to the bleeding edge.<P>
  
  Finally, here's an outline, to give you some bare idea of what's
  coming up, and in what order:
  
  <UL>
    <LI> <A HREF="#basics">Basic concepts.</A>
         <UL>
  	 <LI> <A HREF="#HMR">Handlers, Modules, and Requests</A>
  	 <LI> <A HREF="#moduletour">A brief tour of a module</A>
         </UL>
    <LI> <A HREF="#handlers">How handlers work</A>
         <UL>
  	 <LI> <A HREF="#req_tour">A brief tour of the <CODE>request_rec</CODE></A>
  	 <LI> <A HREF="#req_orig">Where request_rec structures come from</A>
  	 <LI> <A HREF="#req_return">Handling requests, declining, and returning error codes</A>
  	 <LI> <A HREF="#resp_handlers">Special considerations for response handlers</A>
  	 <LI> <A HREF="#auth_handlers">Special considerations for authentication handlers</A>
  	 <LI> <A HREF="#log_handlers">Special considerations for logging handlers</A>
         </UL>
    <LI> <A HREF="#pools">Resource allocation and resource pools</A>
    <LI> <A HREF="#config">Configuration, commands and the like</A>
         <UL>
  	 <LI> <A HREF="#per-dir">Per-directory configuration structures</A>
  	 <LI> <A HREF="#commands">Command handling</A>
  	 <LI> <A HREF="#servconf">Side notes --- per-server configuration, virtual servers, etc.</A>
         </UL>
  </UL>
  
  <H2><A NAME="basics">Basic concepts.</A></H2>
  
  We begin with an overview of the basic concepts behind the Shambhala
  API, and how they are manifested in the code.
  
  <H3><A NAME="HMR">Handlers, Modules, and Requests</A></H3>
  
  Shambhala breaks down request handling into a series of steps, more or
  less the same way the Netscape Server API does (although Shambhala has
  a few more stages than NetSite does, as hooks for stuff I thought
  might be useful in the future).  These are:
  
  <UL>
    <LI> URI -&gt; Filename translation
    <LI> Auth ID checking [is the user who they say they are?]
    <LI> Auth access checking [is the user authorized <EM>here</EM>?]
    <LI> Access checking other than auth
    <LI> Determining MIME type of the object requested
    <LI> "Fixups" --- there aren't any of these yet, but the phase is
         intended as a hook for possible extensions like
         <CODE>SetEnv</CODE>, which don't really fit well elsewhere.
    <LI> Actually sending a response back to the client.  
    <LI> Logging the request
  </UL>
  
  These phases are handled by looking at each of a succession of
  <EM>modules</EM>, looking to see if each of them has a handler for the
  phase, and attempting invoking it if so.  The handler can typically do
  one of three things:
  
  <UL>
    <LI> <EM>Handle</EM> the request, and indicate that it has done so
         by returning the magic constant <CODE>OK</CODE>.  
    <LI> <EM>Decline</EM> to handle the request, by returning the magic
         integer constant <CODE>DECLINED</CODE>.  In this case, the
         server behaves in all respects as if the handler simply hadn't
         been there.
    <LI> Signal an error, by returning one of the HTTP error codes.
         This terminates normal handling of the request, although an
         ErrorDocument may be invoked to try to mop up, and it will be
         logged in any case.
  </UL>
  
  Most phases are terminated by the first module that handles them;
  however, for logging, "fixups", and non-access authentication
  checking, all handlers always run (barring an error).  Also, the
  response phase is unique in that modules may declare multiple handlers
  for it, via a dispatch table keyed on the MIME type of the requested
  object.  Modules may declare a response-phase handler which can handle
  <EM>any</EM> request, by giving it the key <CODE>*/*</CODE> (i.e., a
  wildcard MIME type specification).  However, wildcard handlers are
  only invoked if the server has already tried and failed to find a more
  specific response handler for the MIME type of the requested object
  (either none existed, or they all declined).<P>
  
  The handlers themselves are functions of one argument (a
  <CODE>request_rec</CODE> structure. vide infra), which returns an
  integer, as above.<P>
  
  <H3><A NAME="moduletour">A brief tour of a module</A></H3>
  
  At this point, we need to explain the structure of a module.  Our
  candidate will be one of the messier ones, the CGI module --- this
  handles both CGI scripts and the <CODE>ScriptAlias</CODE> config file
  command.  It's actually a great deal more complicated than most
  modules, but if we're going to have only one example, it might as well
  be the one with its fingers in everyplace.<P>
  
  Let's begin with handlers.  In order to handle the CGI scripts, the
  module declares a response handler for them. Because of
  <CODE>ScriptAlias</CODE>, it also has handlers for the name
  translation phase (to recognise <CODE>ScriptAlias</CODE>ed URI's), the
  type-checking phase (any <CODE>ScriptAlias</CODE>ed request is typed
  as a CGI script).<P>
  
  The module needs to maintain some per (virtual)
  server information, namely, the <CODE>ScriptAlias</CODE>es in effect;
  the module structure therefore contains pointers to a functions which
  builds these structures, and to another which combines two of them (in
  case the main server and a virtual server both have
  <CODE>ScriptAlias</CODE>es declared).<P>
  
  Finally, this module contains code to handle the
  <CODE>ScriptAlias</CODE> command itself.  This particular module only
  declares one command, but there could be more, so modules have
  <EM>command tables</EM> which declare their commands, and describe
  where they are permitted, and how they are to be invoked.  <P>
  
  A final note on the declared types of the arguments of some of these
  commands: a <CODE>pool</CODE> is a pointer to a <EM>resource pool</EM>
  structure; these are used by the server to keep track of the memory
  which has been allocated, files opened, etc., either to service a
  particular request, or to handle the process of configuring itself.
  That way, when the request is over (or, for the configuration pool,
  when the server is restarting), the memory can be freed, and the files
  closed, en masse, without anyone having to write explicit code to
  track them all down and dispose of them.  Also, a
  <CODE>cmd_parms</CODE> structure contains various information about
  the config file being read, and other status information, which is
  sometimes of use to the function which processes a config-file command
  (such as <CODE>ScriptAlias</CODE>).
  
  With no further ado, the module itself:
   
  <PRE>
  /* Declarations of handlers. */
  
  int translate_scriptalias (request_rec *);
  int type_scriptalias (request_rec *);
  int cgi_handler (request_rec *);
  
  /* Subsdiary dispatch table for response-phase handlers, by MIME type */
  
  handler_rec cgi_handlers[] = {
  { "application/x-httpd-cgi", cgi_handler },
  { NULL }
  };
  
  /* Declarations of routines to manipulate the module's configuration
   * info.  Note that these are returned, and passed in, as void *'s;
   * the server core keeps track of them, but it doesn't, and can't,
   * know their internal structure.
   */
  
  void *make_cgi_server_config (pool *);
  void *merge_cgi_server_config (pool *, void *, void *);
  
  /* Declarations of routines to handle config-file commands */
  
  char *script_alias (cmd_parms *, void *per_dir_config, char *fake, char *real);
  
  command_rec cgi_cmds[] = {
  { "ScriptAlias", script_alias, NULL, RSRC_CONF, TAKE2,
      "a fakename and a realname"},
  { NULL }
  };
  
  module cgi_module = {
     STANDARD_MODULE_STUFF,
     NULL,			/* initializer */
     NULL,			/* dir config creater */
     NULL,			/* dir merger --- default is to override */
     make_cgi_server_config,      /* server config */
     merge_cgi_server_config,	/* merge server config */
     cgi_cmds,			/* command table */
     cgi_handlers,		/* handlers */
     translate_scriptalias,	/* filename translation */
     NULL,			/* check_user_id */
     NULL,			/* check auth */
     NULL,			/* check access */
     type_scriptalias,		/* type_checker */
     NULL,			/* fixups */
     NULL				/* logger */
  };
  </PRE>
  
  <H2><A NAME="handlers">How handlers work</A></H2>
  
  The sole argument to handlers is a <CODE>request_rec</CODE> structure.
  This structure describes a particular request which has been made to
  the server, on behalf of a client.  In most cases, each connection to
  the client generates only one <CODE>request_rec</CODE> structure.<P>
  
  <H3><A NAME="req_tour">A brief tour of the <CODE>request_rec</CODE></A></H3>
  
  The <CODE>request_rec</CODE> contains pointers to a resource pool
  which will be cleared when the server is finished handling the
  request; to structures containing per-server and per-connection
  information, and most importantly, information on the request itself.<P>
  
  The most important such information is a small set of character
  strings describing attributes of the object being requested, including
  its URI, filename, content-type and content-encoding (these being filled
  in by the translation and type-check handlers which handle the
  request, respectively). <P>
  
  Other commonly used data items are tables giving the MIME headers on
  the client's original request, MIME headers to be sent back with the
  ppppresponse (which modules can add to at will), and environment variables
  for any subprocesses which are spawned off in the course of servicing
  the request.  These tables are manipulated using the
  <CODE>table_get</CODE> and <CODE>table_set</CODE> routines. <P>
  
  Finally, there are pointers to two data structures which, in turn,
  point to per-module configuration structures.  Specifically, these
  hold pointers to the data structures which the module has built to
  describe the way it has been configured to operate in a given
  directory (via <CODE>.htaccess</CODE> files or
  <CODE>&lt;Directory&gt;</CODE> sections), for private data it has
  built in the course of servicing the request (so modules' handlers for
  one phase can pass "notes" to their handlers for other phases).  There
  is another such configuration vector in the <CODE>server_rec</CODE>
  data structure pointed to by the <CODE>request_rec</CODE>, which
  contains per (virtual) server configuration data.<P>
  
  Here is an abridged declaration, giving the fields most commonly used:<P>
  
  <PRE>
  struct request_rec {
  
    pool *pool;
    conn_rec *connection;
    server_rec *server;
  
    /* What object is being requested */
    
    char *uri;
    char *filename;
    char *path_info;
    char *args;			/* QUERY_ARGS, if any */
    struct stat finfo;		/* Set by server core;
                                   * st_mode set to zero if no such file */
    
    char *content_type;
    char *content_encoding;
    
    /* MIME header environments, in and out.  Also, an array containing
     * environment variables to be passed to subprocesses, so people can
     * write modules to add to that environment.
     *
     * The difference between headers_out and err_headers_out is that the
     * latter are printed even on error, and persist across internal redirects
     * (so the headers printed for ErrorDocument handlers will have them).
     */
    
    table *headers_in;
    table *headers_out;
    table *err_headers_out;
    table *subprocess_env;
  
    /* Info about the request itself... */
    
    int header_only;		/* HEAD request, as opposed to GET */
    char *protocol;		/* Protocol, as given to us, or HTTP/0.9 */
    char *method;			/* GET, HEAD, POST, etc. */
    int method_number;		/* M_GET, M_POST, etc. */
  
    /* Info for logging */
  
    char *the_request;
    int bytes_sent;
  
    /* A flag which modules can set, to indicate that the data being
     * returned is volatile, and clients should be told not to cache it.
     */
  
    int no_cache;
  
    /* Various other config info which may change with .htaccess files
     * These are config vectors, with one void* pointer for each module
     * (the thing pointed to being the module's business).
     */
    
    void *per_dir_config;		/* Options set in config files, etc. */
    void *request_config;		/* Notes on *this* request */
    
  };
  
  </PRE>
  
  <H3><A NAME="req_orig">Where request_rec structures come from</A></H3>
  
  Most <CODE>request_rec</CODE> structures are built by reading an HTTP
  request from a client, and filling in the fields.  However, there are
  a few exceptions:
  
  <UL>
    <LI> If the request is to an imagemap, a type map (i.e., a
         <CODE>*.var</CODE> file), or a CGI script which returned a
         local "Location:", then the resource which the user requested
         is going to be ultimately located by some URI other than what
         the client originally supplied.  In this case, the server does
         an <EM>internal redirect</EM>, constructing a new
         <CODE>request_rec</CODE> for the new URI, and processing it
         almost exactly as if the client had requested the new URI
         directly. <P>
  
    <LI> If some handler signaled an error, and an
         <CODE>ErrorDocument</CODE> is in scope, the same internal
         redirect machinery comes into play.<P>
  
    <LI> Finally, a handler occasionally needs to investigate "what
         would happen if" some other request were run.  For instance,
         the directory indexing module needs to know what MIME type
         would be assigned to a request for each directory entry, in
         order to figure out what icon to use.<P>
  
         Such handlers can construct a <EM>sub-request</EM>, using the
         functions <CODE>sub_req_lookup_file</CODE> and
         <CODE>sub_req_lookup_uri</CODE>; this constructs a new
         <CODE>request_rec</CODE> structure and processes it as you
         would expect, up to but not including the point of actually
         sending a response.  (These functions skip over the access
         checks if the sub-request is for a file in the same directory
         as the original request).<P>
  
         (Server-side includes work by building sub-requests and then
         actually invoking the response handler for them, via the
         function <CODE>run_sub_request</CODE>).
  </UL>
  
  <H3><A NAME="req_return">Handling requests, declining, and returning error codes</A></H3>
  
  As discussed above, each handler, when invoked to handle a particular
  <CODE>request_rec</CODE>, has to return an <CODE>int</CODE> to
  indicate what happened.  That can either be
  
  <UL>
    <LI> OK --- the request was handled successfully.  This may or may
         not terminate the phase.
    <LI> DECLINED --- no erroneous condition exists, but the module
         declines to handle the phase; the server tries to find another.
    <LI> an HTTP error code, which aborts handling of the request.
  </UL>
  
  Note that if the error code returned is <CODE>REDIRECT</CODE>, then
  the module should put a <CODE>Location</CODE> in the request's
  <CODE>headers_out</CODE>, to indicate where the client should be
  redirected <EM>to</EM>. <P>
  
  <H3><A NAME="resp_handlers">Special considerations for response handlers</A></H3>
  
  Handlers for most phases do their work by simply setting a few fields
  in the <CODE>request_rec</CODE> structure (or, in the case of access
  checkers, simply by returning the correct error code).  However,
  response handlers have to actually send a request back to the client. <P>
  
  They should begin by sending an HTTP response header, using the
  function <CODE>send_http_header</CODE>.  (You don't have to do
  anything special to skip sending the header for HTTP/0.9 requests; the
  function figures out on its own that it shouldn't do anything).  If
  the request is marked <CODE>header_only</CODE>, that's all they should
  do; they should return after that, without attempting any further
  output.  <P>
  
  Otherwise, they should produce a request body which responds to the
  client as appropriate.  The primitives for this are <CODE>rputc</CODE>
  and <CODE>rprintf</CODE>, for internally generated output, and
  <CODE>send_fd</CODE>, to copy the contents of some <CODE>FILE *</CODE>
  straight to the client.  <P>
  
  One final consideration: when doing I/O to the client, there is the
  possibility of indefinite delays.  It is therefore important to arm a
  timeout before initiating I/O to the client.<P>
  
  At this point, you should more or less understand the following piece
  of code, which is the handler which handles <CODE>GET</CODE> requests
  which have no more specific handler; it also shows how conditional
  <CODE>GET</CODE>s can be handled, if it's desirable to do so in a
  particular response handler.  (The functions <CODE>pfopen</CODE> and
  <CODE>pfclose</CODE> tie the <CODE>FILE *</CODE> returned into the
  resource pool machinery, so it will be closed even if the request is
  aborted).<P>
  
  <PRE>
  int default_handler (request_rec *r)
  {
      int errstatus;
      FILE *f;
      
      if (r-&gt;method_number != M_GET) return DECLINED;
      if (r-&gt;finfo.st_mode == 0) return NOT_FOUND;
  	
      if ((errstatus = set_content_length (r, r-&gt;finfo.st_size))
  	|| (errstatus = set_last_modified (r, r-&gt;finfo.st_mtime)))
          return errstatus;
      
      f = pfopen (r-&gt;pool, r-&gt;filename, "r");
  
      if (f == NULL) {
          log_reason("file permissions deny server access", r-&gt;filename, r);
          return FORBIDDEN;
      }
        
      register_timeout ("send", r);
      send_http_header (r);
  
      if (!r-&gt;header_only) {
  	send_fd (f, r);
      }
      
      kill_timeout(r);
      pfclose (r-&gt;pool, f);
      return OK;
  }
  </PRE>
  
  Finally, if all of this is too much of a challenge, there are a few
  ways out of it.  First off, as shown above, a response handler which
  has not yet produced any output can simply return an error code, in
  which case the server will automatically produce an error response.
  Secondly, it can punt to some other handler by invoking
  <CODE>internal_redirect</CODE>, which is how the internal redirection
  machinery discussed above is invoked.  A response handler which has
  internally redirected should always return <CODE>OK</CODE>. <P>
  
  (Invoking <CODE>internal_redirect</CODE> from handlers which are
  <EM>not</EM> response handlers will lead to serious confusion).
  
  <H3><A NAME="auth_handlers">Special considerations for authentication handlers</A></H3>
  
  Stuff that should be discussed here in detail:
  
  <UL>
    <LI> Authentication-phase handlers not invoked unless auth is
         configured for the directory.
    <LI> Common auth configuration stored in the core per-dir
         configuration; it has accessors <CODE>auth_type</CODE>,
         <CODE>auth_name</CODE>, and <CODE>requires</CODE>.
    <LI> Common routines, to handle the protocol end of things, at least
         for HTTP basic authentication (<CODE>get_basic_auth_pw</CODE>,
         which sets the <CODE>connection-&gt;user</CODE> structure field
         automatically, and <CODE>note_basic_auth_failure</CODE>, which
         arranges for the proper <CODE>WWW-Authenticate:</CODE> header
         to be sent back).
  </UL>
  
  <H3><A NAME="log_handlers">Special considerations for logging handlers</A></H3>
  
  When a request has internally redirected, there is the question of
  what to log.  Shambhala handles this by bundling the entire chain of
  redirects into a list of <CODE>request_rec</CODE> structures which are
  threaded through the <CODE>r-&gt;prev</CODE> and <CODE>r-&gt;next</CODE>
  pointers.  The <CODE>request_rec</CODE> which is passed to the logging
  handlers in such cases is the one which was originally built for the
  intial request from the client; note that the bytes_sent field will
  only be correct in the last request in the chain (the one for which a
  response was actually sent). 
  
  <H2><A NAME="pools">Resource allocation and resource pools</A></H2>
  
  One of the problems of writing and designing a server-pool server is
  that of preventing leakage, that is, allocating resources (memory,
  open files, etc.), without subsequently releasing them.  The resource
  pool machinery is designed to prevent this.  Stuff that should be
  discussed here in detail:
  
  <UL>
    <LI> Allocating memory --- <CODE>palloc</CODE> and friends
    <LI> The array and table stuff
    <LI> Files and file descriptors
    <LI> sub-pools and <CODE>destroy_sub_request</CODE>
  </UL>
  
  <H2><A NAME="config">Configuration, commands and the like</A></H2>
  
  One of the design goals for this server was to maintain external
  compatibility with the NCSA 1.3 server --- that is, to read the same
  configuration files, to process all the directives therein correctly,
  and in general to be a drop-in replacement for NCSA.  On the other
  hand, another design goal was to move as much of the server's
  functionality into modules which have as little as possible to do with
  the monolithic server core.  The only way to reconcile these goals is
  to move the handling of most commands from the central server into the
  modules.  <P>
  
  However, just giving the modules command tables is not enough to
  divorce them completely from the server core.  The server has to
  remember the commands in order to act on them later.  That involves
  maintaining data which is private to the modules, and which can be
  either per-server, or per-directory.  Most things are per-directory,
  including in particular access control and authorization information,
  but also information on how to determine file types from suffixes,
  which can be modified by <CODE>AddType</CODE> and
  <CODE>DefaultType</CODE> directives, and so forth.  In general, the
  governing philosophy is that anything which <EM>can</EM> be made
  configurable by directory should be; per-server information is
  generally used in the standard set of modules for information like
  <CODE>Alias</CODE>es and <CODE>Redirect</CODE>s which come into play
  before the request is tied to a particular place in the underlying
  file system. <P>
  
  Another requirement for emulating the NCSA server is being able to
  handle the per-directory configuration files, generally called
  <CODE>.htaccess</CODE> files, though even in the NCSA server they can
  contain directives which have nothing at all to do with access
  control.  Accordingly, after URI -&gt; filename translation, but before
  performing any other phase, the server walks down the directory
  hierarchy of the underlying filesystem, following the translated
  pathname, to read any <CODE>.htaccess</CODE> files which might be
  present.  The information which is read in then has to be
  <EM>merged</EM> with the applicable information from the server's own
  config files (either from the <CODE>&lt;Directory&gt;</CODE> sections
  in <CODE>access.conf</CODE>, or from defaults in
  <CODE>srm.conf</CODE>, which actually behaves for most purposes almost
  exactly like <CODE>&lt;Directory /&gt;</CODE>).<P>
  
  Finally, after having served a request which involved reading
  <CODE>.htaccess</CODE> files, we need to discard the storage allocated
  for handling them.  That is solved the same way it is solved wherever
  else similar problems come up, by tying those structures to the
  per-transaction resource pool.  <P>
  
  <H3><A NAME="per-dir">Per-directory configuration structures</A></H3>
  
  Let's look out how all of this plays out in <CODE>mod_mime.c</CODE>,
  which defines the file typing handler which emulates the NCSA server's
  behavior of determining file types from suffixes.  What we'll be
  looking at, here, is the code which implements the
  <CODE>AddType</CODE> and <CODE>AddEncoding</CODE> commands.  These
  commands can appear in <CODE>.htaccess</CODE> files, so they must be
  handled in the module's private per-directory data, which in fact,
  consists of two separate <CODE>table</CODE>s for MIME types and
  encoding information, and is declared as follows:
  
  <PRE>
  typedef struct {
      table *forced_types;	/* Additional AddTyped stuff */
      table *encoding_types;	/* Added with AddEncoding... */
  } mime_dir_config;
  </PRE>
  
  When the server is reading a configuration file, or
  <CODE>&lt;Directory&gt;</CODE> section, which includes one of the MIME
  module's commands, it needs to create a <CODE>mime_dir_config</CODE>
  structure, so those commands have something to act on.  It does this
  by invoking the function it finds in the module's "create per-dir
  config slot", with two arguments: the name of the directory to which
  this configuration information applies (or <CODE>NULL</CODE> for
  <CODE>srm.conf</CODE>), and a pointer to a resource pool in which the
  allocation should happen. <P>
  
  (If we are reading a <CODE>.htaccess</CODE> file, that resource pool
  is the per-request resource pool for the request; otherwise it is a
  resource pool which is used for configuration data, and cleared on
  restarts.  Either way, it is important for the structure being created
  to vanish when the pool is cleared, by registering a cleanup on the
  pool if necessary). <P>
  
  For the MIME module, the per-dir config creation function just
  <CODE>palloc</CODE>s the structure above, and a creates a couple of
  <CODE>table</CODE>s to fill it.  That looks like this:
  
  <PRE>
  void *create_mime_dir_config (pool *p, char *dummy)
  {
      mime_dir_config *new =
        (mime_dir_config *) palloc (p, sizeof(mime_dir_config));
  
      new-&gt;forced_types = make_table (p, 4);
      new-&gt;encoding_types = make_table (p, 4);
      
      return new;
  }
  </PRE>
  
  Now, suppose we've just read in a <CODE>.htaccess</CODE> file.  We
  already have the per-directory configuration structure for the next
  directory up in the hierarchy.  If the <CODE>.htaccess</CODE> file we
  just read in didn't have any <CODE>AddType</CODE> or
  <CODE>AddEncoding</CODE> commands, its per-directory config structure
  for the MIME module is still valid, and we can just use it.
  Otherwise, we need to merge the two structures somehow. <P>
  
  To do that, the server invokes the module's per-directory config merge
  function, if one is present.  That function takes three arguments:
  the two structures being merged, and a resource pool in which to
  allocate the result.  For the MIME module, all that needs to be done
  is overlay the tables from the new per-directory config structure with
  those from the parent:
  
  <PRE>
  void *merge_mime_dir_configs (pool *p, void *parent_dirv, void *subdirv)
  {
      mime_dir_config *parent_dir = (mime_dir_config *)parent_dirv;
      mime_dir_config *subdir = (mime_dir_config *)subdirv;
      mime_dir_config *new =
        (mime_dir_config *)palloc (p, sizeof(mime_dir_config));
  
      new-&gt;forced_types = overlay_tables (p, subdir-&gt;forced_types,
  					parent_dir-&gt;forced_types);
      new-&gt;encoding_types = overlay_tables (p, subdir-&gt;encoding_types,
  					  parent_dir-&gt;encoding_types);
  
      return new;
  }
  </PRE>
  
  As a note --- if there is no per-directory merge function present, the
  server will just use the subdirectory's configuration info, and ignore
  the parent's.  For some modules, that works just fine (e.g., for the
  includes module, whose per-directory configuration information
  consists solely of the state of the <CODE>XBITHACK</CODE>), and for
  those modules, you can just not declare one, and leave the
  corresponding structure slot in the module itself <CODE>NULL</CODE>.<P>
  
  <H3><A NAME="commands">Command handling</A></H3>
  
  Now that we have these structures, we need to be able to figure out
  how to fill them.  That involves processing the actual
  <CODE>AddType</CODE> and <CODE>AddEncoding</CODE> commands.  To find
  commands, the server looks in the module's <CODE>command table</CODE>.
  That table contains information on how many arguments the commands
  take, and in what formats, where it is permitted, and so forth.  That
  information is sufficient to allow the server to invoke most
  command-handling functions with preparsed arguments.  Without further
  ado, let's look at the <CODE>AddType</CODE> command handler, which
  looks like this (the <CODE>AddEncoding</CODE> command looks basically
  the same, and won't be shown here):
  
  <PRE>
  char *add_type(cmd_parms *cmd, mime_dir_config *m, char *ct, char *ext)
  {
      if (*ext == '.') ++ext;
      table_set (m-&gt;forced_types, ext, ct);
      return NULL;
  }
  </PRE>
  
  This command handler is unusually simple.  As you can see, it takes
  four arguments, two of which are preparsed arguments, the third being
  the per-directory configuration structure for the module in question,
  and the fourth being a pointer to a <CODE>cmd_parms</CODE> structure.
  That structure contains a bunch of arguments which are frequently of
  use to some, but not all, commands, including a resource pool (from
  which memory can be allocated, and to which cleanups should be tied),
  and the (virtual) server being configured, from which the module's
  per-server configuration data can be obtained if required.<P>
  
  Another way in which this particular command handler is unusually
  simple is that there are no error conditions which it can encounter.
  If there were, it could return an error message instead of
  <CODE>NULL</CODE>; this causes an error to be printed out on the
  server's <CODE>stderr</CODE>, followed by a quick exit, if it is in
  the main config files; for a <CODE>.htaccess</CODE> file, the syntax
  error is logged in the server error log (along with an indication of
  where it came from), and the request is bounced with a server error
  response (HTTP error status, code 500). <P>
  
  The MIME module's command table has entries for these commands, which
  look like this:
  
  <PRE>
  command_rec mime_cmds[] = {
  { "AddType", add_type, NULL, OR_FILEINFO, TAKE2, 
      "a mime type followed by a file extension" },
  { "AddEncoding", add_encoding, NULL, OR_FILEINFO, TAKE2, 
      "an encoding (e.g., gzip), followed by a file extension" },
  { NULL }
  };
  </PRE>
  
  The entries in these tables are:
  
  <UL>
    <LI> The name of the command
    <LI> The function which handles it
    <LI> a <CODE>(void *)</CODE> pointer, which is passed in the
         <CODE>cmd_parms</CODE> structure to the command handler ---
         this is useful in case many similar commands are handled by the
         same function.
    <LI> A bit mask indicating where the command may appear.  There are
         mask bits corresponding to each <CODE>AllowOverride</CODE>
         option, and an additional mask bit, <CODE>RSRC_CONF</CODE>,
         indicating that the command may appear in the server's own
         config files, but <EM>not</EM> in any <CODE>.htaccess</CODE>
         file.
    <LI> A flag indicating how many arguments the command handler wants
         preparsed, and how they should be passed in.
         <CODE>TAKE2</CODE> indicates two preparsed arguments.  Other
         options are <CODE>TAKE1</CODE>, which indicates one preparsed
         argument, <CODE>FLAG</CODE>, which indicates that the argument
         should be <CODE>On</CODE> or <CODE>Off</CODE>, and is passed in
         as a boolean flag, <CODE>RAW_ARGS</CODE>, which causes the
         server to give the command the raw, unparsed arguments
         (everything but the command name itself).  There is also
         <CODE>ITERATE</CODE>, which means that the handler looks the
         same as <CODE>TAKE1</CODE>, but that if multiple arguments are
         present, it should be called multiple times, and finally
         <CODE>ITERATE2</CODE>, which indicates that the command handler
         looks like a <CODE>TAKE2</CODE>, but if more arguments are
         present, then it should be called multiple times, holding the
         first argument constant.
    <LI> Finally, we have a string which describes the arguments that
         should be present.  If the arguments in the actual config file
         are not as required, this string will be used to help give a
         more specific error message.  (You can safely leave this
         <CODE>NULL</CODE>). 
  </UL>
  
  Finally, having set this all up, we have to use it.  This is
  ultimately done in the module's handlers, specifically for its
  file-typing handler, which looks more or less like this; note that the
  per-directory configuration structure is extracted from the
  <CODE>request_rec</CODE>'s per-directory configuration vector by using
  the <CODE>get_module_config</CODE> function.
  
  <PRE>
  int find_ct(request_rec *r)
  {
      int i;
      char *fn = pstrdup (r-&gt;pool, r-&gt;filename);
      mime_dir_config *conf =
        (mime_dir_config *)get_module_config(r-&gt;per_dir_config, &mime_module);
      char *type;
  
      if (S_ISDIR(r-&gt;finfo.st_mode)) {
          r-&gt;content_type = DIR_MAGIC_TYPE;
  	return OK;
      }
      
      if((i=rind(fn,'.')) &lt; 0) return DECLINED;
      ++i;
  
      if ((type = table_get (conf-&gt;encoding_types, &fn[i])))
      {
          r-&gt;content_encoding = type;
  
  	/* go back to previous extension to try to use it as a type */
  	
          fn[i-1] = '\0';
  	if((i=rind(fn,'.')) &lt; 0) return OK;
  	++i;
      }
  
      if ((type = table_get (conf-&gt;forced_types, &fn[i])))
      {
          r-&gt;content_type = type;
      }
      
      return OK;
  }
  
  </PRE>
  
  <H3><A NAME="servconf">Side notes --- per-server configuration, virtual servers, etc.</A></H3>
  
  The basic ideas behind per-server module configuration are basically
  the same as those for per-directory configuration; there is a creation
  function and a merge function, the latter being invoked where a
  virtual server has partially overriden the base server configuration,
  and a combined structure must be computed.  (As with per-directory
  configuration, the default if no merge function is specified, and a
  module is configured in some virtual server, is that the base
  configuration is simply ignored). <P>
  
  The only substantial difference is that when a command needs to
  configure the per-server private module data, it needs to go to the
  <CODE>cmd_parms</CODE> data to get at it.  Here's an example, from the
  alias module, which also indicates how a syntax error can be returned
  (note that the per-directory configuration argument to the command
  handler is declared as a dummy, since the module doesn't actually have
  per-directory config data):
  
  <PRE>
  char *add_redirect(cmd_parms *cmd, void *dummy, char *f, char *url)
  {
      server_rec *s = cmd-&gt;server;
      alias_server_conf *conf =
          (alias_server_conf *)get_module_config(s-&gt;module_config,&amp;alias_module);
      alias_entry *new = push_array (conf-&gt;redirects);
  
      if (!is_url (url)) return "Redirect to non-URL";
      
      new-&gt;fake = f; new-&gt;real = url;
      return NULL;
  }
  </PRE>
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/anoncvs.txt
  
  Index: anoncvs.txt
  ===================================================================
  Anonymous CVS access is available again, but on a different system
  than before.  In addition to the anonymous CVS repository, there is
  also
  
      <http://cvs.apache.org/viewcvs.cgi/>
  
  and an rsync server at cvs.apache.org.  Try
  
      rsync cvs.apache.org::
  
  to get a listing of the modules.
  
      rsync -avz cvs.apache.org::module-name local-directory-name
  
  to grab or update a local copy of the "module-name" sources.
  
  ======================================================================
                            HOW TO USE ANONCVS
  ======================================================================
  
  Developers with commit access to the Apache source tree normally
  use CVS to keep their local copies of the source tree up to date
  automatically.  This is a very useful ability that also allows
  for getting change history of files, diffs between arbitrary 
  versions, etc.  This is also the method used to commit changes 
  to the source tree.
  
  For those who do not have commit access to the source tree, anoncvs
  offers an alternative way to do most of this using a copy of the
  CVS repository.  The big difference is, of course, that you can't
  commit changes using anoncvs.
  
  The first step in using anoncvs is setting your CVSROOT environment 
  variable.  This tells CVS to what server it should connect.  There
  are currently two, and the only available method to access these
  anoncvs servers is pserver; you need a reasonably recent CVS client
  to use it.  An example of setting it from a Bourne shell:
  
    user@host:~$ CVSROOT=:pserver:anoncvs@cvs.apache.org:/home/cvspublic
    user@host:~$ export CVSROOT
  
  It is very important that you do not put a trailing "/" on the value
  of CVSROOT.
  
  The two anoncvs servers currently available are:
  
    :pserver:anoncvs@cvs.apache.org:/home/cvspublic
  
  and
  
    :pserver:anoncvs@CVS.Sourcery.Org:/cvs/apache
  
  Choose one of these values for your setting of CVSROOT.
  Once you have set your CVSROOT, you need to log in:
  
    user@host:~$ cvs login
    (Logging in to anoncvs@cvs.apache.org:/home/cvspublic)
    CVS password: 
  
  The password is "anoncvs" (without the quotation marks) for
  both servers.
  
  To check out the current development tree:
  
    user@host:~$ cvs checkout httpd-2.0
    cvs server: Updating httpd-2.0
    U httpd-2.0/ABOUT_APACHE
    U httpd-2.0/Announcement
    U httpd-2.0/Apache.dsp
    [...]
    U httpd-2.0/test/test_select.c
    U httpd-2.0/test/time-sem.c
    U httpd-2.0/test/zb.c
    user@host:~$ ls httpd-2.0
    ABOUT_APACHE            InstallBin.dsp          emacs-style
    Announcement            Makefile.in             hints.m4
    Apache.dsp              Makefile.win            include
    Apache.dsw              STATUS                  modules
    ApacheCore.def          acinclude.m4            os
    ApacheCore.dsp          build                   server
    ApacheCoreDll.dsp       buildconf               srclib
    CHANGES                 configure.in            support
    CVS                     docs                    test
    user@host:~$ cd httpd-2.0/srclib
    user@host:~/httpd-2.0/srclib$ cvs checkout apr
    U apr/APRDesign
    U apr/APRVARS.in
    U apr/Makefile.in
    [...]
    U apr/user/unix/.cvsignore
    U apr/user/unix/Makefile.in
    U apr/user/unix/homedir.c
    user@host:~/httpd-2.0/srclib$ cvs checkout apr-util
    U apr-util/.cvsignore
    U apr-util/Makefile.in
    U apr-util/STATUS
    [...]
    U apr-util/test/.cvsignore
    U apr-util/test/Makefile.in
    U apr-util/test/testdbm.c
  
  
  To checkout the stable release tree (version 1.3):
  
    user@host:~$ cvs checkout apache-1.3
  
  After 1.3a1, there was a source tree reorganization which resulted
  in the tree being split into apache-1.2 and apache-1.3.  apache-1.2
  is everything from before the reorganization, apache-1.3 is from
  after.  apache-1.3 still retains the change histories of the files,
  however since they are in different locations you can not build an
  apache-1.3 tree from before the reorganization.  The current development
  tree (httpd-2.0) was largely restructured and repopulated, and
  the layout is still in a bit of flux.
  
  To update your local tree to the latest version:
  
    user@host:~$ cvs update -dP apache-1.3
  
  or
  
    user@host:~/apache-1.3/$ cvs update -dP .
  
  etc.  
  
    P core/buff.c
    P core/conf.h
    RCS file: /home/cvs/apache-1.3/src/core/http_core.c,v
    retrieving revision 1.109
    retrieving revision 1.110
    Merging differences between 1.109 and 1.110 into http_core.c
    M core/http_core.c
  
  The P means that the local copy was patched to update it to the 
  current version.  The M means that your local copy was modified,
  but that the changes were merged into your copy successfully.  If
  you see a C that means that there was a conflict in merging 
  the changes and that you need to review the file manually (hint: 
  search for >>>> in the file) to merge the changes.
  
  To obtain a diff of changes between your checked out copy and 
  the source tree at the time you checked it out:
  
    user@host:~$ cvs diff -u apache-1.3
  
  To obtain a diff against the current source tree, be sure to
  do an update before the diff.
  
  The idea of having an anoncvs server is to make it much easier
  for people interested in doing development to have access to the
  CVS tree so they can submit patches against the current source
  tree and can keep their patched version up to date without 
  having to manually merge their patches all the time.
  
  
  
  1.1                  httpd-site/xdocs/dev/binaries.html
  
  Index: binaries.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
    <TITLE>Apache Unix Binary Distributions</TITLE>
   </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  <!--#include virtual="header.html" -->
    <H1 ALIGN="CENTER">Apache Unix Binary Distributions</H1>
  
  <P>
  From Apache 1.3.5 onwards binary releases are made with a script which
  is part of every standard Apache distribution:
  
  <P>
  <DL>
  <DD><CODE>apache_1.3.x/src/helpers/binbuild.sh</CODE>
  </DL>
  
  <P>
  To create a binary distribution with this script you have to follow
  these steps:
  
  <UL>
  <LI><CODE>gzip -d -c apache_1.3.x.tar.gz | tar xvf -</CODE>
      <BR>(<small><cite>You may use <code>cvs export</code>, but please
           make sure that you rename the directory to reflect the complete
           version number, e.g. <code>apache_1.3.5</code>.</cite></small>)
  <LI><CODE>cd apache_1.3.x</CODE>
  <LI><CODE>./src/helpers/binbuild.sh &lt;your-email-address&gt;</CODE>
  </UL>
  
  <P>
  If you don't specify your email adddress the script will build
  one for you based on your account and hostname.
  After the execution of binbuild.sh you should see the following
  output:
  
  <DL>
  <DD><CODE>Building Apache 1.3.x binary distribution...</CODE>
  <DD><CODE>Platform is "<cite>platform</cite>"...</CODE>
  <DD><CODE>Binary image successfully created...</CODE>
  <DD><CODE>Server version: Apache/1.3.x (Unix)</CODE>
  <DD><CODE>Server built:   <cite>date</cite></CODE>
  <DD><CODE>Creating supplementary files...</CODE>
  <DD><CODE>Creating distribution archive and readme file...</CODE>
  <DD><CODE>Ready.</CODE>
  <DD><CODE>You can find the binary archive
            (apache_1.3.x-<cite>platform</cite>.tar.gz)</CODE>
  <DD><CODE>and the readme file (apache_1.3.x-<cite>platform</cite>.README) in the</CODE>
  <DD><CODE>parent directory.</CODE>
  </DL>
  
  <P>
  Before the archive is created the binbuild script checks if the httpd
  was successfully created. If anything went wrong you will see a
  corresponding error message. Take a look at the file
  <code>build.log</code> to find out why the build failed.
  
  <P>
  Binaries are configured with the following APACI options:
  
  <PRE>
      --with-layout=BinaryDistribution
      --enable-module=most
      --enable-shared=max
  </PRE>
  
  <P>
  If your platform has no DSO support you have to edit binbuild.sh and
  remove the <CODE>--enable-shared</CODE> option from the
  <CODE>CONFIGPARAM</CODE> variable. If you need to specify compiler
  options or flags you can simply pass them to the binbuild script, e.g.
  <CODE>CFLAGS=-Dfoobar&nbsp;src/helpers/binbuild.sh</CODE>.
  
  <P>
  Feel encouraged to create PGP or MD5 signatures:
  <blockquote><code>
  md5 apache_1.3.x-<i>platform</i>.tar.gz &gt;
  	 apache_1.3.x-<i>platform</i>.tar.gz.md5
  </code></blockquote>
  or if md5 is not present on your system
  <blockquote><code>
  openssl md5 apache_1.3.x-<i>platform</i>.tar.gz &gt;
  	 apache_1.3.x-<i>platform</i>.tar.gz.md5
  </code></blockquote>
  And create a PGP signature with 
  <blockquote><code>
  pgps -b -a &lt;your-email-address&gt; apache_1.3.x-<i>platform</i>.tar.gz
  </code></blockquote>
  or (pgp-2.6x):
  <blockquote><code>pgp -sba apache_1.3.x-<i>platform</i>.tar.gz</code></blockquote>
  Make sure your PGP keys are already present in the <CODE>KEYS</CODE> file. For completeness sake you should also sign the <code>apache_1.3.x-<i>platform</i>.README</code>
  file as well.
  <P>
  After you have successfully built the binary distribution, if you are
  a core developer, you can upload the archive and README to the Apache
  site. An easy way to do this is with 'ssh'.
  <blockquote><code>
  scp apache_1.3.x-<i>platform</i>.* www.apache.org:/www/apache.org/dist/binaries/<i>platform</i>
  </code></blockquote>
  Typically this should only be done after the web site has been update (see step
  30 in the <a href="how-to-release.html">release notes</a>) and if possible
  before the announcement.
  <P>
  You should then verify that the permissions on the file are 0664 (rw-rw-r--).
  
  <H2>Binary Contributors</H2>
  <P>
  Here is a list of platforms and the people who volunteered to compile
  binary releases:
  
  <H4>AIX</H4>
  <UL>
  <LI>rs6000-ibm-aix3.2.5:	Sameer Parekh
  <LI>rs6000-ibm-aix4.1:		Lars Eilebrecht
  <LI>rs6000-ibm-aix4.2:		Ralf S. Engelschall, Bill Stoddard
  <LI>rs6000-ibm-aix4.3.2:        Bill Stoddard
  </UL>
  
  <H4>A/UX</H4>
  <UL>
  <LI>m68k-apple-aux3.1.1:	Jim Jagielski
  </UL>
  
  <H4>BeOS</H4>
  <UL>
  <LI>i386-whatever-beos:		David Reid
  </UL>
  
  <H4>BSDI</H4>
  <UL>
  <LI>i386-whatever-bsdi:		David Reid
  </UL>
  
  <H4>Darwin / Mac OS X</H4>
  <UL>
  <LI>powerpc-apple-rhapsody5.6:	Wilfredo S&aacute;nchez
  <LI>powerpc-apple-darwin1.4:	Dirk-Willem van Gulik
  </UL>
  
  <H4>DGUX</H4>
  <UL>
  <LI>m88k-dg-dgux5.4R2.01:	Sameer parekh
  </UL>
  
  <H4>Digital Unix (aka OSF)</H4>
  <UL>
  <LI>alpha-dec-osf3.0:		Sameer Parekh
  <LI>alpha-dec-osf4.0:		Lars Eilebrecht
  </UL>
  
  <H4>FreeBSD</H4>
  <UL>
  <LI>i386-whatever-freebsd2.1:	Andrew Wilson
  <LI>i386-whatever-freebsd2.2.8:  Jim Jagielski
  <LI>i386-whatever-freebsd3.0:    Ken Coar
  <LI>i686-whatever-freebsd3.1:	Ralf S. Engelschall
  <LI>i686-whatever-freebsd4.x:	Dirk-Willem van Gulik
  </UL>
  
  <H4>HPUX</H4>
  <UL>
  <LI>hppa1.1-hp-hpux:		Rob Hartill
  </UL>
  
  <H4>Irix</H4>
  <UL>
  <LI>mips-sgi-irix6.2:		Ralf S. Engelschall, Lars Eilebrecht
  </UL>
  
  <H4>Linux</H4>
  <UL>
  <LI>armv4l-whatever-linux2:     Rasmus Lerdorf
  <LI>i386-whatever-linux(ELF):	Aram Mirzadeh
  <LI>i386-whatever-linux(a.out):  Sameer Parekh
  <LI>i586-whatever-linux2:  	Ralf S. Engelschall, Lars Eilebrecht
  <LI>i686-whatever-linux2:	Lars Eilebrecht
  <LI>mips-whatever-linux2:        Lars Eilebrecht
  <LI>sparc-whatever-linux2:       Lars Eilebrecht
  </UL>
  
  <H4>NetBSD</H4>
  <UL>
  <LI>i386-whatever-netBSD:	Lars Eilebrecht
  </UL>
  
  <H4>NeXT</H4>
  <UL>
  <LI>m88k-next-next:		Rob Hartill
  </UL>
  
  <H4>ReliantUNIX/SINIX</H4>
  <UL>
  <LI>mips-sni-svr4:		Martin Kraemer
  <LI>i386-sni-svr4:		Martin Kraemer
  </UL>
  
  <H4>Solaris/SunOS</H4>
  <UL>
  <LI>i386-sun-solaris2.5:	Sameer Parekh
  <LI>i386-sun-solaris2.7:        Cliff Skolnick
  <LI>sparc-sun-solaris2.5:	Lars Eilebrecht
  <LI>sparc-sun-solaris2.6:	Lars Eilebrecht, Ralf S. Engelschall
  <LI>sparc-sun-solaris2.7:       Cliff Skolnick
  <LI>sparc-sun-solaris2.8:       Dirk-Willem van Gulik
  <LI>sparc-sun-sunos4.1.3_U1:	Sameer Parekh
  </UL>
  
  <H4>SCO</H4>
  <UL>
  <LI>i386-whatever-sco3:		Ben Laurie
  <LI>i386-whatever-sco5:		Ben Laurie
  </UL>
  
  <H4>SVR4</H4>
  <UL>
  <LI>i386-unixware-svr4:		Sameer Parekh
  </UL>
  
  <H4>Ultrix</H4>
  <UL>
  <LI>mips-dec-ultrix4.4:		Sameer Parekh
  </UL>
  
  <P>
  <STRONG>Binaries should be built for every Apache release, including
  minor-number revisions, i.e. 1.3.0 -&gt; 1.3.1.</STRONG>
  
  <!--#include virtual="footer.html" -->
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/binbuild.sh
  
  Index: binbuild.sh
  ===================================================================
  #!/bin/sh 
  #
  #
  #From marcs@znep.com Fri Aug 22 20:25:11 1997
  #Date: Sun, 17 Aug 1997 23:12:32 -0600 (MDT)
  #From: Marc Slemko <marcs@znep.com>
  #Reply-To: new-httpd@apache.org
  #To: TLOSAP <new-httpd@apache.org>
  #Subject: binbuild.sh: script to build binary releases
  #
  #Pay attention now.  If you have access to build a binary on a particular
  #platform, this is the easy way to do it.  Can't guarentee it will be
  #right, but it will certainly make my life easier for building binary
  #releases.
  #
  #
  # $Id: binbuild.sh,v 1.1 2001/11/21 07:14:17 jerenkrantz Exp $
  # Marc Slemko (marcs@znep.com)
  #
  # Script to make Apache binary releases.  The below variables must be
  # set correctly, and both the tarball and the Configuration file that
  # you wish to use must be present in the cwd before running the script
  #
  
  # setup to give them a warning that things didn't finish correctly
  # since I am too lazy to put proper error messages everywhere
  trap 'echo ERROR: abnormal exit, binary release not properly built; exit 1' 0 1 2 3 15
  
  # release is the release of the Apache version that is being built.
  # It must also be the base name of the tarball and the name of the
  # directory that it is untarred into
  release=apache_1.3.0
  dir=$release
  # conf is the Configuration file that you wish to use to build httpd
  conf=Configuration
  # gzcat should be set to something that will take a .tar.gz as an 
  # argument and send the uncompressed .tar to stdout.  On some systems,
  # it will be zcat
  gzcat=gzcat
  # if md5 exists, it will be used to generate a md5 hash for the
  # generated files.  Full path is necessary.
  md5=/sbin/md5
  
  # ensure proper permissions
  umask 022
  
  echo untarring release tarball
  $gzcat $release.tar.gz | tar xf -
  if [ ! -d $release ] ; then
      echo ERROR: $release directory does not exist after untarring
      exit 1
  fi
  # system is the name of the system used to name both the binary and
  # the generated tarballs.  GuessOS is not used because it gives 
  # particularily nice names but because it is easy
  system=`./$release/src/helpers/GuessOS | sed 's/\//_/g'` || exit 1
  
  cd $dir/src || exit 1
  echo running Configure
  ./Configure || exit 1
  echo attempting to make httpd
  make 2>&1 | tee ../../make.out-$system
  if [ ! -f httpd ] ; then
      echo error: httpd binary not made
      exit 1
  fi
  echo making binaries in support
  cd ./support || exit 1
  # no, we don't make suexec or worry too much about errors here
  # Marc is lazy.
  make
  cd .. || exit 1
  echo make succeeded, saving the binary and doing a make clean
  mv httpd httpd-$system
  make clean || exit 1
  cd ../.. || exit 1
  
  echo creating tar file
  tar cf - $release > $release-$system.tar || exit 1
  echo creating tar.gz file
  gzip -c $release-$system.tar > $release-$system.tar.gz || exit 1
  echo creating tar.Z file
  compress -c $release-$system.tar > $release-$system.tar.Z || exit 1
  
  if [ ! -f $md5 ] ; then
      echo md5 not found, not generating hashes
  else
      echo generating md5 hashes
      $md5 $release-$system.tar.gz > $release-$system.tar.gz.md5
      $md5 $release-$system.tar.Z > $release-$system.tar.Z.md5
  fi
  
  echo Binary build complete.  Remember to create the proper README
  echo file for the build and sign it if appropriate.
  trap 0 1 2 3 15
  
  
  
  
  1.1                  httpd-site/xdocs/dev/bugdb-policies.html
  
  Index: bugdb-policies.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
   "http://www.w3.org/TR/REC-html40/loose.dtd">
  <HTML>
   <HEAD>
    <TITLE>Apache Bug Database Policies for Developers
    </TITLE>
    <STYLE TYPE="text/css">
     <!--
     TD { font-size: smaller }
     // -->
    </STYLE>
   </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  <!--#include virtual="header.html" -->
    <H1 ALIGN="CENTER">Apache Bug Database Policies for Developers
    </H1>
    <P>
    This document defines the rules and policies that govern the handling
    of Apache problem reports (PRs).
    </P>
    <MENU>
     <LI><A HREF="#principles">Underlying Principles</A>
     </LI>
     <LI><A HREF="#guidelines">General Guidelines</A>
     </LI>
     <LI><A HREF="#fields">PR Fields</A>
     </LI>
     <LI><A HREF="#states">PR States</A>
      <MENU>
       <LI><A HREF="#open">open</A>
       </LI>
       <LI><A HREF="#analyzed">analyzed</A>
       </LI>
       <LI><A HREF="#feedback">feedback</A>
       </LI>
       <LI><A HREF="#suspended">suspended</A>
       </LI>
       <LI><A HREF="#closed">closed</A>
       </LI>
       <LI><A HREF="#transitions">PR State Transitions</A>
       </LI>
      </MENU>
     </LI>
     <LI><A HREF="#dates">Date Thresholds</A>
     </LI>
     <LI><A HREF="#outofband">Out-of-Band PR Information</A>
     </LI>
    </MENU>
    <HR>
    <H2><A NAME="principles">Underlying Principles</A>
    </H2>
    <P>
    The single most critical resource we have is developer time.  Anything
    that can be done to reduce the amount of time developer's spend in
    dealing with PRs, as opposed to actually developing or fixing problems,
    is highly desirable.  This means that it is reasonable to push back
    on PR submitters to test fixes in their own environments rather than
    have developers reproduce the environment locally.  If a newer version
    of the software has been released, it is reasonable to ask the submitter
    to try upgrading -- even if it's not clear whether the relevant areas
    of the code were touched.  Submitters should almost <EM>always</EM>
    be encouraged to run the latest version, at least to test whether
    their issues have been addressed.
    </P>
    <P>
    Obviously this is subject to case-by-case exceptions at the discretion
    of individual developers, but the principle remains the basis for the
    policies that follow.
    </P>
    <HR>
    <H2><A NAME="guidelines">General Guidelines</A></H2>
    <P>
    Some general guidelines for developers working on problem reports:
    </P>
    <UL>
     <LI><STRONG>Before working on a PR, check to see if anyone else has touched
      it recently.</STRONG>
      If so, contact the other developer first, since there may be
      some out-of-band communication going on in private email and your
      jumping in may confuse matters.
     </LI>
     <LI><STRONG>Don't change the ownership of PRs to yourself unless you intend
      to <EM>really</EM> follow through unto closure.</STRONG>
      The bugdb sends mail whenever PRs are modified; if the owner is
      "<SAMP>apache</SAMP>" the mail will be sent to the
      <SAMP>&lt;apache-bugdb@apache.org&gt;</SAMP>
      mailing list.  If the owner is anyone else, mail is sent only to
      the submitter and that person -- so change notices <STRONG>won't</STRONG>
      be sent to the group.
     </LI>
     <LI><STRONG>Be sure to update a PR's state when mail from the submitter
      gets attached to it.</STRONG>
      When the bugdb system attaches mail messages, it doesn't change the
      state or make any other changes to a PR.  Since mail has been sent,
      "feedback" is almost certainly not the correct state, so it
      should be changed.  See the <A HREF="#transitions">state transitions</A>
      section for more information about the correct new state.
     </LI>
    </UL>
    <HR>
    <H2><A NAME="fields">PR Fields</A></H2>
    <P>
    The PR editing form has a number of different fields on it.  Some are
    pull-down lists, some are free-form text boxes, and some are buttons or
    checkboxes.  Here's a description of what they are and how to use
    them.
    </P>
    <P>
    <STRONG>When filling in free-form text boxes, use the Enter or Return
    key to insert hard newlines in order to keep the line-length short!
    Try to keep the horizintal scrollbar inactive.</STRONG>
    </P>
    <DL COMPACT>
     <DT><SAMP>DO NOT send mail about this change</SAMP>
     </DT>
     <DD>
      <P>
      Just as you might expect, this controls whether the update to the
      bugdb will also result in a mail message.  This should ordinarily be
      left 'off'; only check this box if you are making cosmetic changes
      that don't need attention (such as changing the 'release' field).
      </P>
     </DD>
     <DT><SAMP>Editor (you)</SAMP>
     </DT>
     <DD>
      <P>
      This field should initially contain your username or email address.
      Don't change it.  If it's blank, put in your username (if you have
      an account on Taz) or your email address.  Whatever value you
      enter must match your access name to the bugdb.
      </P>
     </DD>
     <DT><SAMP>New synopsis</SAMP>
     </DT>
     <DD>
      <P>
      The synopsis is a one-line abstract of the PR.  <STRONG>Only change
      this field if the original synopsis is incorrect or unclear.</STRONG>
      </P>
     </DD>
     <DT><SAMP>Originator</SAMP>
     </DT>
     <DD>
      <P>
      This field contains the email address of the PR's submitter.  This
      ordinarily doesn't need to be changed unless you're correcting
      an invalid <SAMP>pending</SAMP>-category entry.
      </P>
     </DD>
     <DT><SAMP>Class</SAMP>
     </DT>
     <DD>
      <P>
      This pull-down list identifies the class of problem being described by
      the PR.  The canonical value is <SAMP>sw-bug</SAMP>; the next most
      common is <SAMP>change-request</SAMP>.  When editing a PR, verify that
      the value actually applies to the report, and change it if necessary.
      </P>
     </DD>
     <DT><SAMP>Release</SAMP>
     </DT>
     <DD>
      <P>
      In almost all cases, this should simply contain the Apache release
      version, without any embellishments.  "1.3.2", "1.1.3", "1.3b6-dev"
      are all acceptable.  The only time more text is really appropriate
      in this field is if the PR refers to one of the non-Apache projects,
      such as <SAMP>mod_jserv</SAMP>.  When editing a PR, try to shorten
      this field if possible, since it widens the PR summary display
      unnecessarily.
      </P>
     </DD>
     <DT><SAMP>Severity</SAMP>
     </DT>
     <DD>
      <P>
      Possible values for this are "critical," "serious," and "non-critical."
      Make a judgment call about whether the current setting is truly
      appropriate before changing the value.  A PR that has been in "feedback"
      state for several weeks, for instance, is definitely a candidate
      for downgrade from "critical."  If it were <EM>truly</EM> critical,
      the submitter would have responded.
      </P>
     </DD>
     <DT><SAMP>New state</SAMP>
     </DT>
     <DD>
      <P>
      If you are modifying the state of a PR, this is where you do it.
      See the <A HREF="#states">next section</A> for information about
      possible values and state transitions.  Note that if you change the
      state of a PR, you <STRONG>must</STRONG> add an explanation in the
      next field.
      </P>
     </DD>
     <DT><SAMP>If state changed, give the reason here. To add a comment
      to the case, enter text here without changing the state</SAMP>
     </DT>
     <DD>
      <P>
      Any time the state of a PR is changed, the alteration must be accompanied
      by an explanation.  This is a free-form text box, so you can word things
      however you like.  It's recommended that you start with a blank line
      and end with a newline, as well as inserting hard newlines to keep each
      line of text short.  This will make the resulting mail message much easier
      to read.
      </P>
      <P>
      If you merely want to annotate a PR without changing its state, just
      enter the annotation text in this field.  It will be recorded as a
      comment rather than as a state change.
      </P>
     </DD>
     <DT><SAMP>New category</SAMP>
     </DT>
     <DD>
      <P>
      This pull-down list identifies the portion of Apache to which the
      PR applies.  Almost all of the standard modules and operating
      systems are listed here, but other values include
      </P>
      <UL>
       <LI><SAMP>apache-api</SAMP> (PR deals with actual programing issues)
       </LI>
       <LI><SAMP>config</SAMP> (problem with config directives or setup)
       </LI>
       <LI><SAMP>documentation</SAMP>
       </LI>
       <LI><SAMP>general</SAMP> (anything that can't be better categorised)
       </LI>
       <LI><SAMP>other</SAMP> (a catch-all similar to <SAMP>general</SAMP>)
       </LI>
       <LI><SAMP>pending</SAMP> (PRs that were incorrectly submitted)
       </LI>
       <LI><SAMP>protocol</SAMP> (actual HTTP or network issues)
       </LI>
       <LI><SAMP>suexec</SAMP>
       </LI>
       <LI><SAMP>test</SAMP>
       </LI>
      </UL>
      <P>
      Use your best judgment to set this field.  <STRONG>Bear in mind that
      changing this value will change the <SAMP>Subject</SAMP> line string
      needed to attach email replies (see the
      <A HREF="#outofband">Out-of-Band</A> section).</STRONG>
      </P>
     </DD>
     <DT><SAMP>New responsible person</SAMP>
     </DT>
     <DD>
      <P>
      This field should almost always contain <SAMP>apache</SAMP>.  If the
      field contains anything else, mail about the PR will not be sent to the
      <SAMP>apache-bugdb</SAMP> mailing list but only to the submitter and
      the named 'responsible person' address.  Change this field to
      <SAMP>apache</SAMP> when moving a <SAMP>pending</SAMP> PR back into
      the mainstream database.
      </P>
      <P>
      You <EM>may</EM> change this field to your own account or email
      address if you intend to work on it and close it personally.  This
      is a signal to other developers to essentially treat the PR as
      'hands off' -- but it does have the drawback of reduced mail
      notification as described above.
      </P>
     </DD>
     <DT><SAMP>If responsible person changed, give the reason here</SAMP>
     </DT>
     <DD>
      <P>
      If you change the person responsible, you must give an explanation
      of why.
      </P>
     </DD>
    </DL>
    <HR>
    <H2><A NAME="states">PR States</A>
    </H2>
    <P>
    A problem report can be in any of the following states.  The ones in which
    most PRs should reside are: <STRONG>open</STRONG>, <STRONG>feedback</STRONG>,
    and <STRONG>closed</STRONG>.  The "open" state implies that a PR needs
    developer attention, so one of the main goals is to move PRs into "feedback,"
    "suspended," or "closed."
    </P>
    <H3><A NAME="open">open</A></H3>
    <P>
    New PRs start in this state.  Being "open" indicates that a solution
    is not yet known, or that no-one has looked at the problem yet.  It
    can also mean that someone was working on it but had to stop.
    </P>
    <H3><A NAME="analyzed">analyzed</A></H3>
    <P>
    If a PR is in the "analyzed" state, it means that someone has figured
    out the cause of the issue (or thinks he has).  A solution may or may
    not have been found, but it hasn't been committed to a development stream
    yet if it has.  This is also the state into which a PR should be put
    when requested feedback has been obtained from the submitter.
    </P>
    <H3><A NAME="feedback">feedback</A></H3>
    <P>
    The "feedback" state is where a lot of PRs spend their time.  It indicates
    that the submitter has been asked for more information or to try an
    experiment.  It will stay in this state until a response is made or the
    PR 'times out' (see the section on <A HREF="#dates">date thresholds</A>).
    </P>
    <H3><A NAME="suspended">suspended</A></H3>
    <P>
    Simply put, reports that ask for new functionality or other changes that no
    developer wants to work on at the moment, or that have been identified as
    'non-goals' for the current development streams, get put into "suspended"
    state as a means of saving them for later consideration.
    </P>
    <H3><A NAME="closed">closed</A></H3>
    <P>
    Closed PRs typically require no additional attention.  It is possible,
    though, for reports to be closed incorrectly or prematurely, so they
    <EM>may</EM> occasionally migrate out of this state.  Closed PRs are
    the major component of the knowledge base distilled into the FAQ.
    </P>
    <HR>
    <H3><A NAME="transitions">PR State Transitions</A></H3>
    <P>
    The following table describes the possible state transitions to which PRs
    are subject, and explains some of the circumstances that can cause a
    particular transition to be made.  If you're not sure what the new
    state should be for a PR you're handling, consult the table for some
    guidelines.
    </P>
    <DIV ALIGN=CENTER>
     <TABLE BORDER=1 WIDTH="95%">
      <TR VALIGN=BOTTOM ALIGN=CENTER>
       <TD></TD>
       <TH>open</TH>
       <TH>analyzed</TH>
       <TH>feedback</TH>
       <TH>suspended</TH>
       <TH>closed</TH>
      </TR>
      <TR VALIGN=TOP>
       <TH VALIGN=MIDDLE>open</TH>
       <TD><!-- open-open -->
       </TD>
       <TD><!-- open-analyzed -->
        Either the submitter or a responding developer has determined what the
        problem cause is.
       </TD>
       <TD><!-- open-feedback -->
        A question has been posed to the submitter, such as asking for more
        detail or requesting an experiment.
       </TD>
       <TD><!-- open-suspended -->
        The PR describes a request for a change or functionality that is
        reasonable or interesting, but isn't appropriate to the current
        version under development, or to the current plans or work effort
        available.
       </TD>
       <TD><!-- open-closed -->
        The PR deals with a non-issue, one that has already been solved, or is
        already being tracked.  Or almost any case in which further attention
        is inappropriate.
       </TD>
      </TR>
      <TR VALIGN=TOP>
       <TH VALIGN=MIDDLE>analyzed</TH>
       <TD><!-- analyzed-open -->
        It turns out that the analysis was incorrect and the cause really isn't
        known after all.
       </TD>
       <TD><!-- analyzed-analyzed -->
       </TD>
       <TD><!-- analyzed-feedback -->
        The submitter is being asked for more information or experimentation.
       </TD>
       <TD><!-- analyzed-suspended -->
        The issue described by the PR should be deferred until some later
        version.
       </TD>
       <TD><!-- analyzed-closed -->
        <MENU>
         <LI>A fix for the problem has been committed to the development stream.
         </LI>
         <LI>
          The decision has been made to <STRONG>not</STRONG> address the PR,
          possibly because the behaviour is not considered a bug.  This usually
          follows discussion amongst the developers.
         </LI>
        </MENU>
       </TD>
      </TR>
      <TR VALIGN=TOP>
       <TH VALIGN=MIDDLE>feedback</TH>
       <TD><!-- feedback-open -->
        The requested information has been supplied by the submitter, but
        doesn't really explain the behaviour.  (It may be more appropriate to
        move the PR to "analyzed" instead.)
       </TD>
       <TD><!-- feedback-analyzed -->
        The response from the submitter has provided the necessary information
        to determine the cause, if not the solution, of the issue.
       </TD>
       <TD><!-- feedback-feedback -->
       </TD>
       <TD><!-- feedback-suspended -->
        Additional information from the submitter allows the determination to
        be made that the issue should be addressed in some future version.
       </TD>
       <TD><!-- feedback-closed -->
        <MENU>
         <LI>A fix for the problem has been committed to the development stream.
         </LI>
         <LI>Additional information supplied by the submitter has explained the
          cause, and the solution is provided in the closure text.
         </LI>
         <LI>The PR has '<A HREF="#dates">timed out</A>' due to lack of response
          from the submitter.
         </LI>
        </MENU>
       </TD>
      </TR>
      <TR VALIGN=TOP>
       <TH VALIGN=MIDDLE>suspended</TH>
       <TD><!-- suspended-open -->
        <MENU>
         <LI>The time has come for the issue described by the PR to be considered
          for inclusion in the project.  
         </LI>
         <LI>The PR describes a genuine bug rather than a change or enhancement.
          It may be more appropriate to move the PR to "analyzed" instead.
         </LI>
        </MENU>
       </TD>
       <TD><!-- suspended-analyzed -->
        <MENU>
         <LI>The time has come for the issue described by the PR to be considered
          for inclusion in the project.
         </LI>
         <LI>The issue described by the PR is a genuine bug or problem, and the
          circumstances are tolerably well understood.
         </LI>
        </MENU>
       </TD>
       <TD><!-- suspended-feedback -->
        The PR's issue wasn't clearly understood, and it really is a bug
        report.  More information from the submitter has been requested.
        (This typically follows <A HREF="#outofband">out-of-band email</A>
        exchanges between the submitter and a developer.)
       </TD>
       <TD><!-- suspended-suspended -->
       </TD>
       <TD><!-- suspended-closed -->
        The issue was discussed by the developers, and the decision was made
        to not invest in the necessary effort.  The PR submitter can, and perhaps
        should, be encouraged to develop the solution personally and supply it
        to the project for possible inclusion.
       </TD>
      </TR>
      <TR VALIGN=TOP>
       <TH VALIGN=MIDDLE>closed</TH>
       <TD><!-- closed-open -->
        The report was closed prematurely, probably due to insufficient detail
        in the PR or perhaps because the developer didn't understand the
        issue as described.  It may be more appropriate for the PR to have
        been moved to "analyzed" or "feedback" instead.
       </TD>
       <TD><!-- closed-analyzed -->
        The PR was closed prematurely, but the issue is now clarified and
        understood -- though not yet solved.
       </TD>
       <TD><!-- closed-feedback -->
        The PR was closed prematurely, but additional information has been
        requested from the submitter to investigate further.
       </TD>
       <TD><!-- closed-suspended -->
        After closure, additional information has been supplied to make a case
        for future consideration of the issue.
       </TD>
       <TD><!-- closed-closed -->
       </TD>
      </TR>
     </TABLE>
    </DIV>
    <HR>
    <H2><A NAME="dates">Date Thresholds</A>
    </H2>
    <P>
    In keeping with the principle of minimising the amount of time spent
    on bugdb administrivia, the following thresholds may be used as guidelines
    for dealing with PRs that aren't being actively worked.
    </P>
    <DIV ALIGN=CENTER>
     <TABLE BORDER=1 WIDTH="95%">
      <TR>
       <TH>State</TH>
       <TH>Time Since Last Touched</TH>
       <TH>PR Last Touched By</TH>
       <TH>PR Condition</TH>
       <TH>Available Actions</TH>
      </TR>
      <TR ALIGN=CENTER VALIGN=TOP>
       <TD>analyzed</TD>
       <TD>&gt;30 days</TD>
       <TD>N/A</TD>
       <TD>N/A</TD>
       <TD ALIGN=LEFT>Edit the PR (without changing state unless appropriate) to
        let submitter know the issue is not forgotten.
       </TD>
      </TR>
      <TR ALIGN=CENTER VALIGN=TOP>
       <TD ROWSPAN=2>feedback</TD>
       <TD ROWSPAN=2>14-30 days</TD>
       <TD ROWSPAN=2>Developer</TD>
       <TD ALIGN=LEFT>Last touch was a developer request for information or
        experimentation
       </TD>
       <TD ALIGN=LEFT>Click on the "Query -- Outstanding Request" button.</TD>
      </TR>
      <TR ALIGN=CENTER VALIGN=TOP>
       <!-- Col 1 spanned from above -->
       <!-- Col 2 spanned from above -->
       <!-- Col 3 spanned from above -->
       <TD ALIGN=LEFT>Last touch was the "Query -- Outstanding request"
        message
       </TD>
       <TD ALIGN=LEFT>Click on the "Close -- No response" button to close
        the PR.
       </TD>
      </TR>
     </TABLE>
    </DIV>
    <HR>
    <H2><A NAME="outofband">Out-of-Band PR Information</A>
    </H2>
    <P>
    In many cases, mail pertaining to the original PR may be exchanged between
    the submitter and one or more developers.  In this case, the developer(s)
    should make sure relevant portions are attached to the PR by forwarding
    them to the <SAMP>&lt;apbugs@apache.org&gt;</SAMP> address with the
    appropriate <SAMP>Subject:</SAMP> line.
    </P>
    <BLOCKQUOTE>
     <STRONG>
     If you mail information to the bugdb in order to attach it to an existing
     PR, <EM>don't</EM> quote excessively!  Remember that anyone reading the
     PR will see all attachments in chronological order, and excessive
     quoting not only takes up space unnecessarily, but also makes the
     report harder to read.
     </STRONG>
    </BLOCKQUOTE>
    <P>
    When additional information is sent to the bugdb through email, do
    <STRONG>not</STRONG> use MIME attachments or forwarding!  The bugdb
    is not MIME-aware, and so the attachments will probably look ugly.
    </P>
    <P>
    "Out-of-band" also refers to information that gets attached to
    PRs though the email mechanism rather than the Web form.  When the
    bugdb processes such messages, it <STRONG>does not</STRONG> change the
    PR state, so it needs to be changed manually.
    </P>
   </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/debugging.xml
  
  Index: debugging.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache HTTPD Debugging Guide</title>
    </properties>
  <body>
  
  <section id="id">
  <title>Apache Debugging Guide</title>
  
  <p>This document is a collection of notes regarding tools and techniques
  for debugging Apache and Apache modules.</p>
  
  <p>Got more tips?  Send 'em to
  <a href="mailto:docs@httpd.apache.org">docs@httpd.apache.org</a>.  Thanks!</p>
  
  <ol>
  <li><a href="#gdb">Using <code>gdb</code></a></li>
  <li><a href="#backtrace">Getting a live backtrace</a></li>
  <li><a href="#truss">Using '<code>truss/trace/strace</code>' to
      trace system calls and signals</a></li>
  <li><a href="#gcore">Getting the server to dump core</a></li>
  <li><a href="#sol27">Solaris 2.7 and coredumps</a></li>
  <li><a href="#tcpdump">Getting and analyzing a TCP packet trace</a></li>
  </ol>
  </section>
  
  <section id="gdb">
  <title>Using gdb</title>
  
  <p>If you use the gcc or egcs compilers, it is likely that the best
  debugger for your system is gdb.  This is only a brief summary of how
  to run gdb on Apache -- you should look at the info and man files for
  gdb to get more information on gdb commands and common debugging techniques.
  Before running gdb, be sure that the server is compiled with the
  <code>-g</code> option in <code>EXTRA_CFLAGS</code> to include the
  symbol information in the object files.</p>
  
  <p>The only tricky part of running gdb on Apache is forcing the server
  into a single-process mode so that the parent process being debugged 
  does the request-handling work instead of forking child processes.
  We have provided the <code>-X</code> option for that purpose, which will
  work fine for most cases.  However, some modules don't like starting
  up with <code>-X</code>, but are happy if you force only one child to run
  (using "<code>MaxClients 1</code>"); you can then use gdb's attach command
  to debug the child server.</p>
  
  <p>The following example, with <font color="green">user input in green</font>,
  shows the output of gdb run on a server executable (httpd) in the current
  working directory and using the server root of 
  <code>/usr/local/apache</code>:</p>
  
  <pre>
      % <font color="green">gdb httpd</font>
      GDB is free software and you are welcome to distribute copies of it
       under certain conditions; type "show copying" to see the conditions.
      There is absolutely no warranty for GDB; type "show warranty" for details.
      GDB 4.16.gnat.1.13 (sparc-sun-solaris2.5), 
      Copyright 1996 Free Software Foundation, Inc...
      (gdb) <font color="green">b ap_process_request</font>
      Breakpoint 1 at 0x49fb4: file http_request.c, line 1164.
      (gdb) <font color="green">run -X -d /usr/local/apache</font>
      Starting program: /usr/local/apache/src/httpd -X -d /usr/local/apache
      
      [at this point I make a request from another window]
  
      Breakpoint 1, ap_process_request (r=0x95250) at http_request.c:1164
      1164        if (ap_extended_status)
      (gdb) <font color="green">s</font>
      1165            ap_time_process_request(r-&gt;connection-&gt;child_num, START_PREQUEST);
      (gdb) <font color="green">n</font>
      1167        process_request_internal(r);
      (gdb) <font color="green">s</font>
      process_request_internal (r=0x95250) at http_request.c:1028
      1028        if (!r-&gt;proxyreq &amp;&amp; r-&gt;parsed_uri.path) {
      (gdb) <font color="green">s</font>
      1029            access_status = ap_unescape_url(r-&gt;parsed_uri.path);
      (gdb) <font color="green">n</font>
      1030            if (access_status) {
      (gdb) <font color="green">s</font>
      1036        ap_getparents(r-&gt;uri);     /* OK --- shrinking transformations... */
      (gdb) <font color="green">n</font>
      1038        if ((access_status = location_walk(r))) {
      (gdb) <font color="green">n</font>
      1043        if ((access_status = ap_translate_name(r))) {
      (gdb) <font color="green">n</font>
      1048        if (!r-&gt;proxyreq) {
      (gdb) <font color="green">n</font>
      1053            if (r-&gt;method_number == M_TRACE) {
      (gdb) <font color="green">n</font>
      1062        if (r-&gt;proto_num &gt; HTTP_VERSION(1,0) &amp;&amp; ap_table_get(r-&gt;subprocess_env, "downgrade-1.0")) {
      (gdb) <font color="green">n</font>
      1071        if ((access_status = directory_walk(r))) {
      (gdb) <font color="green">s</font>
      directory_walk (r=0x95250) at http_request.c:288
      288         core_server_config *sconf = ap_get_module_config(r-&gt;server-&gt;module_config,
      (gdb) <font color="green">b ap_send_error_response</font>
      Breakpoint 2 at 0x47dcc: file http_protocol.c, line 2090.
      (gdb) <font color="green">c</font>
      Continuing.
      
      Breakpoint 2, ap_send_error_response (r=0x95250, recursive_error=0)
          at http_protocol.c:2090
      2090        BUFF *fd = r-&gt;connection-&gt;client;
      (gdb) <font color="green">where</font>
      #0  ap_send_error_response (r=0x95250, recursive_error=0)
          at http_protocol.c:2090
      #1  0x49b10 in ap_die (type=403, r=0x95250) at http_request.c:989
      #2  0x49b60 in decl_die (status=403, phase=0x62db8 "check access", r=0x95250)
          at http_request.c:1000
      #3  0x49f68 in process_request_internal (r=0x95250) at http_request.c:1141
      #4  0x49fe0 in ap_process_request (r=0x95250) at http_request.c:1167
      #5  0x439d8 in child_main (child_num_arg=550608) at http_main.c:3826
      #6  0x43b5c in make_child (s=0x7c3e8, slot=0, now=907958743)
          at http_main.c:3898
      #7  0x43ca8 in startup_children (number_to_start=6) at http_main.c:3972
      #8  0x44260 in standalone_main (argc=392552, argv=0x75800) at http_main.c:4250
      #9  0x449fc in main (argc=4, argv=0xefffee8c) at http_main.c:4534
      (gdb) <font color="green">s</font>
      2091        int status = r-&gt;status;
      (gdb) <font color="green">p status</font>
      $1 = 403
      (gdb) 
  </pre>
  
  <p>There are a few things to note about the above example:</p>
  
  <ol>
  <li>the "<code>gdb httpd</code>" command does not include any command-line
      options for httpd: those are provided when the "<code>run</code>" command
      is done within gdb;</li>
  <li>I set a breakpoint before starting the run so that execution would stop
      at the top of ap_process_request();</li>
  <li>the "<code>s</code>" command steps through the code and into called
      procedures, whereas the "<code>n</code>" (next) command steps through
      the code but not into called procedures.</li>
  <li>additional breakpoints can be set with the "<code>b</code>" command,
      and the run continued with the "<code>c</code>" command.</li>
  <li>use the "<code>where</code>" command (a.k.a. "<code>bt</code>") to see
      a stack backtrace that shows the order of called procedures and their
      parameter values.</li>
  <li>use the "<code>p</code>" command to print the value of a variable.</li>
  </ol>
  
  <p>A file in the <code>src/</code> directory, <code>.gdbinit</code>,
  provides a useful macro for printing out the contents of a table
  structure, called <code>dump_table</code>.</p>
  
  <p>If you are debugging a repeatable crash, simply run gdb as above
  and make the request -- gdb should capture the crash and provide a
  prompt where it occurs.</p>
  
  <p>If you are debugging an apparent infinite loop, simply run gdb as above
  and type a Control-C -- gdb will interrupt the process and provide a
  prompt where it was stopped.</p>
  
  <p>If you are debugging a system crash and you have a core file from
  the crash, then do the following:</p>
  
  <pre>
      % <font color="green">gdb httpd -c core</font>
      (gdb) <font color="green">where</font>
  </pre>
  
  <p>and it will (hopefully) print a stack backtrace of where the core dump
  occurred during processing.</p>
  </section>
  
  <section id="backtrace">
  <title>Getting a live backtrace</title>
  
  <p>A backtrace will let you know the hierarchy of procedures that
  were called to get to a particular point in the process.  On some platforms
  you can get a live backtrace of any process.</p>
  
  <p>For SVR4-based variants of Unix, the pstack command for proc can
  be used to display a a live backtrace.  For example, on Solaris it looks 
  like</p>
  
  <pre>
      % <font color="green">/usr/proc/bin/pstack 10623</font>
      10623:  httpd -d /usr/local/apache
       ef5b68d8 poll     (efffcd08, 0, 3e8)
       ef5d21e0 select   (0, ef612c28, 0, 0, 3e8, efffcd08) + 288
       00042574 wait_or_timeout (0, 75000, 75000, 7c3e8, 60f40, 52c00) + 78
       00044310 standalone_main (5fd68, 75800, 75c00, 75000, 2, 64) + 240
       000449f4 main     (3, efffeee4, efffeef4, 75fe4, 1, 0) + 374
       000162fc _start   (0, 0, 0, 0, 0, 0) + 5c
  </pre>
  
  <p>Another technique is to use gdb to attach to the running process
  and then using "where" to print the backtrace, as in</p>
  
  <pre>
      % <font color="green">gdb httpd 10623</font>
      GDB is free software and you are welcome to distribute copies of it
       under certain conditions; type "show copying" to see the conditions.
      There is absolutely no warranty for GDB; type "show warranty" for details.
      GDB 4.16.gnat.1.13 (sparc-sun-solaris2.5), 
      Copyright 1996 Free Software Foundation, Inc...
      
      /usr/local/apache/src/10623: No such file or directory.
      Attaching to program `/usr/local/apache/src/httpd', process 10623
      Reading symbols from /usr/lib/libsocket.so.1...done.
      Reading symbols from /usr/lib/libnsl.so.1...done.
      Reading symbols from /usr/lib/libc.so.1...done.
      Reading symbols from /usr/lib/libdl.so.1...done.
      Reading symbols from /usr/lib/libintl.so.1...done.
      Reading symbols from /usr/lib/libmp.so.1...done.
      Reading symbols from /usr/lib/libw.so.1...done.
      Reading symbols from /usr/platform/SUNW,Ultra-1/lib/libc_psr.so.1...done.
      0xef5b68d8 in   ()
      (gdb) <font color="green">where</font>
      #0  0xef5b68d8 in   ()
      #1  0xef5d21e8 in select ()
      #2  0x4257c in wait_or_timeout (status=0x0) at http_main.c:2357
      #3  0x44318 in standalone_main (argc=392552, argv=0x75800) at http_main.c:4273
      #4  0x449fc in main (argc=3, argv=0xefffeee4) at http_main.c:4534
      (gdb) 
  </pre>
  </section>
  
  <section id="truss">
  <title>Using '<code>truss/trace/strace</code>' to trace system calls and 
  signals</title>
  
  <p>Most Unix-based systems have at least one command for displaying
  a trace of system calls and signals as they are accessed by a running
  process.  This command is called <code>truss</code> on most SVR4-based
  systems and either <code>trace</code> or <code>strace</code> on many
  other systems.</p>
  
  <p>A useful tip for using the <code>truss</code> command on Solaris is
  the <code>-f</code> option; it tells truss to follow and continue tracing
  any child processes forked by the main process.  The easiest way to get
  a full trace of a server is to do something like:</p>
  
  <pre>
      % <font color="green">truss -f httpd -d /usr/local/apache &gt;&amp; outfile</font>
  </pre>
  and let it run through a few requests before killing the parent.  You can
  then view the entire trace in outfile, or use something like
  <pre>
      % <font color="green">egrep '^10698:' outfile</font>
  </pre>
  
  <p>to view just the trace of the process id 10698.</p>
  </section>
  
  <section id="gcore">
  <title>Getting the server to dump core</title>
  
  <p>Strangely enough, sometimes you actually want to force the server
  to crash so that you can get a look at some nutty behavior.  Normally
  this can be done simply by using the <code>gcore</code> command.
  However, for security reasons, most Unix systems do not allow a setuid
  process to dump core, since the file contents might reveal something
  that is supposed to be protected in memory.</p>
  
  <p>Here is one way to get a core file from a setuid Apache httpd process
  on Solaris, without knowing which httpd child might be the one to die
  [note: it is probably easier to use the MaxClients trick in the first
  section above].</p>
  
  <pre>
      # for pid in `ps -eaf | fgrep httpd | cut -d' ' -f4`
      do
        truss -f -l -t\!all -S SIGSEGV -p $pid 2&gt;&amp;1 | egrep SIGSEGV &amp;
      done
  </pre>
  
  <p>The <a href="http://www.dejanews.com/=zzz_maf/getdoc.xp?AN=352257973">
  undocumented '-S' flag</a> to truss will halt the process in place
  upon receipt of a given signal (SIGSEGV in this case).  
  At this point you can use:</p>
  
  <pre>
      # gcore <i>PID</i>
  </pre>
  
  <p>and then look at the backtrace as discussed above for 
  <a href="#gdb">gdb</a>.</p>
  </section>
  
  <section id="sol27">
  <title>Solaris 2.7 and coredumps</title>
  
  <p>On Solaris 2.7 use <b><code>coreadm</code></b> to make <code>setuid()</code>
  processes actually dump core. By default an setuid() process does not
  dump core.</p>
  
  <p>Jens-Uwe Mager wrote:</p>
  <blockquote>
  <p><i>For example I am using:</i></p>
  <pre>
  	# coreadm
     	  global core file pattern: /var/core/core.%f.%p.u%u
       	    init core file pattern: core
        	         global core dumps: enabled
              per-process core dumps: enabled
             global setid core dumps: enabled
        per-process setid core dumps: enabled
            global core dump logging: disabled
  </pre>
  </blockquote>
  </section>
  
  <section id="tcpdump">
  <title>Getting and analyzing a TCP packet trace</title>
  
  <p>This is more difficult than I have time to describe at the moment.
  Here are some pointers to useful discussions and tools:</p>
  
  <ul>
  <li><a href="http://jarok.cs.ohiou.edu/software/tcptrace/pcap.html">tools for
      producing TCP dumps</a></li>
  <li><a href="http://jarok.cs.ohiou.edu/software/tcptrace/tcptrace.html">
      tcptrace</a> is a TCP dump file analysis tool</li>
  <li><a href="http://HTTP.CS.Berkeley.EDU/~daw/mike/">tcpshow</a> is 
      another</li>
  </ul>
  
  <p>There is also a simple ASCII viewer for TCP dump traces in the Apache
  repository in the file
  <code><a href="http://cvs.apache.org/viewcvs.cgi/apache-1.3/src/test/tcpdumpscii.txt">src/test/tcpdumpscii.txt</a></code>.</p>
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/devnotes.xml
  
  Index: devnotes.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache Development Notes</title>
    </properties>
  <body>
  <section>
  <title>Apache Development Notes</title>
  
  <p>This page is intended to provide some basic background about
  development nits and the maintenance of the developer site.</p>
  </section>
  
  <section>
  <title>Maintaining the Sources</title>
  
  <p>Almost all files relating to Apache, either the actual sources or the
  files that aren't part of the distribution, are maintained in a
  <a href="http://www.cvshome.org/">CVS</a> repository.  Here is the way in 
  which changes are applied:</p>
  
    <ol>
     <li>Developer checks out a copy of the files on which it wants to
      work, into a private working directory:
      <p>
      <dl>
       <dd><samp>% cvs checkout apache</samp>
       </dd>
      </dl>
      </p>
      <p>
      This step only needs to be performed once.
      </p>
     </li>
     <li>Developer keeps its working directory synchronised with changes
      made to the repository:
      <p>
      <dl>
       <dd><samp>% cvs update apache</samp>
       </dd>
      </dl>
      </p>
      <p>
      This should probably be done daily or even more frequently during
      periods of high activity.
      </p>
     </li>
     <li>Developer makes changes to its working copies, makes sure they
      work, and generates a patch so others can apply the changes to test
      them:
      <p>
      <dl>
       <dd><samp>% cvs diff -u apache/src/mod_mime.c &gt; /tmp/foo</samp>
       </dd>
      </dl>
      </p>
      <p>
      The <samp>/tmp/foo</samp> file is mailed to the developers list so
      they can consider the value/validity of the patch.  It is also worth
      making sure your code follows the Apache style, as described by the
      GNU indent flags in the .indent.pro file in every source directory.
      </p>
     </li>
     <li>Once other developers have agreed that the change is a Good
      Thing, the developer checks the changes into the repository:
      <p>
      <dl>
       <dd><samp>% cvs commit apache/src/mod_mime.c</samp>
       </dd>
      </dl>
      </p>
     </li>
    </ol>
  </section>
  
  <section>
  <title>CVS Modules</title>
    <p>There are several different modules in the Apache CVS repository:</p>
    <dl compact="compact">
     <dt><samp>apache-1.2</samp>
     </dt>
     <dd>
      To create a directory tree containing the 1.2.<em>x</em> sources,
      and call it <samp>apache-1.2</samp>, change your current directory
      to the <em>parent</em> of the tree and then check the 1.2 sources
      out as follows:
      </p>
      <p>
      <dl>
       <dd><samp>% cd /usr/local/apache
        <BR>
        % cvs checkout apache-1.2</samp>
       </dd>
      </dl>
      </p>
     </dd>
     <dt><samp>apache-1.3</samp>
     </dt>
     <dd>
      To create a directory tree containing the 1.3 sources,
      and call it <samp>apache-1.3</samp>, change your current directory
      to the <em>parent</em> of the tree and then check the 1.3 sources
      out as follows:
      </p>
      <p>
      <dl>
       <dd><samp>% cd /usr/local/apache
        <BR>
        % cvs checkout apache-1.3</samp>
       </dd>
      </dl>
      </p>
     </dd>
     <dt><samp>httpd-2.0</samp>
     </dt>
     <dd>
      To create a directory tree containing the 2.0 sources,
      and call it <samp>httpd-2.0</samp>, change your current directory
      to the <em>parent</em> of the tree and then check the 2.0 sources
      out as follows:
      </p>
      <p>
      <dl>
       <dd><samp>% cd /usr/local/apache
        <BR>
        % cvs checkout httpd-2.0
        <BR>
        % cd httpd-2.0/srclib
        <BR>
        % cvs checkout apr apr-util</samp>
       </dd>
      </dl>
      </p>
      The httpd-2.0 repository takes advantage of APR and APR-util from the
      Apache portable run-time, so those must be checked out separately.
      Because not all httpd contributors have access to APR, you may need to
      use anonymous CVS to get those repositories.  We are looking in to 
      solving this problem.
      </p>
     </dd>
     <dt><samp>apache-site</samp>
     </dt>
     <dd>This module contains the files that live at
      <samp>http://www.apache.org/</samp>.  The directory on the host that
      maps to that URL is actually a set of checked-out working copies of
      the CVS files.
      <BLOCKQUOTE>
       <P ALIGN="CENTER">
       <strong>Note</strong>
       </p>
       It is important that the files on the Web host not be modified
       directly.  If you want or need to change one, check it out into a
       private working copy, modify <strong>that</strong>, commit the
       change into CVS, and then perform a <samp>cvs update</samp> to
       bring the host directory into sync with the CVS sources.
      </BLOCKQUOTE>
      <p>
      The Web site directories are <em>not</em> maintained in synch with
      the CVS files automatically.  They are manually updated from CVS by
      various people as they consider appropriate.  This is usually not an
      issue, unless a group of files are being updated according to an
      ongoing group discussion.
      </p>
     </dd>
     <dt><samp>apache-devsite</samp>
     </dt>
     <dd>Like the <samp>apache-site</samp> module, this one is used ot
      maintain the files that comprise a Webs site - in this case,
      <samp>http://dev.apache.org/</samp>.  Also like the previous module,
      the directory on the server is a checked-out working copy of this
      module.
     </dd>
    </dl>
    <HR>
  
  <section>
  <title>Setting Up Remote CVS</title>
  
  <p>Most of the Apache Group members with access to the CVS repository
  actually do their work on their local machines and keep synchronised
  with the repository through remote CVS.  See the <a
  href="http://httpd.apache.org/about_apache.html">ABOUT APACHE</a>
  page for information about how the group works and people get access
  to the CVS repository.)  One way to set this up using the
  <a href="http://www.ssh.fi/sshprotocols2/index.html"><samp>ssh</samp></a> 
  (secure shell) tool:</p>
  
  <ol>
    <li><strong><em>You need an account on the Apache repository
      system.</em></strong>  
      If you've been &quot;voted in&quot; for direct access to the 
      repository, this should have been set up for you.
      (You know if you have it.)
     </li>
     <li>Include the following in your login files on your
       <strong>local</strong> (UNIX) machine:
       <pre>
         setenv CVSROOT <em>repository-system</em>:/home/cvs
         setenv CVS_RSH /usr/local/bin/ssh
         setenv CVS_SERVER /usr/local/bin/cvs
      </pre>
      Adjust the last two paths to correctly reflect the locations of
      <samp>cvs</samp> and <samp>ssh</samp> on your local system.
     </li>
     <li><p>Set up the following environment in your account on the Apache
      repository system:</p>
      <pre>
        setenv CVSROOT /home/cvs
        setenv CVS_RSH /usr/local/bin/ssh
        setenv CVS_SERVER /usr/local/bin/cvs
      </pre>
      <p>These <em>are</em> the correct locations for the repository system,
      so you don't need to edit them.</p>
     </li>
     <li>On your local system generate your SSH public key file 
      <samp>~/.ssh/identity.pub</samp> via <samp>ssh-keygen</samp> and then put
      it in <samp>~/.ssh/authorized_keys</samp> on the repository system. If you
      use the <samp>ssh-agent</samp> this will allow you to access the repository
      without having to enter a password for each CVS operation. Use
      <samp>ssh-add</samp> and enter your passphrase once when you start a
      session, and <samp>ssh-add -D</samp> at the end of the session to
      delete your unencrypted key(s) from the agent.
     </li>
    </ol>
  </section>
  
  <section>
  <title>Working with the Apache Source CVS Repository remotely</title>
  
  <p>Ralf Engelschall has written an excellent explanation on how to use
  remote CVS with the "cvsup" functionality we have available now.</p>
  
  <p><a href="http://www.engelschall.com/pw/apache/cvsguide/">
  http://www.engelschall.com/pw/apache/cvsguide/</a></p>
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/fetch-from-cvs.txt
  
  Index: fetch-from-cvs.txt
  ===================================================================
  #!/usr/bin/perl -w
  #
  # Simple script to fetch the latest tarball in from-cvs/ and unpack it
  # in $dir.
  #
  # Script by Doug MacEachern <dougm@telebusiness.co.nz>
  # minor fix by Magnus Bodin <magnus@bodin.org>
  
  use strict;
  use URI::URL ();
  use HTML::LinkExtor ();
  use LWP::Simple;
  use File::Path;
  
  my $ver = '1.3';
  my $dir = shift || "/tmp/apache_$ver-dev";
  my $cvs = "http://dev.apache.org/from-cvs/apache-$ver/";
  my $filptn = "apache-$ver\_"; 
  
  rmtree $dir;
  mkpath $dir, 0755;
  
  chdir $dir;
  
  my $p = HTML::LinkExtor->new(\&cb, $cvs);
  my $cnt;
  
  sub cb {
      my($tag, %links) = @_;
      return unless exists $links{href} and $links{href} =~ /$fileptn/;
      return unless ++$cnt == 4;
  
      my $file = URI::URL->new($links{href})->rel($cvs);
      warn "mirror $links{href} => $file\n";
  
      mirror $links{href} => $file;
      system "gunzip < $file | tar -xvf -";
      unlink $file;
  }
  
  $p->parse(get $cvs);
  
  
  
  
  1.1                  httpd-site/xdocs/dev/footer.html
  
  Index: footer.html
  ===================================================================
    <HR>
  
  
  
  1.1                  httpd-site/xdocs/dev/guidelines.html
  
  Index: guidelines.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache Project Guidelines and Voting Rules</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  
  <CENTER>
  <IMG SRC="images/apache_logo.gif" ALT="">
  <H1 ALIGN=CENTER>Apache Project Guidelines</H1>
  
  </CENTER>
  
  <P>
  This document defines the guidelines for the
  <A HREF="http://dev.apache.org/">Apache Project</A>.
  It includes definitions of how conflict is resolved by voting,
  who is able to vote, and the procedures to follow for proposing and making
  changes to the Apache products.
  </P>
  
  <P>
  The objective here is to avoid unnecessary conflict over changes and
  continue to produce a quality system in a timely manner.  Not all conflict
  can be avoided, but at least we can agree on the procedures for conflict
  to be resolved.
  </P>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  People, Places, and Things</H2>
  
  <DL>
    <DT><STRONG>Apache Group</STRONG></DT>
    <DD>The group of volunteers who are responsible for managing the
        Apache Project.  This includes deciding what is distributed as
        products of the Apache Project, maintaining the Project's shared
        resources, speaking on behalf of the Apache Project, resolving
        license disputes regarding Apache products, and establishing
        these guidelines.
  
        <P>Membership in the Apache Group is by invitation only and must
        be approved by consensus of the active Apache Group members.
        A member is considered inactive by their own declaration or by not
        contributing in any form to the project for over six months.  An
        inactive member can become active again by reversing whichever condition
        made them inactive (<EM>i.e.</EM>, by reversing their earlier
        declaration or
        by once again contributing toward the project's work).  Membership
        can be revoked by a unanimous vote of all the active members other
        than the member in question.</DD><P>
  
    <DT><STRONG>Apache Developers</STRONG></DT>
    <DD>All of the volunteers who are contributing time, code, documentation,
        or resources to the Apache Project.  A developer that makes sustained,
        welcome contributions to the project for over six months is usually
        invited to join the Apache Group, though the exact timing of such
        invitations depends on many factors.</DD><P>
  
    <DT><STRONG>mailing list</STRONG></DT>
    <DD>The Apache developers' primary mailing list for discussion of issues
        and changes related to the project (<EM>dev@httpd.apache.org</EM>).
        Subscription to the list is open, but only subscribers
        can post directly to the list.</DD><P>
  
    <DT><STRONG>private list</STRONG></DT>
    <DD>The Apache Group's private mailing list for discussion of issues
        that are inappropriate for public discussion, such as legal, personal,
        or security issues prior to a published fix.  Subscription to the list
        is only open to Apache Group members.</DD><P>
  
    <DT><STRONG>CVS</STRONG></DT>
    <DD>All of the Apache products are maintained in shared information
        repositories using <A HREF="devnotes">CVS on
        <EM>dev.apache.org</EM></A>.  Only some of the Apache developers have
        write access to these repositories; everyone has read access via
        <A HREF="anoncvs">anonymous CVS</A>.  Developers who want write
        access need to ask for it on the mailing list and, if approved, need
        to ask the admin of <EM>dev.apache.org</EM> for a user account.</DD>
  
  </DL>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  STATUS</H2>
  
  <P>
  Each of the Apache Project's active source code repositories contain a file
  called "STATUS" which is used to keep track of the agenda and plans for
  work within that repository.  The STATUS file includes information about
  release plans, a summary of code changes committed since the last release,
  a list of proposed changes that are under discussion, brief notes about
  items that individual developers are working on or want discussion about,
  and anything else that might be useful to help the group track progress.
  The active STATUS files are automatically posted to the mailing list
  three times each week.
  </P>
  
  <P>
  Many issues will be encountered by the project, each resulting in zero
  or more proposed action items.  Issues should be raised on the
  mailing list as soon as they are identified.
  Action items <STRONG>must</STRONG> be raised on the mailing list and
  added to the relevant STATUS file.  All action items may be voted on,
  but not all of them will require a formal vote.
  </P>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  Voting</H2>
  
  <P>
  Any of the Apache Developers may vote on any issue or action item.
  However, the only binding votes are those cast by active members of the
  Apache Group; if the vote is about a change to source code or documentation,
  the primary author of what is being changed may also cast a binding vote
  on that issue.  All other votes are non-binding.
  All developers are encouraged to participate in decisions, but the decision
  itself is made by those who have been long-time contributors to the project.
  In other words, the Apache Project is a minimum-threshold meritocracy.
  </P>
  
  <P>
  The act of voting carries certain obligations -- voting members are not only
  stating their opinion, they are agreeing to help do the work of the
  Apache Project.  Since we are all volunteers, members often become inactive
  for periods of time in order to take care of their "real jobs" or devote
  more time to other projects. It is therefore unlikely that the entire group
  membership will vote on every issue.  To account for this, all voting
  decisions are based on a minimum quorum.
  </P>
  
  <P>
  Each vote can be made in one of three flavors:
  
  <DL COMPACT>
    <DT><STRONG>+1</STRONG></DT>
    <DD>Yes, agree, or the action should be performed.  On some issues, this
        vote is only binding if the voter has tested the action on
        their own system(s).
    </DD><P>
    <DT><STRONG>&#177;0</STRONG></DT>
    <DD>Abstain, no opinion, or I am happy to let the other group members
        decide this issue.  An abstention may have detrimental effects if
        too many people abstain.
    </DD><P>
    <DT><STRONG>-1</STRONG></DT>
    <DD>No. On issues where consensus is required, this vote counts as a
        <STRONG>veto</STRONG>.  All vetos must include an explanation of
        why the veto is appropriate.  A veto with no explanation is void.
        No veto can be overruled. If you disagree with the veto, you
        should lobby the person who cast the veto. Voters intending to veto
        an action item should make their opinions known to the group immediately,
        so that the problem can be remedied as early as possible.
    </DD>
  </DL>
  
  <P>
  An action item requiring <EM>consensus approval</EM> must receive
  at least <STRONG>3 binding +1</STRONG> votes and <STRONG>no vetos</STRONG>.
  An action item requiring <EM>majority approval</EM> must receive
  at least <STRONG>3 binding +1</STRONG> votes and more <STRONG>+1</STRONG>
  votes than <STRONG>-1</STRONG> votes (<EM>i.e.</EM>, a majority with a minimum
  quorum of three positive votes).  All other action items are considered
  to have <EM>lazy approval</EM> until someone votes <STRONG>-1</STRONG>,
  after which point they are decided by either consensus or a majority vote,
  depending upon the type of action item.
  </P>
  
  <P>
  Votes are tallied within the STATUS file, adjacent to the action
  item under vote. All votes must be either sent to the mailing list
  or added directly to the STATUS file entry for that action item.
  </P>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  Types of Action Items</H2>
  
  <DL>
    <DT><STRONG>Long Term Plans</STRONG></DT>
    <DD>Long term plans are simply announcements that group members
        are working on particular issues related to the Apache software.
        These are not voted on,
        but group members who do not agree with a particular plan,
        or think an alternate plan would be better, are obligated to
        inform the group of their feelings.  In general, it is always
        better to hear about alternate plans <STRONG>prior</STRONG> to
        spending time on less adequate solutions.
  
    <DT><STRONG>Short Term Plans</STRONG></DT>
    <DD>Short term plans are announcements that a developer is working on
        a particular set of documentation or code files, with the implication
        that other developers should avoid them or try to coordinate their
        changes.  This is a good way to proactively avoid conflict and 
        possible duplication of work.
  
    <DT><STRONG>Release Plan</STRONG></DT>
    <DD>A release plan is used to keep all the developers aware of when a
        release is desired, who will be the release manager, when the
        repository will be frozen in order to create the release, and 
        assorted other trivia to keep us from tripping over ourselves
        during the final moments.  Lazy majority decides each issue in
        the release plan.
  
    <DT><STRONG>Release Testing</STRONG></DT>
    <DD>After a new release is built, colloquially termed a tarball, it
        must be tested before being released to the public.  Majority
        approval is required before the tarball can be publically released.
  
    <DT><STRONG>Showstoppers</STRONG></DT>
    <DD>Showstoppers are issues that require a fix be in place
        before the next public release.  They are listed in the STATUS file
        in order to focus special attention on the problem.  An issue becomes
        a showstopper when it is listed as such in STATUS and remains
        so by lazy consensus.
  
    <DT><STRONG>Product Changes</STRONG></DT>
    <DD>Changes to the Apache products, including code and documentation,
        will appear as action items under several categories corresponding
        to the change status:
        <DL>
        <DT><STRONG>concept/plan</STRONG>
        <DD>An idea or plan for a change.  These are usually only listed in
            STATUS when the change is substantial, significantly impacts the
            API, or is likely to be controversial.  Votes are being requested
            early so as to uncover conflicts before too much work is done.
        <DT><STRONG>proposed patch</STRONG>
        <DD>A specific set of changes to the current product in the form
            of <A HREF="#patch">input to the patch command</A> (a diff output).
        <DT><STRONG>committed change</STRONG>
        <DD>A one-line summary of a change that has been committed to the
            repository since the last public release.
        </DL>
        All product changes to the currently active repository are subject
        to lazy consensus.  All product changes to a prior-branch (old version)
        repository require consensus before the change is committed.
  </DL>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  When to Commit a Change</H2>
  
  <P>
  Ideas must be review-then-commit; patches can be commit-then-review.
  With a commit-then-review process, we trust that the developer doing the
  commit has a high degree of confidence in the change.  Doubtful changes,
  new features, and large-scale overhauls need to be discussed before
  being committed to a repository. Any change that affects the semantics
  of arguments to configurable directives, significantly adds to the runtime
  size of the program, or changes the semantics of an existing API function
  must receive consensus approval on the mailing list before being committed.
  </P>
  
  <P>
  Each developer is responsible for notifying the mailing list and adding
  an action item to STATUS when they have an idea for a new feature or
  major change to propose for the product.  The distributed nature of the
  Apache project requires an advance notice of 48 hours in order to properly
  review a major change -- consensus approval of either the concept or a
  specific patch is required before the change can be committed.  Note that
  a member might veto the concept (with an adequate explanation), but later
  rescind that veto if a specific patch satisfies their objections.
  No advance notice is required to commit singular bug fixes.
  </P>
  
  <P>
  Related changes should be committed as a group, or very closely together.
  Half-completed projects should not be committed unless doing so is
  necessary to pass the baton to another developer who has agreed to
  complete the project in short order.  All code changes must be successfully
  compiled on the developer's platform before being committed.
  </P>
  
  <P>
  The current source code tree should be capable of complete compilation
  at all times.  However, it is sometimes impossible for a developer on
  one platform to avoid breaking some other platform when a change is
  committed, particularly when completing the change requires access to
  a special development tool on that other platform.  If it is anticipated
  that a given change will break some other platform, the committer must
  indicate that in the commit log.
  </P>
  
  <P>
  The committer is responsible for the quality of any third-party code
  or documentation they commit to the repository.  All software committed
  to the repository must be covered by the Apache LICENSE or contain a
  copyright and license that allows redistribution under the same conditions
  as the Apache LICENSE.
  </P>
  
  <P>
  A committed change must be reversed if it is vetoed by one of the voting
  members and the veto conditions cannot be immediately satisfied by the
  equivalent of a "bug fix" commit.  The veto must be rescinded before the
  change can be included in any public release.
  </P>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  <A NAME="patch">Patch Format</A></H2>
  
  <P>
  When a specific change to the software is proposed for discussion or
  voting on the mailing list, it should be presented in
  the form of input to the patch command.  When sent to the mailing list,
  the message should contain a Subject beginning with
  <CODE>[PATCH]</CODE> and a distinctive one-line summary
  corresponding to the action item for that patch.  Afterwords, the patch
  summary in the STATUS file should be updated to point to the Message-ID
  of that message.
  
  <P>
  The patch should be created by using the <CODE>diff -u</CODE> command
  from the original software file(s) to the modified software file(s).
  E.g.,</P>
  
  <PRE>    diff -u http_main.c.orig http_main.c &gt;&gt; patchfile.txt</PRE>
  or
  <PRE>    cvs diff -u http_main.c &gt;&gt; patchfile.txt</PRE>
  
  <P>
  All patches necessary to address an action item should be concatenated
  within a single patch message.  If later modification of the patch
  proves necessary, the entire new patch should be posted and not just
  the difference between two patches.  The STATUS file entry should then
  be updated to point to the new patch message.
  
  <P>The completed patchfile should produce no errors or prompts when the
  command,</P>
  <PRE>    patch -s &lt; patchfile</PRE>
  is issued in the target repository.
  
  <H2>Addendum: Outstanding issues with this document</H2>
  <UL>
  <LI>We may need a better definition for "lazy consensus".
  <LI>We should clarify under what conditions a veto can be rescinded or overridden.
  <LI>Should we set a time limit on vetos of patches?  Two weeks?
  </UL>
  
  </BODY> 
  </HTML>     
  
  
  
  1.1                  httpd-site/xdocs/dev/header.html
  
  Index: header.html
  ===================================================================
  <DIV ALIGN="CENTER">
   <IMG SRC="images/apache_logo.gif" ALT="[APACHE]">
  </DIV>
  
  
  
  1.1                  httpd-site/xdocs/dev/how-to-release-win32.html
  
  Index: how-to-release-win32.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
    <TITLE>How to build a release of Apache for Windows</TITLE>
   </HEAD>
  <!-- Yeah, we know; there are some HTML "lint-errors" in this -->
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  <!--#include virtual="header.html" -->
  <P>
  <BR>
  
  <div align=center>
  <H1>How to build a release of Apache for Windows</H1>
  Paul Sutton &lt;pcs@apache.org&gt;
  </DIV>
  
  <BLOCKQUOTE>
  <BLOCKQUOTE>
  <BLOCKQUOTE>
  This document describes how to release Apache for Windows (95 and
  NT). It is an appendix to the main <A HREF="how-to-release">how to
  build a release of Apache</A> document.
  </BLOCKQUOTE>
  </BLOCKQUOTE>
  </BLOCKQUOTE>
  
  <P>
  
  <H2>Overview</H2>
  
  The steps to build an Apache for Windows release are:
  
  <UL>
   <LI>Create an install directory to hold the files used when
      building the installer
   <LI>Build Apache and install it to the install directory
   <LI>Build the installer DLL and copy it to the install directory
   <LI>Update the InstallShield Express 2.0 configuration file
   <LI>Use InstallShield to build the files from the install directory
      into the single .EXE installer
  </UL>
  
  <H2>Detailed Instructions</H2>
  
  Before starting this build, make sure that you have the correct Apache
  file tree available. This will normally by a normal Unix release
  archive. Make sure that all the non-binary files have DOS style line
  endings.  You will need a copy of the comercial product InstallShield
  Express 2.0.  You will need that product and not InstallFromTheWeb,
  InstallShield 5, the ancient InstallShield 2, or any of the variants
  of InstallShield occasionally bundled with the Java or C development
  environments.
  
  <P>
  
  Building the Windows installer requires to temporary directories. 
  
  <UL>
  
  <LI>An <i>install directory</i> which contains the files that
      IS2 will use to build the installer. This document uses
      <SAMP>C:\Apache</SAMP> for the install directory.
  
  <LI>A <i>build directory</i> where Apache will be built. Once built the
      binary files will be installed into the install directory so that
      IS2 can find them. This document uses <SAMP>C:\Build</SAMP> for
      the build directory.
  
  </UL>
  
  <OL>
  
  <LI><STRONG>Create The Install Directory</STRONG><P>
  
  You will need to decide on a directory where you are going to place
  the install files. These are the files used by InstallShield to build
  the installer program. The examples in this document will use the
  directory <SAMP>C:\Apache</SAMP> which is also the default
  installation directory of the "nmake installr" command. If you use
  this directory you will not need to edit the <SAMP>apache.iwz</SAMP>
  InstallShield configuration file before using it.
  
  <P>
  
  Now create the install directory, and extract the Apache Unix release
  archive into it. If the distribution has Unix line endings, convert
  the line endings of all files apart from <SAMP>htdocs/*.gif</SAMP> and
  <SAMP>icons/*.gif</SAMP> and <SAMP>icons/small/*.gif</SAMP>.
  
  <P>
  
  The following files and directories are not used or installed on Windows
  systems:
  
  <P>
  
  <UL>
   <LI><SAMP>conf\*.conf-dist</SAMP> (but leave the
       <SAMP>*.conf-dist-win</SAMP> files)
   <LI><SAMP>src\os\{emx,bs2000,unix,tpf}</SAMP>
   <LI><SAMP>src\helpers</SAMP>
   <LI><SAMP>src\test</SAMP> (not part of the Unix release)
   <LI><SAMP>src\modules\test</SAMP> (not part of the Unix release)
   <LI>All <SAMP>CVS</SAMP> directories (not part of the Unix release)
   <LI>All <SAMP>.indent.pro</SAMP> files
   <LI>The files <SAMP>config.layout</SAMP>, <SAMP>configure</SAMP>, 
       <SAMP>INSTALL</SAMP>, <SAMP>README.configure</SAMP>,
       <SAMP>src/Configuration</SAMP> (this last file is only in a Unix
       release, not in CVS)
   <LI>The files <SAMP>STATUS</SAMP>, <SAMP>RULES.CVS</SAMP>,
       <SAMP>src/INDENT</SAMP> (not part of the Unix release)
  </UL>
  
  <P>
  
  (Note: the InstallShield configuration file lists only the files which
  are to be build into the installer, so it is not necessary to remove
  these files and directories unless you are planning to update the IS
  configuration by dragging-and-dropping directories).
  
  <P>
  
  Rename the file <SAMP>README.NT</SAMP> in the install directory to
  <SAMP>README-NT.TXT</SAMP>:
  
  <PRE>
    CD C:\Apache
    RENAME README.NT README-NT.TXT
  </PRE>
  
  <P>
  
  Copy the <SAMP>MSVCRT.DLL</SAMP> file into the install directory. This
  file can be found on the MSVC++ 5.0 CD (it is a redistributable file),
  or in the <SAMP>\WINDOWS\SYSTEM</SAMP> (Win95) or
  <SAMP>\WINNT\SYSTEM32</SAMP> (WinNT) directories.
  
  <PRE>
    COPY \WINDOWS\SYSTEM\MSVCRT.DLL C:\Apache  <I>(Windows 95)</I>
    COPY \WINNT\SYSTEM32\MSVCRT.DLL C:\Apache  <I>(Windows NT)</I>
  </PRE>
  
  <P>
  
  <LI><STRONG>Build and Install Apache</STRONG><P>
  
  Create the build directory by copying the <SAMP>src</SAMP> directory
  of the install directory to the new location. The examples in this
  document will use <SAMP>C:\Build</SAMP>.
  
  <P>
  
  Now build Apache in the normal way and install it into your install directory:
  
  <PRE>
    cd C:\Build
    nmake /f Makefile.nt _apacher
    nmake /f Makefile.nt installr INSTDIR=C:\Apache
  </PRE>
  
  This will add the compiled <SAMP>APACHE.EXE</SAMP>, core DLL files and
  module DLL files into the install directory.
  
  <P>
  
  <LI><STRONG>Building the Installer DLL</STRONG><P>
  
  The installer DLL is called during the user install process to
  configure the Apache configuration files. Build it and copy it into
  the install directory:
  
  <PRE>
    CD C:\Build
    nmake -f Makefile.nt installdll
    COPY os\win32\installer\installdll\Release\install.dll C:\Apache
  </PRE>
  
  <P>
   
  <LI><STRONG>Update the InstallShield Configuration File</STRONG><P>
  
  Now the install directory contains all the files which are going to be
  used in the install process. The InstallShield configuration file
  specifies all the files to be used, and where they will be installed
  on the end user's machine. The configuration file is in
  <SAMP>os/win32/installer/apache.iwz</SAMP>.
  
  <P>
  
  There are two things to do to update the InstallShield configuration
  file. Firstly, update the configuration to reflect any new, removed or
  renamed files in the Apache distribution. Secondly, update the version
  information if necessary.
       
  <P>
  
  <B>Note</B>: Unfortunately InstallShield's configuration file format
  contains hard-coded absolute paths to the individual files. If your
  install directory (step 1) is not <SAMP>C:\Apache</SAMP> then must
  search and replace all instances of <SAMP>C:\Apache</SAMP> with your
  install directory in <SAMP>apache.iwz</SAMP> before using it. If you
  want to commit the changed version back to the repository, remember to
  search and replace from you install directory with
  <SAMP>C:\Apache</SAMP> before committing.
  
  <P>
  
  Start InstallShield Express 2, then load the
  <SAMP>os/win32/installer/apache.iwz</SAMP> file from the build
  directory (e.g. <SAMP>C:\Build</SAMP>). 
  
  <P>
  
  <UL>
  
   <LI>Check that <STRONG>all</STRONG> the components contain the correct
       list of files. This is a case of manually comparing the list of
       files in each component with the corresponding directory under
       your install directory (this is a repeatative and boring process,
       but InstallShield cannot handle betters ways of specific multiple
       files or directories to include in a single step). You will need
       to add or remove any files added or removed since the last time
       the configuration file was updated (NB: certain Unix only files
       may not need to be added, if they are not needed by Windows end
       users). One way of speeding this process is to try doing a
       "build": InstallShield will tell you about any missing files, but
       it will not tell you about new files, so to find new files,
       create an installer, install it, then do a recursive diff between
       the directory where you just installed Apache and your install
       directory.
   </LI>
   <LI>Set the Visual Design, Application Information, Version. This
       should contain the full version number, eg. 1.3.0 or 1.3b5.
   </LI>
   <LI>Set the Visual Design, Main Window, Main Title. As above.
   </LI>
   <LI>Ensure that the correct registry key will be used.
       Go to Make Registry Changes, Registry Keys. The key
       HKLM\SOFTWARE\Apache Group\Apache should contain a subkey
       containing the version number which does not change across
       consequetive beta releases. For example, "1.3.0" (for a full
       release), "1.3 beta" (on all 1.3 betas) or "1.3.4 dev" (for
       development versions). The name of this key must match the
       definition of <SAMP>VERSION</SAMP> in
       <SAMP>os/win32/registry.c</SAMP> of the version of Apache being
       packaged (which should have been updated by the Release Manager
       when they tagged the source tree).
   </LI>
   <LI>Go to Make Registry Changes, Registry Values. Make sure that the key 
       updated in the previous step contains a REG_SZ (String) value
       with name "ServerRoot" and value "&lt;INSTALLDIR&gt;"
       (InstallShield will replace this with the real install
       directory).
   </LI>
  </UL>
  
  <P>
  
  After making the changes above you will have to commit the updated
  <SAMP>apache.iwz</SAMP> file back to the CVS tree. Do not forget to
  change references to your install directory back to
  <SAMP>C:\Apache</SAMP> if you used a different directory. Also
  remember to copy the updated <SAMP>apache.iwz</SAMP> file over the
  older version in the install directory so that the end user will have
  the correct version:
  
  <PRE>
    CD C:\Build
    COPY os\win32\installer\apache.iwz C:\Apache\src\os\win32\installer
  </PRE>
  
  
  </P>
  
  <LI><STRONG>Build the Installer</STRONG><P>
  
  <P>
  
  The install directory tree and InstallShield configuration are now
  complete. The install directory tree will look like this:
  
  <PRE>
    C:\Apache
    |  ABOUT_APACHE
    |  Annoucement
    |  Apache.exe
    |  ApacheCore.dll
    |  CHANGES
    |  CHANGES.APACI
    |  configure
    |  INSTALL
    |  install.dll
    |  KEYS
    |  LICENSE
    |  Makefile
    |  Makefile.tmpl
    |  MSVCRT.DLL
    |  README
    |  README.configure
    |  README-NT.TXT
    |  STATUS
    |
    |--- conf
    |      access.conf-dist-win
    |      highperformance.conf-dist
    |      httpd.conf-dist-win
    |      magic
    |      mime.types
    |      srm.conf-dist-win
    |
    |--- htdocs
    |    | index.html
    |    | apache_pb.gif
    |    |-- manual
    |        ....
    |
    |--- icons
    |      ....
    |
    |--- logs (empty)
    |
    |--- modules
    |      ApacheModuleAuthAnon.dll
    |      ...
    |
    |--- src
    |    | ...
    |    |--- ap
    |    .......
  
  </PRE>
  <P>
  
  After it has been installed on the user's machine it will look mostly
  the same, except that:
  
  <P>
  
  <UL>
   <LI><SAMP>MSVCRT.DLL</SAMP> will be installed to their Window's system 
     directory (but only if it is newer than any copy they have already got)
   <LI><SAMP>src</SAMP> will not be installed in a "typical" or "compact" 
       install
   <LI><SAMP>icons</SAMP> and <SAMP>htdocs</SAMP> will not be installed on a 
       "compact" install
   <LI>the <SAMP>*.conf-dist-win</SAMP> files in conf will be expanded to
       <SAMP>*.conf</SAMP>, with the <SAMP>@@ServerRoot@@</SAMP> sequence 
       replaced with the install directory path.
  </UL>
  
  <P>
  
  At the end of the installation, the user will have the option of viewing a
  <SAMP>README</SAMP>. This will be the <SAMP>README-NT.TXT</SAMP> file (which
  is the file <SAMP>README.NT</SAMP> in CVS).
  
  <P>
  
  So finally build the single-file installer. Run InstallShield Express
  2. Load the configured <SAMP>apache.iwz</SAMP> file from your build
  directory.
  
  <P>
  
  Build the package by selecting "Disk Builder", "Start Build". Then
  create the single file installer by selecting "Copy to Floppy", set
  "Drive" to "Path for a 1 File Installation" (and enter an appropriate
  directory name), then select "Copy All Disk Images".
  
  <P>
  
  The single file installer is now built and ready to run. It will be
  called <SAMP>SETUPEX.EXE</SAMP>. Rename this to an appropriate name
  for Windows, such as <SAMP>APACHE_1_3_4.EXE</SAMP> (there must only be
  one period in the name).
  
  </OL>
  
  <!--#include virtual="footer.html" -->
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/how-to-release.html
  
  Index: how-to-release.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
    <TITLE>How to build a release of Apache</TITLE>
   </HEAD>
  <!-- Yeah, we know; there are some HTML "lint-errors" in this -->
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  <!--#include virtual="header.html" -->
  <P>
  <BR>
  
  <div align=center>
  <H1>How to build a release of Apache</H1>
  Alexei Kosut &lt;akosut@apache.org&gt;<BR>
  Ralf S. Engelschall &lt;rse@apache.org&gt;<BR>
  Jim Jagielski &lt;jim@apache.org&gt;<br>
  Ken Coar &lt;coar@apache.org&gt;
  Martin Kraemer &lt;martin@apache.org&gt;<br>
  </DIV>
  
  <BLOCKQUOTE>
  <BLOCKQUOTE>
  <BLOCKQUOTE>
  This document describes the typical release cycle the release manager has to
  step through when creating a new Apache release.  It is written down as a
  step-by-step instruction list and should be followed exactly as specified to
  avoid problems or inconsistencies both in the created tarballs and the source
  repository.
  </BLOCKQUOTE>
  </BLOCKQUOTE>
  </BLOCKQUOTE>
  
  <P>
  <BR>
   <H2><A NAME="tarball">How to build an Apache Unix release</A></H2>
  
  <P><FONT COLOR="red">Note:</FONT> The below assumes that you are
  using <CODE>ssh</CODE> to login to your <CODE>dev.apache.org</CODE>
  account. If you are "rolling the tarball" remotely, the differences
  will be noted.
  
  <P><FONT COLOR="red">Important:</FONT> Once tagged and the tarball
  is rolled, there is <B>no going back</B>. If there are
  problems with the tarball, the version number (either the rev-level
  or beta-level) <EM>must</EM> be bumped resulting in a new tag,
  tarball and release.
  
  <OL>
   <HR>
   <LI> Checkout the Apache source if needed into a scratch directory:<BR>
       <CODE><B>$ cvs checkout -P apache-1.<EM>X</EM></B></CODE>
       <br>
       Note that the current <code><b>httpd-docs-1.3/htdocs</b></code>
       documentation tree is automatically extracted into
       <CODE><B>apache-1.<EM>X</EM>/htdocs/</B></CODE> 
       (two macros in the cvs configuration file
       <CODE><B>/home/cvs/CVSROOT/modules</B></CODE> do that for you).
    <P>
       For Apache 2.0:<BR>
       <CODE><B>$ cvs checkout -P httpd-2.<EM>X</EM></B></CODE>
       <br>
       <code><b>$ cd httpd-2.<i>X</i>/srclib</b></code>
       <br>
       <code><b>$ cvs checkout apr apr-util</b></code>
    <P>
   <LI> cd into the <CODE>apache</CODE> CVS tree.<BR>
       <CODE><B>$ cd apache-1.<EM>X</EM></B></CODE><BR>
       or<BR>
       <CODE><B>$ cd httpd-2.<EM>X</EM></B></CODE>
    <P><b>[ Adjusting Announcement to taste ]</b><br>
   <LI>
    <p>
      <ul>
  	<li>A prototype <code>Announcement</code> is included in
        the main CVS source tree. This file should be updated
        to reflect the current state of affairs concerning the
        release. For example, the Release Version should reflect
        what is actually being announced. Also, the key enhancements
        of the Release should be noted.<br>
       <code><b>$ vi Announcement</b></code><br>
       <code><b>$ cvs commit Announcement</b></code><br>
  	 <p>
        <b>Note:</b> This document is also present in the
        <code>apache-site/dist/</code> directory, both in HTML and plain
        text form. You may want to create one version out of the other.
    </ul>
    <HR>
    <B>[ Only for final releases, not for internal pre-releases ]</B><BR>
    <P>
   <LI> For Apache 1.3<BR>
        Change <CODE>SERVER_BASEREVISION</CODE> in <TT>src/include/httpd.h</TT>
  	 from ``<CODE>Apache/1.<EM>X.Y</EM>-dev</CODE>'' to
  	 ``<CODE>Apache/1.<EM>X.Y</EM></CODE>''. Then also change
  	 <CODE>APACHE_RELEASE</CODE> in the same file from
  	 ``<CODE>1<EM>XXYY0</EM>00</CODE>'' to ``<CODE>1<EM>XXYY1</EM>00</CODE>''.
  	 The format is something like
  	 <CODE>printf("%d%02d%02d%d%02d", major, minor, bugfix, final,
  	 beta)</CODE>. <BR>
       <CODE><B>$ vi src/include/httpd.h</B></CODE><BR>
       <CODE><B>$ cvs commit src/include/httpd.h</B></CODE>
    <P>
       For Apache 2.0:<BR>
       Change <CODE>SERVER_BASEREVISION</CODE> in <TT>include/httpd.h</TT>
       from ``<CODE>2.<EM>X</EM>-dev</CODE>'' to ``<CODE>2.<EM>X</EM></CODE>''.
       Then also change <CODE>APACHE_RELEASE</CODE> in the same file from
       ``<CODE>2<EM>XXYY0</EM>00</CODE>'' to ``<CODE>2<EM>XXYY1</EM>00</CODE>''.
    <P>
       <STRONG>Note:</STRONG> until Apache 2.0 is of general release quality,
       module magic numbers are not enforced.  You must edit <TT>include/ap_mmn.h</TT>
       and bump the MODULE_MAGIC_NUMBER_MAJOR prior to rolling the tarball, to assure
       beta testers are testing the corresponding .so modules.  <I>This policy will be
       retracted, and coders will be reponsible for mmn bumps, once Apache 2.0 is
       officially released.</I>
    <P>
   <LI> Make sure your PGP keys are already present in the <CODE>KEYS</CODE>
       file. If they are not, extract your public key using the
       ``<CODE>pgp&nbsp;-kxa</CODE>'' command, add them to the
       <CODE>KEYS</CODE> file and commit it before tagging.
    <P>
   <LI> Tag the sources for this release:<BR>
       (<EM>note: be sure to tag the whole thing, not just <CODE>src</CODE></EM>!)<BR>
       <CODE><B>$ cvs tag APACHE_1_<EM>X_Y</EM></B></CODE><BR>
       For Apache 2.0:<BR>
       <CODE><B>$ cvs tag APACHE_2_<EM>X_Y</EM></B></CODE>
    <P>
    <HR>
    <B>[ For all releases ]</B><BR>
    <P>
   <LI> Make an export version of the distribution: (this creates a second
       subdirectory <CODE>apache-Z.<EM>X.Y</EM></CODE> for the exported version
       beside the existing CVS tree in <CODE>apache-Z.<EM>X</EM></CODE>)<BR>
       For Apache 1.3:<BR>
       <CODE><B>$ cd ..</B></CODE><BR>
       <CODE><B>$ umask 022</B></CODE><BR>
       <CODE><B>$ cvs export -r APACHE_1_<EM>X_Y</EM> -d apache_1.<EM>X.Y</EM> apache-1.<EM>X</EM></B></CODE><BR>
       <CODE><B>$ cd apache_1.<EM>X.Y</EM></B></CODE><BR>
       Again, the current <code><b>httpd-docs-1.3/htdocs</b></code>
       documentation tree is automatically extracted into
       <CODE><B>apache-1.<EM>X.Y</EM>/htdocs/</B></CODE> for you.
    <UL>
       
  	<LI><FONT COLOR="red">Note:</FONT> There is a known problem
       using <CODE>cvs export</CODE> remotely with <CODE>cvs-1.9</CODE>
       and later. If this affects you, you will need to do a checkout
       instead:<BR>
       <CODE><B>$ umask 022</B></CODE><BR>
       <CODE><B>$ cvs checkout -r APACHE_1_<EM>X_Y</EM> -d apache_1.<EM>X.Y</EM> apache-1.<EM>X</EM></B></CODE><BR>
       <CODE><B>$ cd apache_1.<EM>X.Y</EM></B></CODE><BR>
       <code><b>$ cvs checkout -r APACHE_1<i>X_Y</i> -d htdocs httpd-docs-1.3/htdocs</b></code>
       
    </UL>
  
       <P>
       For Apache 2.0:<BR>
       <CODE><B>$ cd ..</B></CODE><BR>
       <CODE><B>$ umask 022</B></CODE><BR>
       <CODE><B>$ cvs export -r APACHE_2_<EM>X_Y</EM> -d apache_2.<EM>X.Y</EM> httpd-2.<EM>X</EM></B></CODE><BR>
       <CODE><B>$ cd apache_2.<EM>X.Y</EM>/srclib</B></CODE><BR>
       <code><b>$ cvs export -r APACHE_2_<i>X_Y</i> apr apr-util</code>
  
    <UL>
       
  	<LI><FONT COLOR="red">Note:</FONT> There is a known problem
       using <CODE>cvs export</CODE> remotely with <CODE>cvs-1.9</CODE>
       and later. If this affects you, you will need to do a checkout
       instead:<BR>
       <CODE><B>$ umask 022</B></CODE><BR>
       <CODE><B>$ cvs checkout -r APACHE_2_<EM>X_Y</EM> -d apache_2.<EM>X.Y</EM> httpd-2.<EM>X</EM></B></CODE><BR>
       <CODE><B>$ cd apache_2.<EM>X.Y</EM>/srclib</B></CODE><BR>
       <code><b>$ cvs checkout -r APACHE_2<i>X_Y</i> apr apr-util</b></code>
       
    </UL>
    <P>
   <LI> Make sure the master site's FAQ is up-to-date:<br>
       <code><b>$ (cd /www/httpd.apache.org/docs/misc ; cvs update)</b></code>
    <p>
   <li> Extract the FAQ as a single file, as it appears on the Web:<br>
       <code><b>$ links -source http://httpd.apache.org/docs/misc/FAQ.html
       &gt; htdocs/manual/misc/FAQ.html</b></code>
    <p>
  
   <LI> For Apache 1.3:<BR>
        Create <CODE>src/Configuration</CODE> file: (1.3.x only)<BR>
       <CODE><B>$ cp src/Configuration.tmpl src/Configuration</B></CODE>
    <P>
        For Apache 2.0:<BR>
        Create <CODE>./configure</CODE> file, and remove all symlinks<BR>
       <CODE><B>$ ./buildconf</B></CODE><BR>
       <CODE><B>$ rm -f ltconfig ltmain.sh config.sub config.guess</B></CODE><BR>
       <CODE><B>$ cp /usr/local/share/libtool/ltconfig .</B></CODE><BR>
       <CODE><B>$ cp /usr/local/share/libtool/ltmain.sh .</B></CODE><BR>
       <CODE><B>$ cp /usr/local/share/libtool/config.sub .</B></CODE><BR>
       <CODE><B>$ cp /usr/local/share/libtool/config.guess .</B></CODE><BR>
    <P>
   <LI> Remove <CODE>STATUS</CODE>, <CODE>RULES.CVS</CODE>, 
       <CODE>src/INDENT</CODE>, the multi-part FAQ, various
       <CODE>.cvsignore</CODE> and
       the developer's test subdirectories.  Depending on which version you
       are releasing, not all of these files will be in the repository:<BR>
       <CODE><B>$ rm STATUS RULES.CVS src/INDENT
        htdocs/manual/misc/FAQ-*.html</B></CODE><BR>
       <CODE><B>$ find . -name ".cvsignore" -exec rm {} \;</B></CODE><BR>
       <CODE><B>$ find . -type d -name "test" -exec rm -Rf {} \;</B></CODE>
  
    <UL>
  
  	<LI><FONT COLOR="red">Note:</FONT> If you needed to do a
       <CODE>checkout</CODE> instead of a <CODE>export</CODE>, you
       will also need to remove the CVS administrative files:<BR>
       <CODE><B>$ find . -type d -name "CVS" -exec rm -rf {} \;</B></CODE>
  
    </UL>
    <P>
   <LI> Expand the Server-Side-Include directives in the manual:<BR>
       <CODE><B>$ cd htdocs/manual</B></CODE><BR>
       <CODE><B>$ ./expand.pl</B></CODE><BR>
       <CODE><B>$ rm ./expand.pl</B></CODE><BR>
       <CODE><B>$ cd ../../..</B></CODE>
    <P>
   <LI> Roll the distribution tarball:<BR>
       <CODE><B>$ tar cvf apache_<EM>Z.X.Y</EM>.tar apache_<EM>Z.X.Y</EM></B></CODE><BR>
    <P>
   <LI> Make the final packed distribution files:<BR>
       <CODE><B>$ cp -p apache_<EM>Z.X.Y</EM>.tar xapache_<EM>Z.X.Y</EM>.tar</B></CODE><BR>
       <CODE><B>$ gzip -9 apache_<EM>Z.X.Y</EM>.tar</B></CODE><BR>
       <CODE><B>$ mv xapache_<EM>Z.X.Y</EM>.tar apache_<EM>Z.X.Y</EM>.tar</B></CODE><BR>
       <CODE><B>$ compress apache_<EM>Z.X.Y</EM>.tar</B></CODE><BR>
    <P>
   <LI> Test the packed tar files and check for errors:<BR>
       <CODE><B>$ gunzip -c apache_<EM>Z.X.Y</EM>.tar.gz | tar tvf -</B></CODE><BR>
       &nbsp;&nbsp;(or simply: <CODE><B>$ tar tvzf apache_<EM>Z.X.Y</EM>.tar.gz</B></CODE>)<BR>
       <CODE><B>$ uncompress &lt;apache_<EM>Z.X.Y</EM>.tar.Z | tar tvf -</B></CODE><BR>
    <P>
   <LI> Sign the distribution files:<BR>
       <CODE><B>$ pgp -sba apache_<EM>Z.X.Y</EM>.tar.gz</B></CODE><BR>
       <CODE><B>$ pgp -sba apache_<EM>Z.X.Y</EM>.tar.Z</B></CODE><BR>
       
    <UL>
  	 
  	<LI><FONT COLOR="red">Note:</FONT> Be sure your PGP key is already in the
  	 <CODE>KEYS</CODE> file!<BR>
  	 
    </UL>
    <P>
   <LI> Test the tarball signatures:<BR>
       <CODE><B>$ pgp apache_<EM>Z.X.Y</EM>.tar.gz.asc apache_<EM>Z.X.Y</EM>.tar.gz</B></CODE><BR>
       <CODE><B>$ pgp apache_<EM>Z.X.Y</EM>.tar.Z.asc apache_<EM>Z.X.Y</EM>.tar.Z</B></CODE><BR>
    <P>
   <LI> Remember the CHANGES file:<BR>
       <CODE><B>$ cp apache_<EM>Z.X.Y</EM>/src/CHANGES ./CHANGES_<EM>Z.X</EM></B></CODE>
    <P>
   <LI> Cleanup:<BR>
    (this deletes the export tree: it is now no longer
       required. We still need the CVS tree, see below)<BR>
       <CODE><B>$ rm -fr apache_<EM>Z.X.Y</EM></B></CODE>
    <P>
   <LI> Make the tarball available for testing purposes
       (in <A HREF="http://dev.apache.org/dist/">http://dev.apache.org/dist/</A>):<BR>
       <CODE><B>$ chmod 664 CHANGES_<EM>Z.X</EM> apache_<EM>Z.X.Y</EM>.tar.*</B></CODE><BR>
       <CODE><B>$ cp -pv apache_<EM>Z.X.Y</EM>.tar.gz /www/dev.apache.org/dist/</B></CODE><BR>
       <CODE><B>$ cp -pv apache_<EM>Z.X.Y</EM>.tar.gz.asc /www/dev.apache.org/dist/</B></CODE><BR>
       <CODE><B>$ cp -pv apache_<EM>Z.X.Y</EM>.tar.Z /www/dev.apache.org/dist/</B></CODE><BR>
       <CODE><B>$ cp -pv apache_<EM>Z.X.Y</EM>.tar.Z.asc /www/dev.apache.org/dist/</B></CODE><BR>
       <CODE><B>$ chmod g+w /www/dev.apache.org/dist/apache_<EM>Z.X.Y</EM>.tar.*</B></CODE><BR>
       
    <UL>
       
  	<LI><FONT COLOR="red">Note:</FONT> If rolling the tarball
       remotely, you should use <CODE>scp</CODE> to place them
       in <CODE>dev.apache.org</CODE> in the <CODE>/www/dev.apache.org/dist</CODE>
       directory.
       
    </UL>
    <P>
    <HR>
    <B>[ Only for final releases, not for internal pre-releases ]</B><BR>
    <P>
   <LI> cd back into the CVS tree location.<BR>
       <CODE><B>$ cd apache-<EM>Z.X</EM></B></CODE>
    <P>
   <LI> For Apache 1.3:<BR>
        Change <CODE>SERVER_BASEREVISION</CODE> in <CODE>src/include/httpd.h</CODE>
  	 from ``<CODE>Apache/1.<EM>X.Y</EM></CODE>'' to
  	 ``<CODE>Apache/1.<EM>X.(Y+1)</EM>-dev</CODE>'' and change
  	 <CODE>APACHE_RELEASE</CODE> to <CODE>1<EM>XX(YY+1)</EM>000</CODE>.<BR>
       (1.3.x only) Additionally make sure that the Configure script's version
  	 knowledge for the <CODE>SHARED_CORE</CODE> reflects the new
  	 version.revision.patchlevel triple.
  	 Look for the line ``<CODE>V=1 R=<EM>X</EM> P=<EM>Y</EM></CODE>''
  	 inside <CODE>src/Configure</CODE> and adjust it accordingly.<BR>
       Finally, add a new line
           ``<CODE>Changes with Apache 1.<EM>X.(Y+1)</EM>:</CODE>'' to the
  	 head of the <SAMP>src/CHANGES</SAMP> file for the
  	 forthcoming fixes in the new version.<BR>
       <CODE><B>$ vi src/include/httpd.h \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src/Configure \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src/CHANGES</B></CODE><BR>
       <CODE><B>$ cvs commit src/include/httpd.h \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src/Configure \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src/CHANGES</B></CODE><BR>
       <BR>
       Edit the <SAMP>STATUS</SAMP> file and update the status for the
           tagged apache_1.<EM>X.Y</EM> version, and add a header line
           for the new apache_1.<EM>X.(Y+1)</EM> version<BR>
       <CODE><B>$ vi STATUS</B></CODE><BR>
       <CODE><B>$ cvs commit STATUS</B></CODE><BR>
       <BR>
       <CODE><B>$ cd ..</B></CODE><BR>
    <P>
       For Apache 2.0:<BR>
       Change <CODE>SERVER_BASEREVERSION</CODE> in <CODE>include/httpd.h</CODE>
  	 from ``<CODE>2.<EM>X.Y</EM></CODE>'' to
  	 ``<CODE>2.<EM>X.(Y+1)</EM>-dev</CODE>'' and change
  	 <CODE>APACHE_RELEASE</CODE> to <CODE>1<EM>XX(YY+1)</EM>000</CODE>.<BR>
       Finally, add a new line
           ``<CODE>Changes with Apache 1.<EM>X.(Y+1)</EM>:</CODE>'' to the
  	 head of the <SAMP>CHANGES</SAMP> file for the
  	 forthcoming fixes in the new version.<BR>
       <CODE><B>$ vi include/httpd.h \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src/CHANGES</B></CODE><BR>
       <CODE><B>$ cvs commit include/httpd.h \<BR>
  	     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHANGES</B></CODE><BR>
       <CODE><B>$ cd ..</B></CODE><BR>
    <P>
    <HR>
   <LI> Cleanup:<BR>
       (delete the CVS tree, after verification that it does not
       contain any uncommitted changes)<BR>
       <CODE><B>$ cvs release -d apache-<EM>Z.X</EM></B></CODE>
    <P>
  <B>[ Now wait for the group to test and approve the tarball ]</B>
    <HR>
    <B>[ Final release steps <U>after</U> the group has approved the tarball ]</B><BR>
    <P>
  
  <EM><FONT COLOR="red">Note:</FONT> Do not continue with the rest of
  these instructions until the group really approves the tarball !</EM>
  
    <P>
   <LI> Make the distribution available
       (in <A HREF="http://www.apache.org/dist/">http://www.apache.org/dist/</A>)
       Z is either 1 or 2:<BR>
       <CODE><B>$ cp CHANGES_<EM>Z.X</EM> /www/www.apache.org/dist/CHANGES_<EM>Z.X</EM></B></CODE><BR>
       <CODE><B>$ cp apache_<EM>Z.X.Y</EM>.tar.gz /www/www.apache.org/dist</B></CODE><BR>
       <CODE><B>$ cp apache_<EM>Z.X.Y</EM>.tar.gz.asc /www/www.apache.org/dist</B></CODE><BR>
       <CODE><B>$ cp apache_<EM>Z.X.Y</EM>.tar.Z /www/www.apache.org/dist</B></CODE><BR>
       <CODE><B>$ cp apache_<EM>Z.X.Y</EM>.tar.Z.asc /www/www.apache.org/dist</B></CODE><BR>
       
    <UL>
       
  	<LI><FONT COLOR="red">Note:</FONT> If rolling the tarball
       remotely, you should use <CODE>scp</CODE> to place them
       in <CODE>dev.apache.org</CODE> in the <CODE>/www/apache.org/dist/</CODE>
       directory.
       
    </UL>
    If the Win32 binary is already built and tested at this point,
       you can add it to the dist directory as well as to the
       <CODE>binaries/win32/</CODE> directory.
    <P>
   <LI> Checkout the <A HREF="http://www.apache.org/">Apache site</A> if needed into a scratch directory:<BR>
       <CODE><B>$ cvs checkout apache-site</B></CODE>
    <P>
   <LI> cd into the <CODE>apache-site</CODE> CVS tree.<BR>
       <CODE><B>$ cd apache-site/dist/</B></CODE>
    <P>
   <LI> Edit the files
       <A HREF="http://www.apache.org/dist/README.html"><CODE>README.html</CODE></A> and <A HREF="http://www.apache.org/dist/HEADER.html"><CODE>HEADER.html</CODE></A> as well as
       <A HREF="http://www.apache.org/dist/Announcement.html"><CODE>Announcement.html</CODE></A> and its plaintext equivalent
       <A HREF="http://www.apache.org/dist/Announcement.txt"><CODE>Announcement.txt</CODE></A> plus the 
       <A HREF="http://www.apache.org/dist/.htaccess"><CODE>.htaccess</CODE></A> file (which defines the
       <CODE>AddDescription</CODE> comments)
       from the <CODE>apache-site</CODE> CVS tree
       as required (all in the
       <A HREF="http://www.apache.org/dist/"><CODE>./dist</CODE></A>
       subdirectory). The <CODE>Announcement.*</CODE> files should be based on the <CODE>Announcement</CODE> file in the tagged CVS tree.  For Apache 2.0,
   <CODE>Announcement</CODE> should be replaced with <CODE>Announcement2</CODE>:<BR>
     
       <CODE><B>$ vi README.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HEADER.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.txt \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.htaccess</B></CODE><BR>
    <P>
   <LI> Commit the changes:<BR>
       <CODE><B>$ cvs commit README.html \<br>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HEADER.html \<br>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.txt \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.htaccess</B></CODE><BR>
       <CODE><B>$ cd ../..</B></CODE>
    <P>
   <LI> Checkout the <A HREF="http://httpd.apache.org/">httpd site</A> if needed into a scratch directory:<BR>
       <CODE><B>$ cvs checkout httpd-site</B></CODE>
    <P>
   <LI> cd into the <CODE>httpd-site</CODE> CVS tree.<BR>
       <CODE><B>$ cd httpd-site/</B></CODE>
    <P>
   <LI> Edit the <A HREF="http://httpd.apache.org/"><CODE>index.html</CODE></A>
       page from the <CODE>httpd-site</CODE> CVS tree as required:<BR>
       <CODE><B>$ vi index.html</B></CODE><BR>
    <P>
   <LI> Commit the changes:<BR>
       <CODE><B>$ cvs commit index.html</B></CODE><BR>
    <P>
   <LI> Update the checked-out versions of the <CODE>apache-site</CODE> documents
       for the web server:<BR>
       <CODE><B>$ umask 002</B></CODE><BR>
       <CODE><B>$ cd /www/www.apache.org/dist/</B></CODE><BR>
       <CODE><B>$ cvs update README.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HEADER.html \<br>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.html \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Announcement.txt \<BR>
       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.htaccess</B></CODE>
    <P>
   <LI> Create an empty directory for future patches:<BR>
       <CODE><B>$ mkdir dist/patches/apply_to_1.<EM>X.Y</EM></B></CODE>
    <P> 
   <LI> Update the checked-out version of the <CODE>httpd-site index.html</CODE>
       page for the web server:<BR>
       <CODE><B>$ umask 002</B></CODE><BR>
       <CODE><B>$ cd /www/httpd.apache.org/</B></CODE><BR>
       <CODE><B>$ cvs update index.html</B></CODE>
    <P>
   <LI>At this point, the web-sites reflect the existance of the new release.
  	<p>
  	As it is going to be some 24hrs before any announcement goes out
  	(to make sure that the mirror's have at least a chance of grabbing
  	a copy) this is also the right time to mail dev@httpd.apache.org 
  	and ask people to upload and move into position any 
  	<a href="binaries.html">binaries</a> they have build and vetted.
  </OL>
  
  <P>&nbsp;
  
  <h2>Announcing a New Release</h2>
  <p>Once a release is built (<a href="#tarball">see below</a>),
  it is time to announce it to the world. 
  <ol>
   <hr>
    <b>[ Grab the prepared Announcement ]</b><br>
     <p>
   <li>You can grab either the <CODE>Announcement</CODE> file in the tagged tree, or the <CODE>Announcement.txt</CODE> file from the web-site.<br>
    <p> 
    <hr>
    <b>[ Posting the Announcement ]</b><br>
    <p>
   <li>Once the tarball is built, give the mirrors a good 24 hours
        to get up to sync. This is really important if this this
        a final (i.e.: non-beta) release.
   <p>
   <li>Now, <code>Announcement</code> should be
        posted to the following places:
    <ul>
  	<li>Unmoderated UseNet newsgroups (should be crossposted)
  	 <ul>
  	  <li><code>comp.infosystems.www.servers.unix</code>
  	  <li><code>comp.infosystems.www.servers.ms-windows</code>
  	  <li><code>comp.infosystems.www.servers.misc</code>
  	  <li><code>de.comm.infosystems.www.servers</code>
  	 </ul>
  	<li>Moderated UseNet newsgroups (do <b>not</b> crosspost)
  	 <ul>
  	  <li><code>comp.infosystems.www.announce</code>
  	 </ul>
  	<li>Mailing Lists
  	 <ul>
  	  <li><code>announce@apache.org</code>
  	  <li><code>ml-apache@unix-ag.org</code>
  	 </ul>
    </ul>
   <p>
   <li>Make sure that <code>Announcement.txt</code> and
        <code>Announcement.html</code> in <code>apache-site</code>
        in the <code>dist</code> directory are updated to include
        these changes.
   <p>
   <li>Bask in the glow
  </ol>
  <p>
  <P><BR>
  <H2>How to build an Apache Windows release</H2>
  
  See <A HREF="how-to-release-win32">how to build a release of Apache
  for Windows</A>.
  
  <!--#include virtual="footer.html" -->
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache HTTPD Developer Information</title>
    </properties>
  <body>
  
  <section>
  <title>Developer Resources</title>
  
  <blockquote>
  This section includes many of the reference materials used by the Apache
  HTTPD Server Project.
  </blockquote>
  </section>
  
  <section>
  <title>User Feedback</title>
  
    <ul type="SQUARE">
      <li><a href="http://bugs.apache.org/">User access</a> (submit and query)
          to the Apache Bug Report Database.</li>
      <li><a href="http://bugs.apache.org/private/">Developer access</a>
  	    (submit, query and edit) to the database of Apache bug reports.
  	    Requires authorisation.
          <menu>
            <li><a href="bugdb-policies.html">Guidelines</a> for editing PRs.
            </li>
          </menu>
      </li>
      <li>Information about the various Apache
          <a href="http://www.apache.org/foundation/mailinglists.html"
          >mailing lists</a>.
      </li>
      <li><a href="http://httpd.apache.org/mail/">Archives</a> of the Apache 
          HTTPD-related mailing lists.
      </li>
      <li><a href="http://www.humanfactor.com/cgi-bin/cgi-delegate/apache-ML/nh/"
          >Hypermail archive of new-httpd</a>.
      </li>
      <li>How to contribute <a href="patches.html">code patches</a> to Apache.
      </li>
    </ul>
  </section>
  
  <section>
  <title>General Developer Guidelines</title>
    <ul type="square">
     <li><a href="platforms.html">The Platform-Developer's list</a>
     </li>
     <li>The latest draft of the
         <a href="project-plan.html">Apache project plan</a>
     </li>
     <li><a href="guidelines.html">Apache Project Guidelines</a>
     </li>
     <li>The Apache coding <a href="styleguide.html">style guide</a>
     </li>
     <li>Some notes on <a href="API.html">the API</a>
     </li>
     <li>A prototype <a href="apidoc/">reference dictionary</a>
         for the Apache HTTP Server API
         <br />
         (note: this link may not take you anywhere useful; the
         documents may be missing or in a state of flux.
         <EM>Caveat spectator</EM>.)
     </li>
     <li>Some notes on <a href="debugging.html">debugging</a>
     </li>
    </ul>
  </section>
  
  <section>
  <title>Source Repository Guidelines</title>
    <ul type="square">
     <li><a href="devnotes.html">Apache Development Notes</a> about
         using CVS and maintaining the Apache site.
     </li>
     <li><a href="anoncvs.txt">Instructions</a>
         on developer access to the repository <i>via</i> Anonymous CVS.
     </li>
     <li><a
          href="http://www.engelschall.com/pw/apache/cvsguide/">Instructions</a>
         on developer access to the repository <i>via</i> CVSup.
     </li>
     <li><a href="nt-cvs-ssh.txt">CVS and SSH for NT users</a>, useful for
         NT developers.
     </li>
     <li>The <a href="todo.html">to-do list</a> of the Apache developers.
     </li>
     <li>Record of changes to the
         <a href="http://www.apache.org/websrc/viewcvs.cgi/apache-1.3/src/include/ap_mmn.h">module magic number</a>
         <br />
     </li>
    </ul>
  </section>
  
  <section>
  <title>Source Repository Access</title>
  
    <ul type="square">
     <li>A Web-based view of the
         <a href="http://cvs.apache.org/viewcvs.cgi/">CVS history</a>
         of the development effort
     </li>
     <li>The <a href="http://cvs.apache.org/snapshots/">latest source tree</a> pulled from the
         CVS repository, packaged with <SAMP>tar</SAMP>, and compressed
         with <SAMP>gzip</SAMP>.  Not guaranteed
         to do anything, especially not compile or work.
     </li>
     <li>Doug MacEachern wrote <a href="fetch-from-cvs.txt">a Perl script</a>
         which you can use to automate fetching from the above from-cvs 
         location.
     </li>
    </ul>
  </section>
  
  <section>
  <title>Release Guidelines</title>
  
    <ul type="square">
     <li>Instructions for
         <a href="how-to-release.html">rolling the release tarballs</a>
     </li>
     <li>How to
         <a href="binaries.html">build binary distributions</a>
     </li>
     <li>A <a href="binbuild.sh">shell script</a> to build a binary release.
     </li>
    </ul>
  </section>
  
  <section>
  <title>Historical Documents</title>
  
    <ul type="square">
     <li><a href="voting.html">Old voting guidelines</a></li>
    </ul>
  </section>
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/mmn.txt.asis
  
  Index: mmn.txt.asis
  ===================================================================
  Status: 200 OK
  Content-type: text/html
  
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
  <HEAD>
  <TITLE>Module Magic Number</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
  BGCOLOR="#FFFFFF"
  TEXT="#000000"
  LINK="#0000FF"
  VLINK="#000080"
  ALINK="#FF0000"
  >
  
  <H1>Module Magic Number</H1>
  
  The table of module magic numbers has been moved to the include file
  <PRE>
       <a href="http://www.apache.org/websrc/viewcvs.cgi/apache-1.3/src/include/ap_mmn.h">src/include/ap_mmn.h</a>
  </PRE>
  distributed with the Apache HTTP Server source code.
  
   </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/nt-cvs-ssh.txt
  
  Index: nt-cvs-ssh.txt
  ===================================================================
  From: Frank Faubert <frank@sane.com>
  To: new-httpd@apache.org
  Subject: Re: nt cvs/rsh/ssh
  Date: Thu, 9 Apr 1998 07:24:26 -0400
  Reply-To: new-httpd@apache.org
  
  You'll also need to get ssh from:
  
  http://bmrc.berkeley.edu/people/chaffee/winntutil.html#sshnt
  
  Along with the CVS binary patch.
  
  -Frank
  
  -----Original Message-----
  From: Martin Kraemer <Martin.Kraemer@mch.sni.de>
  To: new-httpd@apache.org <new-httpd@apache.org>
  Date: Wednesday, April 08, 1998 7:06 PM
  Subject: Re: nt cvs/rsh/ssh
  
  
  >On Wed, Apr 08, 1998 at 05:08:05PM -0700, Dean Gaudet wrote:
  >> Could someone post a quick short note including the relevant URLs for
  >> picking up NT cvs/rsh/ssh whatever is required to access the repository
  >> via NT?
  ><URL:http://www.cyclic.com/cvs/windows.html>?
  ><URL:http://download.cyclic.com/pub/cvs-1.9/windows/cvs-1.9-win.zip>
  >
  >--
  >| S I E M E N S |  <Martin.Kraemer@mch.sni.de>  |      Siemens Nixdorf
  >| ------------- |   Voice: +49-89-636-46021     |  Informationssysteme AG
  >| N I X D O R F |   FAX:   +49-89-636-44994     |   81730 Munich, Germany
  >~~~~~~~~~~~~~~~~My opinions only, of course; pgp key available on request
  >
  
  
  
  
  1.1                  httpd-site/xdocs/dev/patches.xml
  
  Index: patches.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>How to Contribute Patches to Apache</title>
    </properties>
  <body>
  
  <section>
  <title>How to Contribute Patches to Apache</title>
  
  <p>Third-party patches are essential to the success of Apache - 
  the "core" developers don't have access to all platforms, and
  we certainly aren't using Apache in all the different ways it 
  can be used.  To that end, we try to make it as easy as possible
  to contribute code.  However, we do have some expectations of
  contributors, and a process to all this, simply to help us 
  manage the flood of contributions we could get.  This page 
  describes that process.</p>
  
  </section>
  
  <section>
  <title>Code Style</title>
  
  <p>We have a fairly firmly-set code format we use in our code; it was
  one we arrived at through no small amount of debate.  The format is
  described in our official <a href="styleguide.html">style guide</a>.</p>
  
  <p>We also have very high expectations for code quality; and to us this
  means the avoidance of excessive static buffers, using the
  memory pool mechanism (which ensures proper cleanup), and otherwise
  writing thread-safe code.  We also expect one or two levels of
  optimizations to be applied, too - is a bitmask faster for this?  Is
  a strchr() faster than an index()?  Etc.  Of course it'd be nice if we
  had a real document describing this all, but we don't yet.</p>
  </section>
  
  <section>
  <title>Patch Format</title>
  
  <p>We prefer that patches be submitted in unified diff format:</p>
  
  <BLOCKQUOTE><CODE>diff -u file-old.c file.c</CODE></BLOCKQUOTE>
  
  <p>but that isn't available on all platforms. If your platform doesn't
  support unified diffs, please use a context diff instead:</p>
  
  <BLOCKQUOTE><CODE>diff -C3 file-old.c file.c</CODE></BLOCKQUOTE>
  
  <p>where <CODE>file.c</CODE> is the file affected.  We should be
  able to feed the patch directly into the "patch" program and have it
  update the file or set of files.  The <code>-C3</code> is very
  important - line numbers can change on a daily basis in some code
  files, so having context is crucial to knowing where it all really
  goes.</p>
  </section>
  
  <section>
  <title>Submitting your Patch</title>
  
  <p><B>If</B> you are a subscriber to new-httpd, you can simply post
  your patch there, with the string "[PATCH]" prefixing your subject
  line, so everyone knows it's a patch.  However, it's not guaranteed
  that your Patch will find an advocate within the developers' group;
  if we're too busy working on something else or everyone's on
  vacation, it could get lost in the noise.  A good way to make sure
  it gets on our plate is to submit it through the bug database, at <a
  href="http://bugs.apache.org/">http://bugs.apache.org/</a>, marking
  it as a "change-request".</p>
  
  <p>Be aware that the core developers tend to be very conservative
  about what makes it into the core of Apache.  Apache has a very
  flexible API, and any advanced functionality is likely to be pushed
  to be a third-party module.  Portability fixes are the most
  important; protocol correctness is also critical for us; and we're
  sure there's more dumb mistakes in the code than we could shake a
  stick at.  Those will get priority; new functionality may not.</p>
  
  <p>Also, there are often times when the core developers are in
  "feature freeze", when they are trying to iron out the remaining
  bugs in the code in preparation for a release.</p>
  
  <p>If your patch doesn't make it into the core, but you're still
  willing to let the core distribute your work, then your patch might
  make it to the <a 
  href="http://httpd.apache.org/dist/contrib/">contributed area on 
  apache.org</a>.</p>
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/platforms.html
  
  Index: platforms.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
  <HEAD>
  <TITLE>Apache Debugging Guide</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
  BGCOLOR="#FFFFFF"
  TEXT="#000000"
  LINK="#0000FF"
  VLINK="#000080"
  ALINK="#FF0000"
  >
  
  <H1>Apache Platform List</H1>
  
  <P>Apache runs on a variety of (UNIX) platforms. In general, an officially supported platform is one where the developers have direct access. Over time, this access has come and gone, but these platforms are still included as &quot;official&quot; Apache ports.
  <P>The following is a list of those platforms Apache runs on &quot;out of the box&quot; that have developers who claim &quot;responsibility&quot; for maintaining that port. If you have access to any of those platforms lacking developers, please contact us at <a href="mailto:apache@apache.org">apache@apache.org</a>.
  <P>&nbsp;
  <hr>
  <dl>
   <dt><b>A/UX 3.1.1</b>:</dt>
   <dd>Jim Jagielski <a href="mailto:jim@jaguNET.com">(jim@jaguNET.com</a>)</dd>
   <dd>&nbsp;</dd>
   <dt><b>AIX</b>:</dt>
   <dd>Ralf Engelschall (<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>BeOS</b>:</dt>
   <dd>David Reid (<a href="mailto:dreid@jetnet.co.uk">dreid@jetnet.co.uk</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>BSDI</b>:</dt>
   <dd>David Reid (<a href="mailto:dreid@jetnet.co.uk">dreid@jetnet.co.uk</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>Cygwin 1.x</b>:</dt>
   <dd>Stipe Tolj (<a href="mailto:tolj@wapme-systems.de">tolj@wapme-systems.de</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>DG/UX 5.4</b>:</dt>
   <dd>Sameer Parekh (<a href="mailto:sameer@c2.net">sameer@c2.net</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>FreeBSD 2.2.x</b>:</dt>
   <dd>Jim Jagielski (<a href="mailto:jim@jaguNET.com">jim@jaguNET.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>FreeBSD 3.x</b>:</dt>
   <dd>Ralf Engelschall (<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>HP-UX</b>:</dt>
   <dd>Rob Hartill (<a href="mailto:robh@imdb.com">robh@imdb.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>IRIX</b>:</dt>
   <dd>Ralf Engelschall (<a href="mailto:rse@engelschall.com">rse@engelschall.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>Linux</b>:</dt>
   <dd>Dean Gaudet (<a href="mailto:dean@apache.org">dean@apache.org</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>Mac OS</b>:</dt>
   <dd>Wilfredo S&aacute;nchez (<a href="mailto:wsanchez@apple.com">wsanchez@apache.org</a>)</dd>
   <dt>&nbsp;</dt>
   <dt></dt>
   <dt><b>NeXT</b>:</dt>
   <dd>Rob Hartill (<a href="mailto:robh@imdb.com">robh@imdb.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>OSF1</b>:</dt>
   <dd>Lars Eilebrecht (<a href="mailto:lars@apache.org">lars@apache.org</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>ReliantUNIX/SINIX</b>:</dt>
   <dd>Martin Kraemer (<a href="mailto:martin.kraemer%40fujitsu-siemens.com">martin.kraemer&#64;fujitsu-siemens.com</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>SCO</b>:</dt>
   <dd>Ben Laurie (<a href="mailto:ben@algroup.co.uk">ben@algroup.co.uk</a>)</dd>
   <dt>&nbsp;</dt>
   <dt><b>Solaris</b>:</dt>
   <dd>Lars Eilebrecht (<a href="mailto:lars@apache.org">lars@apache.org</a>)</dd>
   <dt>&nbsp;</dt>
  </dl>
  <HR>
  
  <P>Got more platforms?  Send 'em to
  <A HREF="mailto:apache@apache.org">apache@apache.org</A>.  Thanks!
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/ports.html
  
  Index: ports.html
  ===================================================================
  <HTML><HEAD>
  <TITLE>Version testing of Apache 1.1</TITLE>
  </HEAD><BODY>
  
  <H1>Version testing of Apache 1.1</H1>
  
  This page is to keep track of which platforms 1.1 has been explicitly compiled on.
  We have no testing formalism yet, this is just so we know that all platforms we 
  claim to support are actually supported.
  
  <P>
  
  <BLOCKQUOTE><STRONG>mod_auth_msql can be excluded from the "all distribution modules
  compile" list since most people do not have MSQL on their systems.
  Likewise, mod_dld is also excluded from this list.  Perhaps the
  "Configuration" file should mention which platforms DLD support exists
  on.</STRONG></BLOCKQUOTE>
  
  <P>
  
  
  <TABLE border=1>
  <TR><TH>Platform	<TH>Core modules compile	<TH>All distribution modules compile		<TH>Compiled by	<TH>Notes/Warnings</TR>
  <TR><TD>AIX	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Apollo Domain/OS	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>A/UX	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>BSDI 1.1	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>BSDI 2.x	<TD>Yes	<TD>Yes	<TD>Brian B.	<TD>mod_proxy warning (no error)	</TR>
  <TR><TD>DEC OSF/1	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>DG/UX 5.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>FreeBSD	<TD>Yes	<TD>Yes	<TD>Chuck Murcko	<TD>mod_proxy warning (no error)	</TR>
  <TR><TD>HPUX 9.x	<TD>Yes	<TD>Yes (except msql, dld, db)	<TD>Alexei	<TD>Warnings:<BR>mod_proxy.c:2694: warning: passing arg 2 of `select' from incompatible pointer type
  	</TR>
  <TR><TD>HPUX 10.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Irix 5.x, gcc	<TD>Yes	<TD>Yes	<TD>Chuck Murcko	<TD>http_main.c: In function `sig_term':
  http_main.c:904: warning: implicit declaration of function `killpg'<BR>
  http_main.c: In function `standalone_main':
  http_main.c:1404: warning: implicit declaration of function `bzero'<BR>
  mod_auth.c: In function `authenticate_basic_user':
  mod_auth.c:180: warning: implicit declaration of function `crypt'<BR>
  mod_proxy.c: In function `connect_handler':
  mod_proxy.c:2687: warning: implicit declaration of function `bzero'<BR>
  no mod_auth_db
  </TR>
  <TR><TD>Irix 5.x, SGI cc	<TD>Yes	<TD>Yes	<TD>Mark Cox	<TD>Warnings: http_bprintf.c, line 86: Long double not supported; double assumed.	</TR>
  <TR><TD>Irix 6.x, gcc	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Irix 6.x, SGI cc	<TD>Yes	<TD>Yes	<TD>Brian Behlendorf	<TD>Same as 5.x, SGI cc, though: "ld: WARNING 84: /usr/lib/libsun.a is not used for resolving any symbol"	</TR>
  <TR><TD>Linux 1.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>LynxOS	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>NetBSD	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>NeXT 3.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>NeXT 4.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>OS/2	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>QNX	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>SCO ODT 3	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>SCO 5	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Sequent	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Solaris 2.4, gcc	<TD>Yes	<TD>Yes	<TD>Chuck Murcko	<TD>util.c: In function `get_local_host':
  util.c:1090: warning: implicit declaration of function `gethostname'<BR>
  mod_auth.c: In function `authenticate_basic_user':
  mod_auth.c:180: warning: implicit declaration of function `crypt'<BR>
  mod_auth_dbm.c: In function `dbm_authenticate_basic_user':
  mod_auth_dbm.c:170: warning: implicit declaration of function `crypt'<BR>
  mod_cookies.c: In function `make_cookie':
  mod_cookies.c:133: warning: implicit declaration of function `gettimeofday'<BR>
  mod_proxy.c: In function `cache_check':
  mod_proxy.c:1663: warning: empty body in an else-statement
  <BR>no mod_auth_db	</TR>
  <TR><TD>Solaris 2.4, Sun cc	<TD>Yes	<TD>Yes	<TD>Chuck Murcko	<TD>"http_main.c", line 1565: warning: Function has no return statement : main<BR>
  "util.c", line 1090: warning: implicitly declaring function to return int: gethostname()<BR>
  "mod_auth.c", line 180: warning: implicitly declaring function to return int: crypt()<BR>
  "mod_auth_dbm.c", line 170: warning: implicitly declaring function to return int: crypt()<BR>
  "mod_cookies.c", line 133: warning: implicitly declaring function to return int:gettimeofday()<BR>
  "mod_proxy.c", line 756: warning: semantics of "&lt;" change in ANSI C; use explicit cast<BR>
  "mod_proxy.c", line 1649: warning: semantics of "&lt;" change in ANSI C; use explicit cast<BR>
  "mod_proxy.c", line 2658: warning: statement not reached
  <BR>no mod_auth_db	</TR>
  <TR><TD>Solaris 2.5, gcc	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Solaris 2.5, Sun cc	<TD>Yes	<TD>Yes (except msql, dld, db)	<TD>Alexei	<TD>Warnings: http_main, util, mod_auth, mod_auth_dbm, mod_cookies, mod_proxy
  	</TR>
  <TR><TD>Sunos 4.1.x	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>Ultrix	<TD>	<TD>	<TD>	<TD>	</TR>
  <TR><TD>UnixWare 2.x, cc	<TD>	<TD>	<TD>	<TD>	</TR>
  
  </TABLE>
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/dev/project-plan.html
  
  Index: project-plan.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
  <HEAD>
  <TITLE>Apache Server Project Plan</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
  BGCOLOR="#FFFFFF"
  TEXT="#000000"
  LINK="#0000FF"
  VLINK="#000080"
  ALINK="#FF0000"
  >
  
  <H1>Apache Server Project Plan</H1>
  <hr>
  <p><strong>THIS DOCUMENT IS CURRENTLY BEING UPDATED. PLANS POST 2.0 ARE STILL FUZZY! </strong>
  <p><hr>
  
  <p>
  
  This document aims to encapsulate our plans for world domination, uh,
  I mean, further work on the Apache web server.  This is simply a
  statement of goals, is always subject to change, and should not be
  relied upon for business or mission-critical purposes.  Nothing is
  guaranteed.
  
  <P>
  
  Last modified: <!--#echo var="LAST_MODIFIED" -->
  
  <H2>2.0</H2>
  
  <UL>
   <LI>Multithreaded/Multiprocess hybrid
   <LI>An Apache runtime library
   <LI>Shared memory pools
   <LI>Absolute Enforcement of an "Apache Style" for code.
   <LI>Updated Configure/build/make process (autoconf?)
   <LI>Configuration API, so that different configuration loaders can be written (Perl, Java, etc.)
   <LI>More API hooks:
    <UL>
  	<LI>Post config-read; so we can check consistency between
            directives and abort the startup
         	
  	<LI>Per child init
          
  	<LI>Per child die
          
  	<LI>Pre-handler; which asks round what could *potentially* be served on a URI;
            gets back a list of possible internal redirects with the mime-type/lang/charset
            and quality values.
          
  	<LI>Up to 4 placeholders for future use ?
    </UL>
   <LI>Logging enhancements
    <UL>
     <LI>Separate logs for stderr and server error messages
     <LI>Enable all virtual hosts to error-log to the same log, in ways 
  	which distinguish entries.
     <LI>Syslog, with different debugging levels, a la named or sendmail
    </UL>
   <LI>Fully 1.1 compliant proxy module.
   <LI>Protocol abstraction layer, so that different protocol implementations can be distributed as a module.
  </UL>
  
  <H2>2.1</H2>
  <UL>
  <LI>Check returns from all system calls: read, write, etc. 
  <LI>Nicer Access Control (allow "OneOf","AND","OR" ala NCSA)
  <LI>Named Access Methods
  <LI>Implementation of the "LINK" Method 
  <LI>Authentication API, to make authentication type and database 
  type orthogonal
  <LI>Next-generation content negotiation support
  <LI>Data store abstraction API?  So we're not always presuming we sit on top of a filesystem.
  <LI>Enable logging of all "POST"ed data - for commercial-database-like
  backups and replay ability. 
  <LI>Support for CERN-style imagemaps?  http://www.w3.org/pub/WWW/Daemon/User/CGI/HTImageDoc.html#config.
  <LI>give an "Option", like "IncludesNoExec", except allow for CGI includes,
  not CMD includes.
  <LI>Serious dynamic loading support, so that binary distributions can have all
   modules compiled and can be used even by folks without compilers of their own.
  <LI>Standardized PUT support, at least a perl script included with the distribution.
  </UL>
  
  <H2>3.0</H2>
  <UL>
   <LI>HTTP-NG
  </UL>
  
  <HR>
  
  Last Modified <!--#echo var="LAST_MODIFIED" -->
  
  
  
  1.1                  httpd-site/xdocs/dev/robots.txt
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/dev/styleguide.xml
  
  Index: styleguide.xml
  ===================================================================
  <?xml version="1.0"?>
  <document>
    <properties>
      <author email="docs@httpd.apache.org">Documentation Group</author>
      <title>Apache Developers' C Language Style Guide</title>
    </properties>
  <body>
  
  <section>
  <title>Apache Developers' C Language Style Guide</title>
  
  <strong>Compiled by Paul Sutton <a 
  href="mailto:paul@awe.com">paul@awe.com</a></strong>. Based on a vote
  taken in November, 1996.
  <br />
  Further refinements voted upon in July 1997.
  </section>
  
  <section>
  <title>Introduction</title>
  <p>[This bit could state that code should be laid out to be clear to
  someone else familiar with Apache. Functions should be short and
  easily understood. Comments should be provided to explain the
  rationale for code which is not obvious, and to document behavior of
  functions. The guidelines can be broken if necessary to acheive a
  clearer layout]</p>
  
  <p>This style can be generated with the following arguments to GNU indent:</p>
  
  <p><ul><code>-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1</code></ul></p>
  
  </section>
  
  <section>
  <title>The Guidelines</title>
    <UL>
     <li>Opening braces are given on the same lines as statements, or on the 
      following line at the start of a function definition.
     </li>
     <li>Code inside a block (whether surrounded by braces or not) is
      indented by four space characters. Tab characters are not
      used. Comments are indented to the same level as the surrounding
      code.
     </li>
     <li>Closing braces are always on a separate line from surrounding
      code, and are indented to line up with the start of the text on
      the line containing the corresponding opening brace.
     </li>
     <li>Functions are declared with ANSI-style arguments.
     </li>
     <li>There is no space between the function name and the opening bracket
      of the arguments to the function. There is a single space following
      commas in argument lists and the semi-colons in for statements.
     </li>
     <li>Inside a <samp>switch()</samp> statement, the <samp>case</samp>
      keywords are indented to the same level as the <samp>switch</samp> line.
     </li>
     <li>Operators in expressions should be surrounded by a single space
      before and after, except for unary increment (++), decrement (--), and
      negation (!) operators.
     </li>
     <li>There is no whitespace between a cast and the item modified
      (<EM>e.g.</EM>, &quot;<samp>(int)j</samp>&quot; and not
      &quot;<samp>(int) j</samp>&quot;).
     </li>
     <li>If a cast is to a pointer type, there is a space between the type
      and the <samp>*</samp> character (<EM>e.g.</EM>,
      &quot;<samp>(char *)i</samp>&quot; instead of
      &quot;<samp>(char*)i</samp>&quot;)
     </li>
    </UL>
  </section>
  
  <section>
  <title>Details and Examples</title>
  
  <ol>
  <li><strong>Indentation, General Style</strong>
  
  <p>Each level of indentation of code is four spaces. Tab characters
     should never be used. Specific indentation rules for function
     declarations and control-flow keywords are given below.</p>
  
  <p>Example:</p>
  <pre>
      main(int argc, char **argc)
      {
          if (argc != 0) {
              fprintf(stderr, "No arguments allowed\n");
              exit(1);
          }
          exit(0);
      }
  </pre>
  
  <p><A NAME="long-exps">If an expression</A> (or a routine declaration or
  invocation) would extend 
  past column 80, the terms or arguments are wrapped at a convenient spot
  and the wrapped portion is indented under the first term in the expression
  (or the first argument to the function).
  Conditional expressions should be wrapped to keep single or
  parenthesized terms as atomic as possible, and place Boolean operators
  at either the start (preferable) or end of the line.
  </p>
  <p>
  Example:
  </p>
  <pre>
       static const char *really_long_name(int i, int j,
                                           const char *args, void *foo,
                                           int k)
  
       if (cond1 &amp;&amp; (item2 || item3) &amp;&amp; (!item4)
           &amp;&amp; (item5 || item6) &amp;&amp; item7) {
           do_a_thing();
       }
  </pre>
  </li>
  <li><strong>Comments</strong>
  
  <p>Provide comments which explain the function of code where it is not
     clear from the code itself.  Provide rationale where necessary for
     particular bits of code.</p>
  
  <p>Comments should be indented to same level as the surrounding text.</p>
  
  <p>Example:</p>
  
  <pre>
      code;
      /* comment */
      code;
  </pre>
  </li>
  <li><strong>Function Declaration and Layout</strong>
  
  <p>Functions are laid out as follows:</p>
  
  <pre>
      int main(int argc, char **argv)
      {
          code;
      }
  </pre>
  
  <p>The return type is placed on the same line as the function. Arguments
     (if any) are given in ANSI style. If no arguments, declare function
     as <samp>void</samp>. No space
     between function name and opening bracket, single space after comma
     separating each argument. The opening brace is placed on the line
     after the definition, indented to line up with the start of the 
     return type text. The code is indented with four spaces, and the closing
     brace is indented to line up with the opening brace.  <strong>Also
     see the section on indenting <A HREF="#long-exps">long declarations
     and invocations</A>.</strong></p>
  </li>
  <li><strong>Function Calls</strong>
  
  <p>Space after commas in function calls. No space between function name
     and opening bracket.</p>
  <pre>
      f(a, b);
  </pre>
  <p><strong>Also
     see the section on indenting <A HREF="#long-exps">long declarations
     and invocations</A>.</strong>
  </p>
  </li>
  <li><strong>Flow-Control Layout</strong>
  
  <p>Flow-control statements (<samp>if</samp>, <samp>while</samp>,
     <samp>for</samp>, <EM>etc.</EM>) are laid out as in this example:</p>
  
  <pre>
      if (expr) {
          code;
      }
      else {
          code;
      }
  </pre>
  
  <p>There is a space between the keyword and the opening bracket.
     Opening brace placed on same line as the flow keyword. The code
     itself is indented by four spaces. The closing brace is indented to
     line up with the opening brace. If an <samp>else</samp> clause is used, the
     <samp>else</samp> keyword is placed on the line following the closing
     brace and is indented to line up with the corresponding
     <samp>if</samp>.  <strong>Also 
     see the section on indenting <A HREF="#long-exps">long
     expressions</A>.</strong>
  </p>
  </li>   
   
  <li><strong><samp>for</samp> Layout</strong>
  
  <p>Space after the semi-colons. Example:</p>
  
  <pre>
      for (a; b; c)
  </pre>
  </li>
  
  <li><strong><samp>switch</samp> Layout</strong>
  
  <p><samp>case</samp> lines within a <samp>switch()</samp> are indented to
     same level as the switch 
     statement itself. The code for each case is indented by four spaces.
     Braces are laid out as for other control-flow keywords. Example:</p>
  
  <pre>
      switch (x) {
      case a:
          code;
      case b:
          code;
      }
  </pre>
  </li>
  
  <li><strong>Expressions</strong>
  
  <p>Space before and after assignment and other and operators. No space
     between unary operators (increment, decrement, and negation) and the
     lvalue. Examples:</p>
  
  <pre>
      a = b
      a + b
      a &lt; b
      a = -b
      a = !b
      ++a
  </pre>
  </li>
  
  <li><strong>Capitalisation of Enums</strong>
  <p>No rule.</p>
  </li>
  </ol>
  </section>
  
  </body>
  </document>
  
  
  
  1.1                  httpd-site/xdocs/dev/todo.html
  
  Index: todo.html
  ===================================================================
  <HTML><HEAD>
  <TITLE>Apache Bugs List / To Do List / Wish List</TITLE>
  </HEAD><BODY>
  
  <H2>Apache Bugs List / To Do List / Wish List</H2>
  
  <hr>
  <p><strong>THIS LIST IS COMPLETELY AND UTTERLY OUT OF DATE.  But nobody
  ever gets around to cleaning it up... because we've got an entirely
  different method of tracking these things.  The real todo lists are
  in STATUS messages regularly posted to the new-httpd mailing list,
  and available in the STATUS file in the root of each development
  tree (1.2, 1.3, and 2.0).  The todo also includes various bugs in
  the <a href="http://bugs.apache.org/">bug database</a>.</strong>
  <p><hr>
  
  <strong>You've been warned!</strong><p>
  
  <STRONG>BUGS</STRONG>
  
  <UL> 
  
  <LI>Fix -f command lines to take paths correctly.  I know this is a
  bugwards compatibility with NCSA, but I don't like it and think we
  should change it. - beb
  
  <LI>AddDescription, and other mod_dir cleanups - beb
  
  </UL>
  
  <STRONG>To Do List</STRONG>
  
  <UL>
  
  <LI>Protocol Abstraction - so that SSL, SHTTP, and PCT can be plugged
  in as modules, and distributed separately without needing to patch
  core Apache code.  Also hopefully HTTP-NG. - beb
  
  <LI>authentication API, to make authentication type and database type orthogonal - beb
  
  <LI>More tolerant config-file parsing - beb
  
  <LI>Formalized internal error-logging system, like sendmail/syslogd
  interaction - beb
  
  </UL>
  
  <STRONG>Wish List</STRONG>
  
  <UL>
  
  <LI>Scripted installation process, i.e. one that asks questions about
  the site and generates the conf files appropriately - beb
  
  <LI>Enable logging of all "POST"ed data - for commercial-database-like
  backups and replay ability.  - beb
  
  <LI>Configurable Error Reporting
    <UL>
    <LI>Separate logs for stderr and server error messages
    </UL>
  
  <LI>Dynamic Package builder - so that people can download binaries
  with exactly the options and packages they want. - beb
  
  <LI>Implementation of the "LINK" Method  - beb
  
  <LI>Data store abstraction API?  So we're not always presuming we sit on top of a filesystem. - beb
  
  <LI>Port to BeBox - beb
  
  <LI>give an "Option", like "IncludesNoExec", except allow for CGI includes,
  not CMD includes.  -beb, and others
  
  </UL>
  
  <H2>Documentation needed on:</H2>
  
  <UL>
  <LI>Standards for Modules  - beb
  <LI>CGI Extensions - beb
  <LI>Setting up logging and logfile analysis system - beb
  <LI>DBM documentation: explain about having username/group in same file - mjc
  <LI>MSQL documentation -dv
  <LI>Policy - what it takes for a module to move from contrib to the regular distribution. - aw
  </UL>
  
  <HR>
  
  Last Modified <!--#echo var="LAST_MODIFIED" -->
  <UL>
  <LI>beb - Brian Behlendorf, brian@organic.com
  <LI>ak - Alexei Kosut, akosut@nueva.pvt.k12.ca.us
  <LI>mjc - Mark J Cox, mark@awe.com
  <LI>aw - Andrew Wilson, andrew@tees.elsevier.co.uk
  <LI>cm - Chuck Murcko, chuck@telebase.com
  <LI>dv - Dirk.vanGulik, Dirk.vanGulik@jrc.it
  <LI>pcs - Paul Sutton, paul@awe.com
  </UL>
  
  
  
  1.1                  httpd-site/xdocs/dev/voting.html
  
  Index: voting.html
  ===================================================================
  <HTML>
  <HEAD>
  <TITLE>Apache voting rules and guidelines</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
    BGCOLOR="#FFFFFF"
    TEXT="#000000"
    LINK="#0000FF"
    VLINK="#000080"
    ALINK="#FF0000"
   >
  
  <H1>This document is now obsolete.  Please refer to <A
  HREF="guidelines.html">the Apache Project guidelines</A> for
  up-to-date info.</H1>
  
  
  <H1 ALIGN=CENTER>
   <IMG SRC="images/apache_logo.gif" ALT=""><BR>
   Apache voting rules and guidelines
  </H1>
  
  <P>
  This document defines the rules and guidelines for Apache Group members
  to follow when voting on patches, documentation, or other action items
  to be applied to the Apache HTTP Server.
  </P>
  
  <P>
  The objective here is to avoid unnecessary conflict over changes and
  continue to produce a quality system in a timely manner.  Not all conflict
  can be avoided, but at least we can agree on the procedures for conflict
  to be resolved.
  </P>
  
  <P>
  Some abbreviations used below...
  </P>
  <DL>
    <DT><STRONG>mailing list</STRONG></DT>
    <DD>The Apache developers' mailing list.
        Subscription to the list is by invitation only, and only subscribers
        can post directly to the list.</DD>
    <DT><STRONG>CURRENT</STRONG></DT>
    <DD>The most recent version of the source. Used as
        the base code into which new patches are to be merged.</DD>
      
    <DT><STRONG>C_VERSION</STRONG></DT>
    <DD>The version number of <STRONG>CURRENT</STRONG>.</DD>
    
    <DT><STRONG>NEXT</STRONG></DT>
    <DD>The next version of the source. The product of
        applying approved patches to <STRONG>CURRENT</STRONG></DD>
    
  </DL>
  
  <HR SIZE=6>
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  Issues and Action Items</H2>
  
  Many issues will be encountered by the project, each resulting in zero
  or more proposed action items.  All action items may be voted on, but not all
  of them will require a formal vote.  Issues should be raised on the
  mailing list as soon as they are identified.  Action items
  <STRONG>must</STRONG> be raised on the mailing list.
  
  
  <H3>Types of Action Items</H3>
  
  <DL>
    <DT><STRONG>Code Changes</STRONG></DT>
    <DD>Code changes require peer review and testing over a wide range
        of server platforms.  Therefore, all code changes must pass through
        a formal "patch vote", as described <A HREF="#patchvote">below</A>.
        All those participating in a patch vote must be willing and able
        to test the patched system.</DD>
  
    <DT><STRONG>Documentation Changes</STRONG></DT>
    <DD>Documentation changes are only voted on after (or during) the change.
        The author of the changes must notify the mailing list, preferably
        in advance of the work to avoid duplicate efforts, of where the
        changes are being made.  If the changes are to existing documents,
        the existing documents should not be replaced until at least
        24 hours after notifying the list.  Any group member may veto a
        change, but must then provide real assistance to the author
        in correcting the problem if it can be corrected, and must rescind
        the veto once the problem has been corrected (this may be assumed
        in good faith).</DD>
  
    <DT><STRONG>Long Term Plans</STRONG></DT>
    <DD>Long term plans are simply announcements that group members
        are working on particular issues related to the Apache software.
        These are not voted on,
        but group members who do not agree with a particular plan,
        or think an alternate plan would be better, are obligated to
        inform the group of their feelings.  In general, it is always
        better to hear about alternate plans <STRONG>prior</STRONG> to
        spending time on less adequate solutions.
  </DL>
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  Casting Votes</H2>
  <P>
  Anyone on the mailing list may vote on any issue.  However, the act
  of voting carries certain obligations -- voting members are not only
  stating their opinion, they are agreeing to help do the work of the
  Apache Project.</P>
  
  <P>Each vote can be made in one of three flavors:
  
  <DL COMPACT>
    <DT><STRONG>+1</STRONG></DT>
    <DD> Yes, agree, or the action should be performed.  On some issues, this
         vote must only be given after the voter has tested the action on
         their own system(s).
    </DD><P>
    <DT><STRONG>&#177;0</STRONG></DT>
    <DD> Abstain, no opinion, or I am happy to let the other group members
         decide this issue.  An abstention may have detrimental affects if
         too many people abstain.
    </DD><P>
    <DT><STRONG>-1</STRONG></DT>
    <DD> No, I <STRONG>veto</STRONG> this action.  All vetos must include
         an explanation of why the veto is appropriate.  A veto with
         no explanation is void.
    </DD>
  </DL>
  
  <P>All votes must be sent to the mailing list.
  
  
  <H2><IMG SRC="images/apache_feather_bullet.gif" ALT="o ">
  <A NAME="patchvote">Formal Patch Votes</A></H2>
  <P>
  As mentioned above, changes to the source code require peer review
  and adequate testing across many platforms.  The formal patch vote
  rules are intended to ensure that this happens even when we are all in a
  hurry to see things fixed.  However, also see the section on
  <A
   HREF="#lazy-voting"
  >lazy voting</A>
  mode.
  </P>
  <P>There are four distinct roles in the patch vote process, each of which
  may be shared by multiple group members: patch provider, vote coordinator,
  voter, and version builder. 
  
  <P>Patch providers include anyone that has an action item to propose.
  Unless it is infeasible to do so, source code changes must be proposed in
  the form of input to the patch command.  Feasibility is defined by each
  voter and the version builder(s), who may veto an action item if the
  action requires effort beyond what they are expected to perform.
  
  <H3>Uploading an Action Item</H3>
  
  <P>Action items (usually patches) are uploaded to hyperreal (apache.org)
  via FTP, either directly into the directory for patches to <STRONG>CURRENT</STRONG> 
  (/httpd/patches/for_Apache_<STRONG>C_VERSION</STRONG>/), or into an incoming
  FTP directory for later transfer into the patch directory.<P>
     
  <P>Each filename should at least hint at the action objective and
  include reference to:
    <OL>
      <LI>(C_VERSION) the version number of <STRONG>CURRENT</STRONG></LI>
      <LI>(ID) the unique action item numeric ID</LI>
      <LI>(p) the patch letter, if an alternate patchfile is proposed</LI>
    </OL>
  
  <P>The syntax for filenames not containing patches is:
  <PRE>    ID.description</PRE>
  e.g.,<BR>
  <PRE>    01.Modula3_rewrite</PRE>
  if the action item is not (yet) in the form of a patch.
  
  <P>The syntax for filenames containing patches is:
  <PRE>    IDp.description.<STRONG>C_VERSION</STRONG>.patch</PRE>
  e.g., <BR>
  <PRE>    01.ScriptAliasKaboom.0.8.11.patch
      01a.ScriptAliasKaboom.0.8.11.patch
      01b.ScriptAliasKaboom.0.8.11.patch</PRE>
  
  <P>The ID number should start at 01, and be incremented for each new
  action item uploaded.</P>
  
  <H3>Action Item Format</H3>
  
  <P>An action item should contain a list of header information
  (formatted like e-mail or HTTP headers):
  
    <DL>
      <DT><STRONG>From:</STRONG></DT>
      <DD>A list of patch authors and/or people who identified the problem.
      <DT><STRONG>Subject:</STRONG></DT>
      <DD>A description of the problem being addressed.
      <DT><STRONG>Requires:</STRONG></DT>
      <DD>A list of other patches that must be applied before this one.
      <DT><STRONG>Affects:</STRONG></DT>
      <DD>A list of source file names that this patch affects
      <DT><STRONG>Changelog:</STRONG></DT>
      <DD>A couple of lines for use in a future changelog, so that the
          patch (if accepted) can be recorded.
      <DT><STRONG>Comments:</STRONG></DT>
      <DD>Any additional comments about the problem.
    </DL>
  
  followed by an empty line and then the patch (if any).
  
  <H3>Patch Format</H3>
  
  <P>The patch should be created by using <CODE>diff -u</CODE> on the
  <STRONG>CURRENT</STRONG> source and the modified source. E.g.,</P>
  
  <PRE>    diff -u http_main.c.orig http_main.c</PRE>
         
  <P>All patches necessary to address an action item must be concatenated
  within a single patchfile.  The source files affected by the patchfile
  should be listed in an Affects header.</P>
  
  <P>The completed patchfile should produce no errors or prompts when the
  command,</P>
  <PRE>    patch -s &lt; patchfile</PRE>
  is issued.
  
  <P>If the patch produces errors or prompts, then it may be rejected by
  others. Problems with patches should be reported to the mailing list
  as soon as they are noticed.  Dependencies between patches must be
  noted with a Requires line in the patchfile headers.</P>
       
  <H3>Alternate Patches</H3>
     
  <P>Once uploaded, changes to the contents of a patchfile are limited
  to the header information (i.e., everything other than the patch itself).
  For example, the Changelog entry can be changed, but not the output
  of the <CODE>diff</CODE> command(s).
  
  <P>Should the patch itself need changing, a new patchfile should be created
  with a new patchletter after the ID. Anyone can upload a patch to address
  a single problem, so alternative patches can be offered for the same problem.
  The author of the patch is the only person allowed to (or give permission to)
  have an existing patch removed. Removal of a patch means removal of the
  patchfile.</P>
  
  <P>Each patchfile is voted on independently.  New alternate patches must
  garner their own votes -- they do not automatically inherit the votes
  for patches they replace.</P>
  
  <P>Patches for <STRONG>CURRENT</STRONG> can be uploaded at any time before or
  during a voting session.</P>
  
  <H3>The Voting Session</H3>
  
  <P>A voting session can be initiated by anyone so long as a volunteer
  or volunteers can be found to:
    <UL>
      <LI>be the vote coordinator: collect the votes cast by group members</LI>
      <LI>be the version builder: apply approved patches to create the
  	<STRONG>NEXT</STRONG> version of the system.</LI>
    </UL>
  
  <P>The person or persons volunteering to perform these tasks agree
  on a timetable and announce it on the mailing list.  The important
  part of the timetable is the vote deadline, which specifies when
  the votes will be tallied and the new version can be built.
  Unless it is an <A HREF="#emergency">emergency</A>, the initial
  deadline should be at least three days after the announcement.</P>
  
  <P>The vote deadline can be moved if, using the same voting rules
  as for patches, there are enough votes and no vetos. The current deadline
  cannot be voted on.</P>
  
  <P>Group members can vote and comment on the patches under consideration
  as often as they want. The final vote (if votes are changed) of a person
  is assumed to invalidate previous votes.</P>
  
  <P>Votes are cast as follows;
  
    <DL COMPACT>
      <DT><STRONG>+1</STRONG></DT>
      <DD> can be given to a patch if the person has,
        <OL>
          <LI>read the patch header to see what problem it addresses</LI>
          <LI>successfully patched it into <STRONG>CURRENT</STRONG></LI>
          <LI>observed no bad side-effects resulting from the patch.</LI>
        </OL>
      </DD><P>
      <DT><STRONG>-1</STRONG></DT>
      <DD> is a veto on the patch. All vetos must come
           with an explanation of why the veto is appropriate. A veto with
           no explanation is void.
      </DD>
    </DL>
      
  <P>No veto can be overruled. If you disagree with the veto, you
  should lobby the person who cast the veto. Voters intending to veto
  a patch should make their opinions known to the group immediately,
  so that the problem can be remedied prior to the vote deadline, if
  possible.</P>
  
  <H3>Vote Collection</H3>
  
  <P>Votes are tallied by the vote coordinator as soon as the final
  vote deadline has passed.  The results of the vote are then posted
  to the mailing list.</P>
  
  <P><STRONG>In order to be approved, an action item file must receive
  at least 3 positive votes and NO vetos.</STRONG></P>
  
  <P>Late <STRONG>+1</STRONG> votes can be ignored or accepted by the vote coordinator
  at his/her discretion. A late veto has no value: It can only be used
  to try to convince positive voters to rethink. If a positive voter changes
  to a veto, that veto is valid even though it is late.</P>
  
  <H3>Release Build and Announcement</H3>
  
  <P>After the vote coordinator gives the version builder the results,
  <STRONG>NEXT</STRONG> is created by applying the approved patches
  to <STRONG>CURRENT</STRONG>, making the changes called for by other approved 
  (non-patch) action items, adding the approved action item descriptions
  to the changelog, and incrementing the version number.</P>
  
  <P><STRONG>NEXT</STRONG> is then uploaded by the version builder to hyperreal
  and placed in the pre-release directory (/httpd/dist) in compressed
  and gzip'd tar files that name the new version number.  The availability
  of the new version is then announced on the private mailing list.</P>
  
  <P>After the version announcement, accidental mistakes made by the builder
  can be rectified without a vote, but must be announced to the group.</P>
  
  <P>Unless stated otherwise at the start of the vote session, <STRONG>NEXT</STRONG>
  is assumed to be intended for public release.  If an objection to the
  public release is put forward, a majority decision vote will determine
  whether or not the release is made public.  Unlike the other votes,
  a minority opinion cannot stop a public release.</P>
  
  <P>If <STRONG>NEXT</STRONG> is to be released publically, everyone on the mailing
  list should make the effort to download it and try it out. <STRONG>NEXT</STRONG>
  should not be publically released until 24 hours after it has been created
  and announced to the group.</P>
  
  <P>If one of the patches used to create <STRONG>NEXT</STRONG> is subsequently
  found to cause a more serious problem than those it fixed, this problem
  should be reported to the group and any public release postponed until
  a majority decision on how to rectify the problem is obtained.</P>
  
  <H3><A NAME="emergency">Emergency Patch Votes</A></H3>
  
  <P>In the event of an emergency patch/vote session to fix a security
  problem, the group may need to bypass the normal operating procedures
  described above in order to get a fix in place prior to any public
  announcement of the problem.  Any group member may announce an emergency
  on the mailing list and is encouraged to do so immediately if notified
  about a severe problem.  Any group member may veto an emergency in order
  to force it through the normal procedures.</P>
  
  <P>Patches created to solve an emergency problem may be linked directly
  from the Apache home page as soon as the patch has been created and
  tested by its author.  However, this link must be removed or changed
  if the original patch is vetoed.</P>
  
  <P>The availability of an emergency patch may be announced to the public
  after 24hours or three +1 votes are given for the patch, whichever comes
  first.</P>
  
  <H2>
   <A NAME="lazy-voting">
    Lazy-Voting Mode
   </A>
  </H2>
  <P>
  At some times, such as early in the devlopment cycle, it may be
  desirable to operate in what has been called &quot;lazy&quot; voting
  mode.  This is essentially identical to the
  <A
   HREF="#patchvote"
  >formal voting process</A>,
  except that &quot;silence gives assent&quot; -- if 48 hours pass without
  a veto, a quorum of &quot;aye&quot; votes is assumed even not officially
  collected.
  </P>
  <P>
  Formal and lazy voting environments may co-exist; some topics may
  require formal votes whilst others may not.  Common sense should be
  exercised, and potentially highly-controversial patches shouldn't
  be submitted under the lazy rules.
  </P>
  <P>
  When a patch submitter expects to take advantage of lazy voting mode, it
  <EM>must</EM> be explicitly stated in the patch submission.
  </P>
  <HR SIZE=6>
  <ADDRESS>
  Rob Hartill and Roy Fielding<BR>
  3 September 1995
  </ADDRESS>
  <ADDRESS>
   Modified 26 August 1997 by Ken Coar
  </ADDRESS>
  </BODY> 
  </HTML>     
  
  
  
  1.1                  httpd-site/xdocs/dev/images/apache_feather_bullet.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/dev/images/apache_logo.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/README
  
  Index: README
  ===================================================================
  This is a collection of ideas proposed by various contributors to
  Apache on future directions the core HTTP server might want to take.
  These don't represent a "roadmap" or anything like that, but they're
  intended to provoke debate and hopefully inspire some coding.
  
  
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/api-middle.txt
  
  Index: api-middle.txt
  ===================================================================
  Subject: 2.0: Thoughts on the Module API/Middle End
  Date: Tue, 04 Aug 1998 00:00:41 -0400
  From: Simon Spero <ses@tipper.oit.unc.edu>
  Reply-To: new-httpd@apache.org
  To: new-httpd@hyperreal.org
  
  I've been meaning to post some thoughts about the design of the module API ,
  but I've been sick and busy, so I thought I'd just throws some ideas up for
  people to rip to shreds.Sorry if a lot of this is incoherent.  I'd like to
  blame it all on voice recognition, but it's really my fault
  
  First of all, some stuff that should be non-controversial.
  
  1.  The current API is too HTTP specific, and too procedural in nature.  It
  is ill-defined, and inflexible when it comes to adding extra functions.  It
  is very hard to predict how modules from different developers will interact
  with each other, or two used to modules providing the same type of service
  at the same time (for example, using two different authentication modules to
  get user information from two different places).
  
  2.
  
  Back-end vs. middle-end, objects vs. names.
  
   this may be controversial, I like to think of the things that are managed
  by the back end of the server as being objects; these objects may have
  state, provided by a filesystem or a database, and can be accessed by
  invoking many different methods.  The implementation of these methods could
  potentially come from code provided by many different modules; it is the job
  of the middle end to work out which methods go with which object. Methods
  can be grouped together to form interfaces (like in Java or CORBA).
  
  Use different types of Interfaces.
  
  Each type of activity should be defined by a different interface; it should
  be possible to implement several different interfaces in the same module; it
  should also be possible to only implement part of an interface, with the
  remaining implementations coming from different sources.
  
  Use Late binding.
  
  Interfaces should be flexible and  late bound; module should only provide a
  single symbol, which would be a standard function identifying the methods
  and interfaces provided by this module. This identification the should be
  done using strings instead of locations within structs to avoid problems
  caused by adding methods to an interface.
  
  Provide fast method invocation
  
  Method indications should be fast; on the order of a jump to a function
  pointer, instead of a linear search.  It should be possible to use this
  invocation method to provide basic services to other modules (for example,
  then might be a database interface). It should be possible to take modules
  which use a carefully limited set of system services, and automatically load
  them into the kernel, or access them from a kernel module.
  
  Object VTABLES can be pieced together at run time.
  
  The process of constructing an object might  start with name resolution;
  For example, a database based implementation of a meta- information
  interface might be bound to /.  A filesystem based implementation of the
  name resolution interface could then be bound to /files. Control of  the
  name resolution processing would then be passed in to that implementation of
  the  name resolution interface, which would do further construction of the
  object, including handling tasks like content-negotiation.  This can be
  combined with other mechanisms for locating appropriate implementations to
  use with this object.
  
  VTABLES should be mostly pre-computed.
  
   the important thing is that it should be possible to statically evaluate as
  much of the resolution process as possible to build cached vtables for the
  common-path. This could be done through a method in the name resolution
  interface which would return a list of  tuples of name prefixes and
  vtables. It should be possible to quickly combine vtables for cases where
  dynamic processing is necessary. This might involve links rather than
  copying.
  
  Method Combination Should Be Predicatable And Controllable.
  
  It should be possible to control how methods are combined.  This might
  involve e.g. making a pointer to the next function to call available to the
  invokes method, in the style of LISP or Dylan; or trying all methods until
  one succeeds, all succeed, etc. .  The main constraint is that it should be
  easy to see what sort of method combination is being used without having to
  read every single piece of code involved.
  
  Object/VTABLE  Construction Should Be Customisable
  
  The process of name resolution and method combination must be customizable
  as an interface; this allows for other types of object, in particular front
  end protocol stacks, to be implemented using the same mechanisms.
  
  -------
  Misc.
  
  All access to objects should be  mediated by a cache (the core of the
  middle-end).
  
  There should be certain types of stereotyped interfaces e.g. for objects
  that behave like files.  This allows caches to be smarter.
  
  Once in object has been resolved, it should have an object ID which can be
  used in internal caching.
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/overview_aek
  
  Index: overview_aek
  ===================================================================
  
  From akosut@leland.Stanford.EDU Thu Jul 23 09:38:40 1998
  Date: Sun, 19 Jul 1998 00:12:37 -0700 (PDT)
  From: Alexei Kosut <akosut@leland.Stanford.EDU>
  To: new-httpd@apache.org
  Subject: Apache 2.0 - an overview
  
  For those not at the Apache meeting in SF, and even for those who were,
  here's a quick overview of (my understanding of) the Apache 2.0
  architecture that we came up with. I present this to make sure that I have
  it right, and to get opinions from the rest of the group. Enjoy.
  
  
  1. "Well, if we haven't released 2.0 by Christmas of 1999, it won't
      matter anyway." 
  
  A couple of notes about this plan: I'm looking at this right now from a
  design standpoint, not an implementation one. If the plan herein were
  actually coded as-is, you'd get a very inefficient web server. But as
  Donald Knuth (Professor emeritus at Stanford, btw... :) points out,
  "premature optimization is the root of all evil." Rest assured there are
  plenty of ways to make sure Apache 2.0 is much faster than Apache 1.3.
  Taking out all the "slowness" code, for example... :)
  
  Also, the main ideas in this document mainly come from Dean Gaudet, Simon
  Spero, Cliff Skolnick and a bunch of other people, from the Apache Group's
  meeting in San Francisco, July 2 and 3, 1998. The other ideas come from
  other people. I'm being vague because I can't quite remember. We should
  have videotaped it.  I've titled the sections of this document with quotes
  from our meeting, but they are paraphrased from memory, so don't take them
  too seriously.
  
  2. "But Simon, how can you have a *middle* end?"
  
  One of the main goals of Apache 2.0 is protocol independence (i.e.,
  serving HTTP/1.1, HTTP-NG, and maybe FTP or gopher or something). Another
  is to rid the server of the belief that everything is a file. Towards this
  end, we divide the server up into three parts, the front end, the middle
  end, and the back end.
  
  The front end is essentially a combination of http_main and http_protocol
  today. It takes care of all network and protocol matters, interpreting the
  request, putting it into a protocol-neutral form, and (possibly) passing
  it off to the rest of the server. This is approximately equivalent to the
  part of Apache contained in Dean's flow stuff, and it also works very well
  in certain non-Unix-like architectures such as clustered mainframes. In
  addition, part of this front-end might be optionally run in kernel space,
  giving a very fast server indeed...
  
  The back end is what generates the content. At the back of the back end we
  have backing stores (Cliff's term), which contain actual data. These might
  represent files on a disk, entries in a database, CGI scripts, etc... The
  back end also consists of other modules, which can alter the request in
  various fashions. The objects the server acts on can be thought of (Cliff
  again) as a filehandle and a set of key/value pairs (metainformation).
  The modules are set up as filters that can alter either one of those,
  stacking I/O routines onto the stream of data, or altering the
  metainformation.
  
  The middle end is what comes between the front and back ends. Think of
  http_request. This section takes care of arranging the modules, backing
  stores, etc... into a manner so that the path of the request will result
  in the correct entity being delivered to the front end and sent to the
  client.
  
  3. "I won't embarrass you guys with the numbers for how well Apache
      performs compared to IIS." (on NT)
  
  For a server that was designed to handle flat files, Apache does it
  surprisingly poorly, compared with other servers that have been optimized
  for it. And the performance for non-static files is, of course, worse.
  While Apache is still more than fast enough for 95% of Web servers, we'd
  be remiss to dismiss those other 5% (they're the fun ones anyway). Another
  problem Apache has is its lack of a good, caching, proxy module.
  
  Put these together, along with the work Dean has done with the flow and
  mod_mmap_static stuff, and we realize the most important part of Apache
  2.0: a built-in, all-pervasive, cache. Every part of the request process
  will involve caching. In the path outlined above, between each layer of
  the request, between each module, sits the cache, which can (when it is
  useful), cache the response and its metainformation - including its
  variance, so it knows when it is safe to give out the cached copy. This
  gives every opportunity to increase the speed of the server by making sure
  it never has to dynamically create content more than it needs to, and
  renders accelerators such as Squid unnecessary.
  
  This also allows what I alluded to earlier: a kernel (or near-to-kernel)
  based web server component, which could read the request, consult the
  cache to find the requested object, and spit it back out, without so much
  as an interrupt in the way. Of course, the rest of Apache (with all its
  modules - it's generally a bad idea to let unknown, untrusted code, insert
  itself into the kernel) sits up in user-space, ready to handle any request
  the micro-Apache can't.
  
  A built-in cache also makes a real working HTTP/1.1 proxy server trivially
  easy to write.
  
  4. "Stop asking about backwards compatibility with the API. We'll write a
      compatibility module... later." 
  
  If modules are as described above, then obviously they are very much
  distinct from how Apache's current modules function. The only module
  function that is similar to the current model is the handler, or backing
  store, that actually provides the basic stream of data that the server
  alters to product a response entity.
  
  The basic module's approach to its job is to stack a filter onto the
  output. But it's better to think of the modules not as a stack that the
  request flows through (a layer cake with cache icing between the layers),
  but more of a mosaic (pretend I didn't use that word. I wrote collage. You
  can't prove anything), with modules stuck onto various sides of the
  request at different points, altering the request/response.
  
  Today's Apache modules take an all-or-nothing approach to request
  handlers. They tell Apache what they can do, overestimating, and then are
  supposed to DECLINE if they don't pass a number of checks they are
  supposed to make. Most modules don't do this correctly. The better
  approach is to allow the modules to inform Apache exactly of what they can
  do, and have Apache (the middle-end) take care of invoking them when
  appropriate.
  
  The final goal of all of this, of course, is simply to allow CGI output to
  be parsed for server-side includes. But don't tell Dean that.
  
  5. "Will Apache run without any of the normal Unix binaries installed,
      only the BSD/POSIX libraries?"
  
  Another major issue is, of course, configuration of the server. There are
  a number of distinct opinions on this, both as to what should be
  configured and how it should be done. We talked mainly about the latter,
  but the did touch on the former. Obviously, with a radically distinct
  module API, the configuration is radically different. We need a good way
  to specify how the modules are supposed to interact, and of controlling
  what they can do, when and how, balancing what the user asks the server to
  do, and what the module (author) wants the server to do. We didn't really
  come up with a good answer to this.
  
  However, we did make some progress on the other side of the issue: We
  agreed that the current configuration system is definitely taking the
  right approach. Having a well-defined repository of the configuration
  scheme, containing the possible directives, when they are applicable, what
  their parameters are, etc... is the right way to go. We agreed that more
  information and stronger-typing (no RAW_ARGS!) would be good, and may
  enable on-the-fly generated configuration managers.
  
  We agreed that such a program, probably external to Apache, would generate
  a configuration and pass it to Apache, either via a standard config file,
  or by calling Apache API functions. It is desirable to be able to go the
  other way, pulling current configuration from Apache to look at, and
  perhaps change it on the fly, but unfortunately is unlikely this
  information would always be available; modules may perform optimizations
  on their configuration that makes the original configuration unavailable.
  
  For the language and specification of the configuration, we thought
  perhaps XML might be a good approach, and agreed it should be looked
  into. Other issues, such as SNMP, were brought up and laughed at.
  
  6. "So you're saying that the OS that controls half the banks, and 90% of
      the airlines, doesn't even have memory protection for seperate
      processes?"
  
  Obviously, there are a lot more items that have to be part of Apache 2.0,
  and we talked about a number of them. However, the four points above, I
  think, represent the core of the architecture we agreed on as a starting
  point.
  
  -- Alexei Kosut <akosut@stanford.edu> <http://www.stanford.edu/~akosut/>
     Stanford University, Class of 2001 * Apache <http://www.apache.org> *
  
  
  
  
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/page_io
  
  Index: page_io
  ===================================================================
  
  From dgaudet@arctic.org Fri Feb 20 00:36:52 1998
  Date: Fri, 20 Feb 1998 00:35:37 -0800 (PST)
  From: Dean Gaudet <dgaudet@arctic.org>
  To: new-httpd@apache.org
  Subject: page-based i/o
  X-Comment: Visit http://www.arctic.org/~dgaudet/legal for information regarding copyright and disclaimer.
  Reply-To: new-httpd@apache.org
  
  Ed asked me for more details on what I mean when I talk about "paged based
  zero copy i/o". 
  
  While writing mod_mmap_static I was thinking about the primitives that the
  core requires of the filesystem.  What exactly is it that ties us into the
  filesystem?  and how would we abstract it?  The metadata (last modified
  time, file length) is actually pretty easy to abstract.  It's also easy to
  define an "index" function so that MultiViews and such can be implemented. 
  And with layered I/O we can hide the actual details of how you access
  these "virtual" files. 
  
  But therein lies an inefficiency.  If we had only bread() for reading
  virtual files, then we would enforce at least one copy of the data. 
  bread() supplies the place that the caller wants to see the data, and so
  the bread() code has to copy it.  But there's very little reason that
  bread() callers have to supply the buffer... bread() itself could supply
  the buffer.  Call this new interface page_read().  It looks something like
  this:
  
      typedef struct {
  	const void *data;
  	size_t data_len; /* amt of data on page which is valid */
  	... other stuff necessary for managing the page pool ...
      } a_page_head;
  
      /* returns NULL if an error or EOF occurs, on EOF errno will be
       * set to 0
       */
      a_page_head *page_read(BUFF *fb);
  
      /* queues entire page for writing, returns 0 on success, -1 on
       * error
       */
      int page_write(BUFF *fb, a_page_head *);
  
  It's very important that a_page_head structures point to the data page
  rather than be part of the data page.  This way we can build a_page_head
  structures which refer to parts of mmap()d memory.
  
  This stuff is a little more tricky to do, but is a big win for performance.
  With this integrated into our layered I/O it means that we can have
  zero-copy performance while still getting the advantages of layering.
  
  But note I'm glossing over a bunch of details... like the fact that we
  have to decide if a_page_heads are shared data, and hence need reference
  counting (i.e. I said "queues for writing" up there, which means some
  bit of the a_page_head data has to be kept until its actually written).
  Similarly for the page data.
  
  There are other tricks in this area that we can take advantage of --
  like interprocess communication on architectures that do page flipping.
  On these boxes if you write() something that's page-aligned and page-sized
  to a pipe or unix socket, and the other end read()s into a page-aligned
  page-sized buffer then the kernel can get away without copying any data.
  It just marks the two pages as shared copy-on-write, and only when
  they're written to will the copy be made.  So to make this work, your
  writer uses a ring of 2+ page-aligned/sized buffers so that it's not
  writing on something the reader is still reading.
  
  Dean
  
  ----
  
  For details on HPUX and avoiding extra data copies, see
  <ftp://ftp.cup.hp.com/dist/networking/briefs/copyavoid.pdf>.
  
  (note that if you get the postscript version instead, you have to 
  manually edit it to remove the front page before any version of 
  ghostscript that I have used will read it)
  
  ----
  
  I've been told by an engineer in Sun's TCP/IP group that zero-copy TCP
  in Solaris 2.6 occurs when:
  
      - you've got the right interface card (OC-12 ATM card I think)
      - you use write()
      - your write buffer is 16k aligned and a multiple of 16k in size
  
  We currently get the 16k stuff for free by using mmap().  But sun's
  current code isn't smart enough to deal with our initial writev()
  of the headers and first part of the response.
  
  ----
  
  Systems that have a system call to efficiently send the contents of a 
  descriptor across the network.  This is probably the single best way
  to do static content on systems that support it.
  
  HPUX: (10.30 and on)
  
        ssize_t sendfile(int s, int fd, off_t offset, size_t nbytes,
                const struct iovec *hdtrl, int flags);
  
        (allows you to add headers and trailers in the form of iovec
        structs)  Marc has a man page; ask if you want a copy.  Not included
        due to copyright issues.  man page also available from 
        http://docs.hp.com/ (in particular, 
        http://docs.hp.com:80/dynaweb/hpux11/hpuxen1a/rvl3en1a/@Generic__BookTextView/59894;td=3 )
  
  Windows NT:
  
  	BOOL TransmitFile(     SOCKET hSocket, 
  	    HANDLE hFile, 
  	    DWORD nNumberOfBytesToWrite, 
  	    DWORD nNumberOfBytesPerSend, 
  	    LPOVERLAPPED lpOverlapped, 
  	    LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, 
  	    DWORD dwFlags 
  	   ); 
  
  	(does it start from the current position in the handle?  I would
  	hope so, or else it is pretty dumb.)
  
  	lpTransmitBuffers allows for headers and trailers.
  
  	Documentation at:
  
  	http://premium.microsoft.com/msdn/library/sdkdoc/wsapiref_3pwy.htm
  	http://premium.microsoft.com/msdn/library/conf/html/sa8ff.htm
  
  	Even less related to page based IO: just context switching:
  	AcceptEx does an accept(), and returns the start of the
  	input data.  see:
  
  	http://premium.microsoft.com/msdn/library/sdkdoc/pdnds/sock2/wsapiref_17jm.htm
  
  	What this means is you require one less syscall to do a
  	typical request, especially if you have a cache of handles
  	so you don't have to do an open or close.  Hmm.  Interesting
  	question: then, if TransmitFile starts from the current
  	position, you need a mutex around the seek and the
  	TransmitFile.  If not, you are just limited (eg. byte
  	ranges) in what you can use it for.
  
  	Also note that TransmitFile can specify TF_REUSE_SOCKET, so that
  	after use the same socket handle can be passed to AcceptEx.  
  	Obviously only good where we don't have a persistent connection
  	to worry about.
  
  ----
  
  Note that all this is shot to bloody hell by HTTP-NG's multiplexing.
  If fragment sizes are big enough, it could still be worthwhile to
  do copy avoidence.  It also causes performance issues because of
  its credit system that limits how much you can write in a single
  chunk.
  
  Don't tell me that if HTTP-NG becomes popular we will seen vendors 
  embedding SMUX (or whatever multiplexing is used) in the kernel to
  get around this stuff.  There we go, Apache with a loadable kernel
  module.  
  
  ----
  
  Larry McVoy's document for SGI regarding sendfile/TransmitFile:
  ftp://ftp.bitmover.com/pub/splice.ps.gz
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/process-model.html
  
  Index: process-model.html
  ===================================================================
  <html>
  <head>
  <title>Process Model Design</title>
  </head>
  <body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000080" alink="#ff0000">
  
  <h1>Process Model Design</h1>
  
  <hr><br>
  <p>Note:  Dean wrote the initial version of this with input from various other
  folks.  RST has since mailed Dean and convinced Dean that a lot of this is
  way overboard... and some day when Dean has a chance those extra arguments
  will appear here.  But for now, here's a start on this which is way overboard.
  <hr><br>
  
  <p>Start by reading the
  <a href="http://www.cs.wustl.edu/~jxh/research/research.html">JAWS papers</a>.
  They provide a good background for what we need to think about.
  
  <p>Apache's process models are currently implemented by
  <code>http_main.c</code>.  The addition of the WIN32 code has made it almost
  unreadable.  It needs abstraction and cleanup.  Specifically,
  <code>http_main</code> provides the following functionality:
  
  <ul>
  <li>request dispatch
  <li>timers
  <li>mutexes
  <li>shared memory
  <li>process/thread mgmt
  </ul>
  
  Most of the above are not abstracted sufficiently (i.e. timers, mutexes,
  shared memory).  And there are some missing things that will be needed
  for some of the process models.
  
  <p>Note that the beauty of Apache's current design is that outside of
  <code>http_main</code> very little code cares about how requests are
  dispatched.  The module API has also been designed such that essentially
  no synchronization needs to be done between running requests, for
  example there are (almost) no data structures that require mutexes.
  But the latter is not something that we absolutely need to maintain,
  because there are optimizations that set up data structures which require
  some synchronization... and opening up these potentials is one of the
  purposes of this paper.
  
  <h3>Definitions</h3>
  
  <dl>
  <dt>process
  <dd>A process is the "heaviest" unit of kernel scheduling.  Processes
  do not share address spaces or file resources except through explicit
  methods (such as inheriting file handles or share mem segments, or
  mapping the same file in a shared way).  Processes are pre-emptively
  multitasked.
  
  <dt>thread
  <dd>The term thread will refer <b>only to kernel supplied threads</b>.
  A thread is the "lightest" unit of kernel scheduling.  At least one
  thread exists within each process.  If multiple threads can exist
  within each process then they all share the same memory and file
  resources.  Threads are pre-emptively multitasked.
  
  <dt>fiber
  <dd>A fiber is a user-level "thread".  Fibers are <b>co-operatively
  multitasked</b>, with context switching occuring only at I/O points
  or at explicit yield points.  A fiber can be scheduled to run in any
  thread in the same process.  Typically fibers are implemented entirely
  by user-level libraries, under Unix the I/O would be handled by using
  select() multiplexing.  The term is borrowed from WIN32, which actually
  supplies a fiber interface in the API.  Fibers are very similar to
  "co-routines".  SunOS 4.x "light-weight processes" are fibers, but
  SunOS 5.x LWPs are actually threads.
  </dl>
  
  <h3>What process models are interesting?</h3>
  
  <p>The models vary in three dimensions: number of processes, number
  of threads within each process, number of fibers within each thread.
  In all models, a fiber is used to handle each request -- that is, most
  code in the server can treat the fiber as the only unit of execution
  worth worrying about.
  
  <p>I believe the following models are "interesting":
  
  <ul>
  <li>Single process, single thread, single fiber (SSS).  This is
  the current "inetd mode" and "-X" mode.  It should be easy to maintain
  as a special case of other models.
  
  <li>Multiple process, single thread, single fiber (MSS).  This is the
  current Unix model, and needs to be maintained for maximum portability.
  
  <li>Multiple process, single thread, multiple fiber (MSM).  In each
  process a user-level threads package handles context switches according
  to the completion of I/O.  This is typical "select-event threading"
  under Unix.  This is how Zeus and Squid work, and should be portable to
  essentially every Unix, with a performance advantage over MSS.
  In the MSM model there should be enough processes to exploit the available
  parallelism in the hardware.
  
  <li>Single process, multiple thread, single fiber (SMS).  This is probably
  the easiest to implement "multi-threaded" model.  One process has multiple
  kernel threads, each thread runs a single fiber.  This should be
  implementable under WIN32, OS2, and with POSIX threads.
  
  <li>Single process, multiple thread, multiple fiber (SMM).  This is
  probably the highest performing model.  Under WIN32 this can be achieved
  by using completion ports.  In this model the threads are used to
  run fibers whose I/O are ready; and only enough threads to exploit
  parallelism available in the hardware are used.  The JAWS papers show
  how well this model performs under NT.  It appears possible to implement
  this model under POSIX as well using pthreads, and extended signals,
  but the performance benefit is unknown.
  </ul>
  
  <p>Note that any single process model is subject to robustness issues
  depending on whether a single thread is terminated or an entire process
  is terminated when segfaults and such occur.  So the MMS and MMM models
  are also interesting, but shouldn't be much more work than SMS, SMM
  respectively given that we already need to support MSS and MSM.
  
  <h3>How do we implement fibers?</h3>
  
  <p>In order to abstract fibers so that we can implement all of the above
  models easily we need to abstract all I/O.  That is, we cannot allow
  code outside of the process model code itself to make any system calls.
  As mentioned, the majority of the code in the server will only need to
  know that it is running in a fiber, and not worry how that fiber gets
  time on a CPU.  In the multi-fiber models it would be death if one fiber
  was able to block a thread for an indeterminate time due to I/O (fibers
  can be compute intensive and cause problems -- but this is a separate
  issue solved by a yield primitive).  This is why we have to abstract
  I/O -- for example, in the MSM model all I/O will be done using
  non-blocking file descriptors, and the fiber will be suspended until
  a select() mask indicates that the event is ready.
  
  <p>Given the already existing abstractions (BUFF and the rput/rprintf/etc
  calls) this isn't too much different than what we have now.  Some specific
  things that need work:
  
  <ul>
  <li><b>Stack Usage:</b> This is perhaps the worst issue of all.
  Many routines assume they can allocate large amounts of stack space
  as temporary storge.  A fiber library allows systems to be built with
  thousands of fibers (contrast with threads, for which the OS starts to
  chunk after a certain number of threads because the context is still
  too heavy).  Fibers (and kernel threads for that matter) typically have
  a <i>static</i> sized stack.  One solution is to abstract string and
  URL operations a bit more and use pools more liberally.
  
  <li>FILE *, we can't use it.  BUFF is probably the best replacement.
  While things like sfio provide a useable replacement, we've discussed
  them in the past and decided that there are copyright and portability
  issues.
  
  <li>opendir/readdir/closedir.  On systems where it's availble we will
  have to use open()/getdents() to simulate opendir/readdir.  To see
  why consider NFS filesystems.  If a readdir() is performed on an NFS
  filesystem it could block for an indefinate amount of time -- we
  cannot allow that to happen in any multi-fiber model.  So we have
  to use open() and select() it for reading before using getdents().
  If this isn't available then we'll have to live with the blocking
  potential of readdir().  (It is available on BSD 4.4 systems,
  Linux, Solaris, IRIX, i.e. I doubt this is a big problem).
  
  <li>DNS resolver.  This sucks.  It's likely that we can ignore this
  problem for some cases because Solaris provides an asynchronous
  resolver, and so do glibc-2.x systems (i.e. Linux).  For those
  that don't we have the option of doing resolving in an external
  process via a pipe() so that we can select() on it.  Consult
  squid for some example code in this area, squid uses an external
  process in all of its implementations.
  
  <li>chown, chmod, unlink, ...  I'm not aware of any asynchronous
  way to do these, which means trouble on NFS in multi-fiber
  models.  One workaround is to run more threads than otherwise
  would seem necessary.  Another workaround is to maintain a pool
  of threads which only do these otherwise blocking activities.
  Consult squid 1.2 development for some example code in this area.
  
  <li>signals.
  </ul>
  
  <p>We need to specify this abstraction.  It should be as simple as
  saying "use <code>apio_open</code>" instead of "<code>open</code>",
  "<code>apio_read</code>" instead of "<code>read</code>", and so on.
  The <code>apio_*</code> functions have POSIX semantics.  (Note that
  we can't use <code>aio_*</code> because this is the prefix for POSIX
  asynchronous I/O functions.)
  
  <h4>Example: MSS, and MMS</h4>
  
  <p>The MSS and MMS models have the easiest fiber implementation:
  a fiber is the same as a thread.  In both of these models, the entire apio
  abstraction can consist of #define wrappers for the real POSIX
  functions.
  
  <h4>Example: MSM</h4>
  
  <p>In the MSM model we need to build an extensive apio library,
  and a fiber implementation.  This is a well studied problem
  though, "green threads" used by Sun's Java implementation is
  one example.
  
  <p>A fiber's context consists of:  its stack, its current pc (program
  counter), and its signal context (what handlers are registered, blocked
  signals, etc.).  We don't need to worry about what its registers and
  such are because all context switching is done via function calls and
  the C compiler will take care of those details for us.  An easy
  way to implement the pc/stack context is to use setjmp/longjmp.  Where
  available sigaltstack/sigstack provide an interesting method (thanks
  to RST for this one).  setjmp/longjmp actually save more context
  than necessary, but we can provide hand-tuned assembly for specific
  platforms (i.e. i386).
  
  <p>The apio library makes sure that all I/O is done non-blocking.
  When an I/O request is made it is delayed until a particular fd is
  ready for read or write.  The main scheduling loop for fibers
  builds a select() call, and issues it.  Then parses the results
  to figure out which fiber to schedule next.
  
  <h3>How do we initialize all of this?</h3>
  
  <p>The server goes through the following initialization steps:
  
  <dl>
  <dt>read_config
  <dd>The configuration is read, and probably re-read as it currently
      is.
  <dt>main_process_init
  <dd>This happens before any other processes, threads, or fibers
      are created.
  <dt>sub_process_init
  <dd>In all models this phase occurs every time a sub-process is
      created.  In Sxx models this phase will only ever occur once.
      In Mxx models this will occur many many times.  This phase
      occurs in the context of the new sub-process; and occurs
      before any extra threads are created in the new sub-process.
  <dt>thread_init
  <dd>This phase occurs every time a new thread is created.  In
      xSx models it will only occur once per sub-process.  In xMx
      models it will occur every time a thread is created.  This
      phase occurs in the context of the new thread.
      (Note: we may have special threads for the purpose of implementing
      the asynchronous apio library, said threads will only ever
      do I/O and do not go through this initialization phase.  Their
      existance is abstracted away by the apio library itself.)
  <dt>fiber_init
  <dd>We have two choices for the xxM models.  We can create a fiber for
      each request, in which case this phase is redundant.  Or we can
      maintain pools of fibers.  I believe we'll want to maintain pools
      of fibers.  So in anticipation of that, this phase exists and is
      called once per new fiber in the context of the new fiber.
  </dl>
  
  <p>Note: There are other API phases that we need to consider in 2.0,
  but I don't think they're related to the process model discussion.
  
  <p>Note: each phase has a pool associated with it.  For example, the
  pool used for sub_process_initialization will be cleaned up when the
  sub-process dies.  In this manner modules can register cleanups
  with the correct scope without us needing to explicitly define
  cleanup phases.
  
  <h3>Shared Memory, Mutexes, Conditional Definitions</h3>
  
  <p>Some code and optimizations require the use of shared memory and
  mutexes.  We already have several methods of doing each in the MSS model,
  they need to be abstracted.  It should be possible to allocate shared
  memory and mutexes in any pool.  However in the MSS and MSM models it's
  imperitive that they occur during main_process_init.  So modules
  written using shared memory or mutexes that expect maximum portability
  will have to allocate during main_process_init.  This is not an absolute
  requirement, modules may only work in certain models, or may only
  have some features in certain models.
  
  <p>To make this possible we will provide compile time macros to determine
  the process model.  That is, even though on some systems we will
  have the option of building multiple process models, we will require the
  model to be a compile time decision, and we will allow modules to be
  dependant on the model they were compiled in.
  
  <p>We define:
  
  <ul>
  <li>APPM_MULTI_PROCESS = 1
  <li>APPM_MULTI_THREAD = 2
  <li>APPM_MULTI_FIBER = 4
  <li>APPM_MODEL = combination of above bits
  </ul>
  
  For example, MSM will have:
  
  <blockquote><pre>
  #define APPM_MODEL (APPM_MULTI_PROCESS | APPM_MULTI_FIBER)
  </pre></blockquote>
  
  And code can conditionally test things:
  
  <blockquote><pre>
  #if APPM_MODEL &amp; APPM_MULTI_PROCESS
  /* do something specific to multi process models */
  #endif
  
  #if APPM_MODEL == (APPM_MULTI_PROCESS|APPM_MULTI_FIBER)
  /* do something specific to MSM */
  #endif
  </pre></blockquote>
  
  <h3>The Main Loop</h3>
  
  <p>Hidden somewhere in the process model is the method by which a
  request is received and then dispatched into a fiber running inside
  some thread inside some process.  There is currently no API to
  tap into this, and because Apache is only an HTTP server it hasn't
  been an issue.  The closest thing to an API to tap into it is the
  <code>STANDALONE_MAIN</code> definition.  But to use that the user
  must supply a complete <code>standalone_main()</code> replacement, and
  use a different <code>child_main</code> (i.e. must supply a complete
  process model replacement).  This won't be feasible after the process
  model has been abstracted because there will be too many models to try
  to re-implement.
  
  <p>Other than the process model itself, standalone_main/child_main
  provide the following services:
  
  <ul>
  <li>open a network socket for listening, accept/dispatch requests
  <li>the scoreboard
  <li>monitor an <code>other_child</code> (the
      <code>register_other_child</code> API)
  </ul>
  
  <h4>monitoring sockets</h4>
  
  <p>It should be easy to abstract the network functions.  In the Unix
  models it's sufficient to supply a few <code>fd_sets</code> for
  <code>select</code>, a <code>void *</code>, and a callback.  TODO:
  need to figure out the cleanest way to do this so that the WIN32 and
  OS2 models can implement it well.  Oh yeah, consider <code>poll()</code>
  while you're at it, because poll works better on sparse fd_sets.
  
  <h4>The Scoreboard</h4>
  
  <p>The scoreboard is very intimately tied to the process model.
  In theory some models may be able to run without a scoreboard at all.
  For example an all static content site running in MSM or SMM models
  should never need to spawn or destroy any threads/processes.  Such a
  server would spawn enough threads/processes initially to exploit the
  parallelism in the hardware, and no more.  In general there is
  likely to always be a scoreboard, but its use and contents may
  vary widely.
  
  <p>The scoreboard currently provides the following:
  
  <ul>
  <li>status of the server at a glance
  <li>an optimized alarm() implementation
  <li>data for a customized logging module, to log info about how long
      a request takes for example
  </ul>
  
  <p>I propose that the first function will have to be supplied by a
  module which is process model dependant, and which uses unexported
  interfaces to the scorebard.  The second function is part of
  the process model itself, and is hidden behind the timeout API
  already.
  
  <p>The third function can be provided by an API like this:
  
  <blockquote><pre>
  typedef enum {
      REQSTAT_MILLISECONDS	/* #msecs request took, unsigned long */
      /* uhhh what other fields are of use to a module?? */
  } reqstat_t;
  
  /* returns 0, and stores result in *result if successful
   * returns -1 and sets errno in the event of an error.
   * possible errno values:  EINVAL -- not supported in this process model
   */
  extern int get_reqstat(request_rec *r, reqstat_t index, void *result);
  </pre></blockquote>
  
  <h3>More Thoughts</h3>
  
  <p>I think the above is general enough to implement the interesting
  process models, and to implement optimizations that are available only
  in some of the multi-threaded models.  Note that nothing above
  is specific to HTTP, and I believe that we should strive to keep the
  abstraction so that the same libraries can be used to implement other
  types of servers (i.e. FTP, streaming video/audio, corba).
  
  <p>For many systems there will be multiple process model options.
  It's hard to say which one will be "best"... because some modules
  may work out better in different models.  This will complicate binary
  distribution of the server.  The compile time model choice should be
  made in the Configuration file.  If possible we want to avoid code
  duplication, so the os/osname/ directories are probably not where the
  models should be implemented.  We should probably have pm/unix-mss,
  pm/unix-msm, pm/win32-sms, etc.
  
  <p>Ben Hyde adds: "I always end up adding a priority scheme of some sort,
  and I find it is best if the priority is on the transaction and not on
  the thread.  I don't know how many systems I've had to rework that in."
  
  <p>Note that it's possible to implement an MSM model in which fibers
  can migrate from process to process by using a lot of shared memory,
  and file handle passing.  Maybe this is a good thing, maybe not.  I don't
  think anything above makes this impossible... but the MSM notation isn't
  specific enough to distinguish the two different models.
  
  <p>The whole reason to consider process models is for performance, but
  performance has to be balanced with portability.  I'm confident that
  with this design we should be able to implement the highest performing
  models with very little overhead, and not degrade performance on the
  lower models at all.
  
  <p>This design can be fleshed out and implemented somewhat "organically".
  Several people can be working on it at the same time because there are
  many models that need to be implemented.  Hopefully during this process
  we'll be able to hash out the actual API details.  I hope the above
  is enough to get people started.
  
  <h3>Other References</h3>
  
  <p><i>Implementing Lightweight Threads</i>, D. Stein, D. Shah, SunSoft Inc.
  (<a href="http://www.arctic.org/~dgaudet/apache/2.0/impl_threads.ps.gz">postscript</a>).
  
  </body>
  </html>
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/process_model
  
  Index: process_model
  ===================================================================
  See Dean's full proposal in process-model.html
  
  ----
  
  There is a decent discussion of Win NT completion ports at:
  
  http://premium.microsoft.com/msdn/library/techart/html/servrapp.htm
  
  and a so-so discussion of Win32 multithreading performance at: 
  
  http://premium.microsoft.com/msdn/library/techart/html/threadli.htm
  
  The latter can be a bit trivial (eg. IO bounds tasks generally work better
  when concurrently executed in multiple threads, CPU bound tasks work best
  when serialized.  duh.) but has some useful stuff in.
  
  It appears that the best way for static content on NT is to use
  TransmitFile, completion ports, plus a cache of file handles.  Win32
  doesn't support all of that, but that isn't a big deal.
  
  Completion ports appear to be able to map into async IO (ie. aio_* 
  stuff) on Unix fine, however from what I understand some systems don't
  implement AIO for sockets.
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/some_reasons_for_layered_io
  
  Index: some_reasons_for_layered_io
  ===================================================================
  This file is there so that I do not have to remind myself
  about the reasons for Layered IO, apart from the obvious one.
  
  0. To get away from a 1 to 1 mapping
  
     i.e. a single URI can cause multiple backend requests, 
     in arbitrary configurations, such as in paralel, tunnel/piped, 
     or in some sort of funnel mode. Such multiple backend
     requests, with fully layered IO can be treated exactly
     like any URI request; and recursion is born :-)
  
  1. To do on the fly charset conversion
  
     Be, theoretically, be able to send out your content using
     latin1, latin2 or any other charset; generated from static
     _and_ dynamic content in other charsets (typically unicode
     encoded as UTF7 or UTF8). Such conversion is prompted by
     things like the user-agent string, a cookie, or other hints
     about the capabilities of the OS, language preferences and
     other (in)capabilities of the final receipient. 
  
  2. To be able to do fancy templates
  
     Have your application/cgi sending out an XML structure of
     field/value pair-ed contents; which is substituted into a 
     template by the web server; possibly based on information 
     accessible/known to the webserver which you do not want to 
     be known to the backend script. Ideally that template would
     be just as easy to generate by a backend as well (see 0).
  
  3. On the fly translation
  
     And other general text and output mungling, such as translating
     an english page in spanish whilst it goes through your Proxy,
     or JPEG-ing a GIF generated by mod_perl+gd.
  
  Dw.
  
  
  
  1.1                  httpd-site/xdocs/dev/whiteboard/stacked_io
  
  Index: stacked_io
  ===================================================================
  [djg: comments like this are from dean]
  
  This past summer, Alexei and I wrote a spec for an I/O Filters API... 
  this proposal addresses one part of that -- 'stacked' I/O with buff.c. 
  
  We have a couple of options for stacked I/O: we can either use existing
  code, such as sfio, or we can rewrite buff.c to do it.  We've gone over
  the first possibility at length, though, and there were problems with each
  implemenation which was mentioned (licensing and compatibility,
  specifically); so far as I know, those remain issues. 
  
  Btw -- sfio will be supported w/in this model... it just wouldn't be the
  basis for the model's implementation. 
  
       -- Ed Korthof        |  Web Server Engineer --
       -- ed@organic.com    |  Organic Online, Inc --
       -- (415) 278-5676    |  Fax: (415) 284-6891 --
  
  ---------------------------------------------------------------------------
  Stacked I/O With BUFFs
  	Sections:
  
  	1.) Overview
  	2.) The API
  		User-supplied structures
  		API functions
  	3.) Detailed Description
  		The bfilter structure
  		The bbottomfilter structure
  		The BUFF structure
  		Public functions in buff.c
  	4.) Efficiency Considerations
  		Buffering
  		Memory copies
  		Function chaining
  		writev
  	5.) Code in buff.c
  		Default Functions
  		Heuristics for writev
  		Writing
  		Reading
  		Flushing data
  		Closing stacks and filters
  		Flags and Options
  
  *************************************************************************
  		Overview
  
  The intention of this API is to make Apache's BUFF structure modular
  while retaining high efficiency.  Basically, it involves rewriting
  buff.c to provide 'stacked' I/O -- where the data passed through a
  series of 'filters', which may modify it.
  
  There are two parts to this, the core code for BUFF structures, and the
  "filters" used to implement new behavior.  "filter" is used to refer to
  both the sets of 5 functions, as shown in the bfilter structure in the
  next section, and to BUFFs which are created using a specific bfliter.
  These will also be occasionally refered to as "user-supplied", though
  the Apache core will need to use these as well for basic functions.
  
  The user-supplied functions should use only the public BUFF API, rather
  than any internal details or functions.  One thing which may not be
  clear is that in the core BUFF functions, the BUFF pointer passed in
  refers to the BUFF on which the operation will happen.  OTOH, in the
  user-supplied code, the BUFF passed in is the next buffer down the
  chain, not the current one.
  
  *************************************************************************
  		The API
  
  	User-supplied structures
  
  First, the bfilter structure is used in all filters:
      typedef struct {
        int (*writev)(BUFF *, void *, struct iovect *, int);
        int (*read)(BUFF *, void *, char *, int);
        int (*write)(BUFF *, void *, const char *, int);
        int (*flush)(BUFF *, void *, const char *, int, bfilter *);
        int (*transmitfile)(BUFF *, void *, file_info_ptr *);
        void (*close)(BUFF *, void *);
      } bfilter;
  
  bfilters are placed into a BUFF structure along with a
  user-supplied void * pointer.
  
  Second, the following structure is for use with a filter which can
  sit at the bottom of the stack:
  
      typedef struct {
        void *(*bgetfileinfo)(BUFF *, void *);
        void (*bpushfileinfo)(BUFF *, void *, void *);
      } bbottomfilter;
  
  
  	BUFF API functions
  
  The following functions are new BUFF API functions:
  
  For filters:
  
  BUFF * bcreatestack(pool *p, int flags, struct bfilter *,
                      struct bbottomfilter *, void *);
  BUFF * bpushfilter (BUFF *, struct bfilter *, void *);
  BUFF * bpushbuffer (BUFF *, BUFF *);
  BUFF * bpopfilter(BUFF *);
  BUFF * bpopbuffer(BUFF *);
  void bclosestack(BUFF *);
  
  For BUFFs in general:
  
  int btransmitfile(BUFF *, file_info_ptr *);
  int bsetstackopts(BUFF *, int, const void *);
  int bsetstackflags(BUFF *, int, int);
  
  Note that a new flag is needed for bsetstackflags:
  B_MAXBUFFERING
  
  The current bcreate should become
  
  BUFF * bcreatebuffer (pool *p, int flags, struct bfilter *, void *);
  
  *************************************************************************
  		Detailed Explanation
  
  	bfilter structure
  
  The void * pointer used in all these functions, as well as those in the
  bbottomfilter structure and the filter API functions, is always the same
  pointer w/in an individual BUFF.
  
  The first function in a bfilter structure is 'writev'; this is only
  needed for high efficiency writing, generally at the level of the system
  interface.  In it's absence, multiple writes will be done w/ 'write'.
  Note that defining 'writev' means you must define 'write'.
  
  The second is 'write'; this is the generic writing function, taking a BUFF
  * to which to write, a block of text, and the length of that block of
  text.  The expected return is the number of characters (out of that block
  of text) which were successfully processed (rather than the number of
  characters actually written). 
  
  The third is 'read'; this is the generic reading function, taking a BUFF *
  from which to read data, and a void * buffer in which to put text, and the
  number of characters to put in that buffer.  The expected return is the
  number of characters placed in the buffer.
  
  The fourth is 'flush'; this is intended to force the buffer to spit out
  any data it may have been saving, as well as to clear any data the
  BUFF code was storing.  If the third argument is non-null, then it
  contains more text to be printed; that text need not be null terminated,
  but the fourth argument contains the length of text to be processed.  The
  expected return value should be the number of characters handled out
  from the third argument (0 if there are none), or -1 on error.  Finally,
  the fifth argument is a pointer to the bfilter struct containing this
  function, so that it may use the write or writev functions in it.   Note
  that general buffering is handled by BUFF's internal code, and module
  writers should not store data for performance reasons.
  
  The fifth is 'transmitfile', which takes as its arguments a buffer to
  which to write (if non-null), the void * pointer containing configuration
  (or other) information for this filter, and a system-dependent pointer
  (the file_info_ptr structure will be defined on a per-system basis)
  containing information required to print the 'file' in question.
  This is intended to allow zero-copy TCP in Win32.
  
  The sixth is 'close'; this is what is called when the connection is being
  closed.  The 'close' should not be passed on to the next filter in the
  stack.  Most filters will not need to use this, but if database handles
  or some other object is created, this is the point at which to remove it.
  Note that flush is called automatically before this.
  
  	bbottomfilter Structure
  
  The first function, bgetfileinfo, is designed to allow Apache to get
  information from a BUFF struct regarding the input and output sources.
  This is currently used to get the input file number to select on a
  socket to see if there's data waiting to be read.  The information
  returned is platform specific; the void * pointer passed in holds
  the void * pointer passed to all user-supplied functions.
  
  The second function, bpushfileinfo, is used to push file information
  onto a buffer, so that the buffer can be fully constructed and ready
  to handle data as soon as possible after a client has connected.
  The first void * pointer holds platform specific information (in
  Unix, it would be a pair of file descriptors); the second holds the
  void * pointer passed to all user-supplied functions.
  
  [djg: I don't think I really agree with the distinction here between
  the bottom and the other filters.  Take the select() example, it's
  valid for any layer to define a fd that can be used for select...
  in fact it's the topmost layer that should really get to make this
  definition.  Or maybe I just have your top and bottom flipped.  In
  any event I think this should be part of the filter structure and
  not separate.]
  
  	The BUFF structure
  
  A couple of changes are needed for this structure: remove fd and
  fd_in; add a bfilter structure; add a pointer to a bbottomfilter;
  add three pointers to the next BUFFs: one for the next BUFF in the
  stack, one for the next BUFF which implements write, and one
  for the next BUFF which implements read.
  
  
  	Public functions in buff.c
  
  BUFF * bpushfilter (BUFF *, struct bfilter *, void *);
  
  This function adds the filter functions from bfilter, stacking them on
  top of the BUFF.  It returns the new top BUFF, or NULL on error.
  
  BUFF * bpushbuffer (BUFF *, BUFF *);
  
  This function places the second buffer on the top of the stack that
  the first one is on.  It returns the new top BUFF, or NULL on error.
  
  BUFF * bpopfilter(BUFF *);
  BUFF * bpopbuffer(BUFF *);
  
  Unattaches the top-most filter from the stack, and returns the new
  top-level BUFF, or NULL on error or when there are no BUFFs
  remaining.  The two are synonymous.
  
  void bclosestack(BUFF *);
  
  Closes the I/O stack, removing all the filters in it.
  
  BUFF * bcreatestack(pool *p, int flags, struct bfilter *,
                      struct bbottomfilter *, void *);
  
  This creates an I/O stack.  It returns NULL on error.
  
  BUFF * bcreatebuffer(pool *p, int flags, struct bfilter *, void *);
  
  This creates a BUFF for later use with bpushbuffer.  The BUFF is
  not set up to be used as an I/O stack, however.  It returns NULL
  on error.
  
  int bsetstackopts(BUFF *, int, const void *);
  int bsetstackflags(BUFF *, int, int);
  
  These functions, respectively, set options on all the BUFFs in a
  stack.  The new flag, B_MAXBUFFERING is used to disable a feature
  described in the next section, whereby only the first and last
  BUFFs will buffer data.
  
  *************************************************************************
  		Efficiency Considerations
  
  	Buffering
  
  All input and output is buffered by the standard buffering code.
  People writing code to use buff.c should not concern themselves with
  buffering for efficiency, and should not buffer except when necessary.
  
  The write function will typically be called with large blocks of text;
  the read function will attempt to place the specified number of bytes
  into the buffer.
  
  Dean noted that there are possible problems w/ multiple buffers;
  further, some applications must not be buffered.  This can be
  partially dealt with by turning off buffering, or by flushing the
  data when appropriate.
  
  However, some potential problems arise anyway.  The simplest example
  involves shrinking transformations; suppose that you have a set
  of filters, A, B, and C, such that A outputs less text than it
  recieves, as does B (say A strips comments, and B gzips the result).
  Then after a write to A which fills the buffer, A writes to B.
  However, A won't write enough to fill B's buffer, so a memory copy
  will be needed.  This continues till B's buffer fills up, then
  B will write to C's buffer -- with the same effect.
  
  [djg: I don't think this is the issue I was really worried about --
  in the case of shrinking transformations you are already doing 
  non-trivial amounts of CPU activity with the data, and there's
  no copying of data that you can eliminate anyway.  I do recognize
  that there are non-CPU intensive filters -- such as DMA-capable
  hardware crypto cards.  I don't think they're hard to support in
  a zero-copy manner though.]
  
  The maximum additional number of bytes which will be copied in this
  scenario is on the order of nk, where n is the total number of bytes,
  and k is the number of filters doing shrinking transformations.
  
  There are several possible solutions to this issue.  The first
  is to turn off buffering in all but the first filter and the
  last filter.  This reduces the number of unnecessary byte copies
  to at most one per byte, however it means that the functions in
  the stack will get called more frequently; but it is the default
  behavior, overridable by setting the B_MAXBUFFERING with
  bsetstackflags.  Most filters won't involve a net shrinking
  transformation, so even this will rarely be an issue; however,
  if the filters do involve a net shrinking transformation, for
  the sake of network-efficiency (sending reasonably sized blocks),
  it may be more efficient anyway.
  
  A second solution is more general use of writev for communication
  between different buffers.  This complicates the programing work,
  however.
  
  
  	Memory copies
  
  Each write function is passed a pointer to constant text; if any changes
  are being made to the text, it must be copied.  However, if no changes
  are made to the text (or to some smaller part of it), then it may be
  sent to the next filter without any additional copying.  This should
  provide the minimal necessary memory copies.
  
  [djg: Unfortunately this makes it hard to support page-flipping and
  async i/o because you don't have any reference counts on the data.
  But I go into a little detail that already in docs/page_io.]
  
  	Function chaining
  
  In order to avoid unnecessary function chaining for reads and writes,
  when a filter is pushed onto the stack, the buff.c code will determine
  which is the next BUFF which contains a read or write function, and
  reads and writes, respectively, will go directly to that BUFF.
  
  	writev
  
  writev is a function for efficient writing to the system; in terms of
  this API, however, it also works for dealing with multiple blocks of
  text without doing unnecessary byte copies.  It is not required.
  
  Currently, the system level writev is used in two contexts: for
  chunking and when a block of text is writen which, combined with
  the text already in the buffer, would make the buffer overflow.
  
  writev would be implemented both by the default bottom level filter
  and by the chunking filter for these operations.  In addition, writev
  may, be used, as noted above, to pass multiple blocks of text w/o
  copying them into a single buffer.  Note that if the next filter does
  not implement writev, however, this will be equivalent to repeated
  calls to write, which may or may not be more efficient.  Up to
  IOV_MAX-2 blocks of text may be passed along in this manner.  Unlike
  the system writev call, the writev in this API should be called only
  once, with a array with iovec's and a count as to the number of
  iovecs in it.
  
  If a bfilter defines writev, writev will be called whether or not
  NO_WRITEV is set; hence, it should deal with that case in a reasonable
  manner.
  
  [djg: We can't guarantee atomicity of writev() when we emulate it.
  Probably not a problem, just an observation.]
  
  *************************************************************************
  		Code in buff.c
  
  	Default Functions
  
  The default actions are generally those currently performed by Apache,
  save that they they'll only attempt to write to a buffer, and they'll
  return an error if there are no more buffers.  That is, you must implement
  read, write, and flush in the bottom-most filter.
  
  Except for close(), the default code will simply pass the function call
  on to the next filter in the stack.  Some samples follow.
  
  	Heuristics for writev
  
  Currently, we call writev for chunking, and when we get a enough so that
  the total overflows the buffer.  Since chunking is going to become a
  filter, the chunking filter will use writev; in addition, bwrite will
  trigger bwritev as shown (note that system specific information should
  be kept at the filter level):
  
  in bwrite:
  
      if (fb->outcnt > 0 && nbyte + fb->outcnt >= fb->bufsiz) {
          /* build iovec structs */
          struct iovec vec[2];
          vec[0].iov_base = (void *) fb->outbase;
          vec[0].iov_len = fb->outcnt;
          fb->outcnt = 0;
          vec[1].iov_base = (void *)buff;
          vec[1].iov_length = nbyte;
          return bwritev (fb, vec, 2);
      } else if (nbye >= fb->bufsiz) {
          return write_with_errors(fb,buff,nbyte);
      }
  
  Note that the code above takes the place of large_write (as well
  as taking code from it).
  
  So, bwritev would look something like this (copying and pasting freely
  from the current source for writev_it_all, which could be replaced):
  
  -----
  int bwritev (BUFF * fb, struct iovec * vec, int nvecs) {
      if (!fb)
          return -1; /* the bottom level filter implemented neither write nor
                      * writev. */
      if (fb->bfilter.bwritev) {
          return bf->bfilter.writev(fb->next, vec, nvecs);
      } else if (fb->bfilter.write) {
          /* while it's nice an easy to build the vector and crud, it's painful
           * to deal with partial writes (esp. w/ the vector)
           */
          int i = 0,rv;
          while (i < nvecs) {
              do {
                  rv = fb->bfilter.write(fb, vec[i].iov_base, vec[i].iov_len);
              } while (rv == -1 && (errno == EINTR || errno == EAGAIN)
                       && !(fb->flags & B_EOUT));
              if (rv == -1) {
                  if (errno != EINTR && errno != EAGAIN) {
                      doerror (fb, B_WR);
                  }
                  return -1;
              }
              fb->bytes_sent += rv;
              /* recalculate vec to deal with partial writes */
              while (rv > 0) {
                  if (rv < vec[i].iov_len) {
                      vec[i].iov_base = (char *)vec[i].iov_base + rv;
                      vec[i].iov_len -= rv;
                      rv = 0;
                      if (vec[i].iov_len == 0) {
                          ++i;
                      }
                  } else {
                      rv -= vec[i].iov_len;
                      ++i;
                  }
              }
              if (fb->flags & B_EOUT)
                  return -1;
          }
          /* if we got here, we wrote it all */
          return 0;
      } else {
          return bwritev(fb->next,vec,nvecs);
      }
  }
  -----
  The default filter's writev function will pretty much like
  writev_it_all.
  
  
  	Writing
  
  The general case for writing data is significantly simpler with this
  model.  Because special cases are not dealt with in the BUFF core,
  a single internal interface to writing data is possible; I'm going
  to assume it's reasonable to standardize on write_with_errors, but
  some other function may be more appropriate.
  
  In the revised bwrite (which I'll ommit for brievity), the following
  must be done:
  	check for error conditions
  	check to see if any buffering is done; if not, send the data
  		directly to the write_with_errors function
  	check to see if we should use writev or write_with_errors
  		as above
  	copy the data to the buffer (we know it fits since we didn't
  		need writev or write_with_errors)
  
  The other work the current bwrite is doing is
  	ifdef'ing around NO_WRITEV
  	numerous decisions regarding whether or not to send chunks
  
  Generally, buff.c has a number of functions whose entire purpose is
  to handle particular special cases wrt chunking, all of which could
  be simplified with a chunking filter.
  
  write_with_errors would not need to change; buff_write would.  Here
  is a new version of it:
  
  -----
  /* the lowest level writing primitive */
  static ap_inline int buff_write(BUFF *fb, const void *buf, int nbyte)
  {
      if (fb->bfilter.write)
          return fb->bfilter.write(fb->next_writer,buff,nbyte);
      else
          return bwrite(fb->next_writer,buff,nbyte);
  }
  -----
  
  If the btransmitfile function is called on a buffer which doesn't implement
  it, the system will attempt to read data from the file identified
  by the file_info_ptr structure and use other methods to write to it.
  
  	Reading
  
  One of the basic reading functions in Apache 1.3b3 is buff_read;
  here is how it would look within this spec:
  
  -----
  /* the lowest level reading primitive */
  static ap_inline int buff_read(BUFF *fb, void *buf, int nbyte)
  {
      int rv;
  
      if (!fb)
          return -1; /* the bottom level filter is not set up properly */
  
      if (fb->bfilter.read)
          return fb->bfilter.read(fb->next_reader,buf,nbyte,fb->bfilter_info);
      else
          return bread(fb->next_reader,buff,nbyte);
  }
  -----
  The code currently in buff_read would become part of the default
  filter.
  
  
  	Flushing data
  
  flush will get passed on down the stack automatically, with recursive
  calls to bflush.  The user-supplied flush function will be called then,
  and also before close is called.  The user-supplied flush should not
  call flush on the next buffer.
  
  [djg: Poorly written "expanding" filters can cause some nastiness
  here.  In order to flush a layer you have to write out your current
  buffer, and that may cause the layer below to overflow a buffer and
  flush it.  If the filter is expanding then it may have to add more to
  the buffer before flushing it to the layer below.  It's possible that
  the layer below will end up having to flush twice.  It's a case where
  writev-like capabilities are useful.]
  
  	Closing Stacks and Filters
  
  When a filter is removed from the stack, flush will be called then close
  will be called.  When the entire stack is being closed, this operation
  will be done automatically on each filter within the stack; generally,
  filters should not operate on other filters further down the stack,
  except to pass data along when flush is called.
  
  	Flags and Options
  
  Changes to flags and options using the current functions only affect
  one buffer.  To affect all the buffers on down the chain, use
  bsetstackopts or bsetstackflags.
  
  bgetopt is currently only used to grab a count of the bytes sent;
  it will continue to provide that functionality.  bgetflags is
  used to provide information on whether or not the connection is
  still open; it'll continue to provide that functionality as well.
  
  The core BUFF operations will remain, though some operations which
  are done via flags and options will be done by attaching appropriate
  filters instead (eg. chunking).
  
  [djg: I'd like to consider filesystem metadata as well -- we only need
  a few bits of metadata to do HTTP: file size and last modified.  We
  need an etag generation function, it is specific to the filters in
  use.  You see, I'm envisioning a bottom layer which pulls data out of
  a database rather than reading from a file.]
  
  
  
  1.1                  httpd-site/xdocs/docs-project/index.html
  
  Index: index.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
    <TITLE>Apache HTTP Server Documentation Project</TITLE>
   </HEAD>
  
   <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" 
         ALINK="#FF0000">
    <DIV ALIGN="CENTER">
     <IMG SRC="../images/apache_sub.gif" ALT="[APACHE DOCUMENTATION]">
    </DIV>
    <H1 ALIGN="CENTER">Apache HTTP Server Documentation Project</H1>
  
  <p align="center">
    Documentation: <A HREF="../docs/">Version 1.3</A> |
                       <A HREF="../docs-2.0/">Version 2.0</a></p>
  
  <p>The Documentation Project is an effort to maintain and improve the
  quality of the documentation included with the Apache HTTP Server.
  Participation is open to anyone with a little time, a little knowledge
  of HTML, and hopefully a little knowledge about the Apache HTTP
  Server.  No programming knowledge is required, so this is a great way
  for non-programmers to contribute to the success of Apache, and to
  have their work read by millions of Apache users.</p>
  
  <p>This is <strong>not</strong> a mailing list where users should ask
  questions on how to configure Apache.  For this type of question,
  please consult the sources listed in the
  <a href="../docs/misc/FAQ.html">FAQ</a>.</p>
  
  <h2>How to get Involved</h2>
  
  <p>There are lots of ways to contribute to the documentation
  project, including fixing a few typos and spelling mistakes,
  translating the documentation into other languages, writing
  tutorials to help new users, or just expressing your
  opinion about suggested changes.</p>
  
  <p>To start contributing, or just to find out what it is all about,
  you should subscribe to the mailing list by sending an email to
  <a href="mailto:docs-subscribe@httpd.apache.org"
  >docs-subscribe@httpd.apache.org</a>.  For details on how to
  contribute, the best place to start is Ken Coar's
  <a href="http://apache-server.com/tutorials/ATdocs-project.html"
  >Documentation Project Tutorial</a>.</p>
  
  <h2>Translation Projects</h2>
  
  <p>There are several efforts underway to translate the documentation
  into other languages.  These include:</p>
  
  <ul>
  <li><a href="http://cvs.apache.or.jp/docs-project/">Japanese</a></li>
  <li><a href="http://quark.fe.up.pt/ApachES/">Spanish</a></li>
  </ul>
  
  <h2>Participants</h2>
  
  <p>Some of the participants are:</p>
  
  <ul>
  <li><a href="http://www.ntrnet.net/~rbb/">Ryan Bloom</a></li>
  <li><a href="http://www.rcbowen.com/">Rich Bowen</a></li>
  <li><a href="http://Golux.Com/coar/">Ken Coar</a></li>
  <li><a href="http://www.logilune.com/eric/">Eric Cholet</a></li>
  <li><a href="http://www.apache.org/~fanf/">Tony Finch</a></li>
  <li>Yoshiki Hayashi</li>
  <li><a href="http://www.reppep.com/~pepper/">Chris Pepper</a></li>
  <li>William A. Rowe, Jr.</li>
  <li><a href="http://slive.ca/">Joshua Slive</a></li>
  </ul>
  
  <p>The localized custom error messages in the 2.0 version of the
  Apache HTTP Server were contributed by</p>
  
  <ul>
  <li>Lars Eilebrecht (English and German)</li>
  <li>Karla Quintero (Spanish)</li>
  <li>Cecile de Crecy (French)</li>
  </ul>
  
  <h2>Other Information</h2>
  <ul>
   <li><a href="http://nav.webring.yahoo.com/hub?ring=apachesupport&amp;id=13&amp;hub"
       >Apache Support Webring</a></li>
  </ul>
  
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/images/99POYlede.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/SWTopFame.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/SWTopFame00.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/SWTopFame98.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/SWTopFame99.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/SWshowcase.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_email.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_feather.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_feather_bullet.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_feather_promo.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_home.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_index.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_logo.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_pb.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_pb3.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_pb_1.0.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apache_sub.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/apachecon.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/asf_logo_wide.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/coar.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/graybar.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/httpd_logo_wide.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/lars.jpg
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/orange_ball.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/powered_by.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/rasmus.jpg
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/seeusatapachecon.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/small_feather.gif
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/images/smiley.xbm
  
  Index: smiley.xbm
  ===================================================================
  #define smily_width 16
  #define smily_height 16
  static char smily_bits[] = {
   0x00,0x00,0xe0,0x07,0x10,0x08,0x08,0x10,0x04,0x20,0x62,0x46,0x62,0x46,0x02,
   0x40,0x02,0x40,0x12,0x48,0x22,0x44,0xc4,0x23,0x08,0x10,0x10,0x08,0xe0,0x07,
   0x00,0x00};
  
  
  
  1.1                  httpd-site/xdocs/images/stein.jpg
  
  	<<Binary file>>
  
  
  1.1                  httpd-site/xdocs/library/index.html
  
  Index: index.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <HTML>
  <HEAD>
  <TITLE>Apache Project Library</TITLE>
  </HEAD>
  
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  <IMG SRC="../images/apache_sub.gif" ALT="">
  <H1>Apache Project Library</H1>
  
  <HR>
  
  <H3>Organisations and Working Groups</H3>
  <UL>
      <LI><STRONG>Web Organisations</STRONG></LI>
      <UL>
  	    <LI><A HREF="http://www.w3.org/">World Wide Web Consortium</A> (W3C)</LI>
  	</UL>
      <LI><STRONG>IETF Working Groups</STRONG></LI>
      <UL>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/http/">HTTP</A></LI>
          <LI><A HREF="http://www-ns.rutgers.edu/www-security/">HTTP-Security</A></LI>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/webdav/">WebDAV (HTTP Distributed Authoring and Versioning)</A></LI>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/dasl/">DASL (DAV Searching &amp; Locating)</A></LI>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/html/">HTML</A></LI>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/uri/">URI</A></LI>
      </UL>
  </UL>
  
  
  <H3>Protocol Specs and Related Info</H3>
  <UL>
      <LI><STRONG><A HREF="http://www.w3.org/pub/WWW/Protocols/">Hypertext Transfer Protocol</A> (HTTP)</STRONG></LI>
  	<UL>
          <LI><A HREF="http://www.w3.org/pub/WWW/Protocols/rfc1945/rfc1945">RFC1945: HTTP 1.0</A> (Deprecated Standard)</LI>
          <LI><A HREF="http://www.w3.org/pub/WWW/Protocols/rfc2068/rfc2068">RFC2068: HTTP 1.1</A> (Proposed Standard)</LI>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/uri/rfc2396.txt">RFC2396: Uniform Resource Identifiers</A> (Draft Standard)</LI>
  	</UL>
      <LI><STRONG><A HREF="http://www.w3.org/MarkUp/">Hypertext Markup Language</A> (HTML)</STRONG></LI>
  	<UL>
          <LI><A HREF="http://www.ics.uci.edu/pub/ietf/html/rfc1866.txt">RFC1866: HTML 2.0</A></LI>
          <LI><A HREF="http://www.w3.org/TR/REC-html32.html">Reference Spec: HTML 3.2</A></LI>
          <LI><A HREF="http://www.w3.org/TR/REC-html40/">Reference Spec: HTML 4.0</A></LI>
  	</UL>
      <LI><STRONG><A HREF="http://www.webreference.com/index2.html">Related Stuff</A></STRONG></LI>
  	<UL>
          <LI><A HREF="http://hoohoo.ncsa.uiuc.edu/cgi/">Common Gateway Interface - CGI/1.1</A></LI>
          <LI><A HREF="ftp://ftp.iana.org/in-notes/iana/assignments/media-types/">Internet media types</A></LI>
          <LI><A HREF="http://www.w3.org/Daemon/User/Config/Logging.html">Logging in CERN httpd</A></LI>
  	</UL>
  </UL>
  
  <H3>Frequently Asked Questions (FAQs)</H3>
  <UL>
  <LI><A HREF="http://ps.superb.net/FAQ/">FAQ Finder</A></LI>
  <LI><A HREF="http://www.boutell.com/faq/">World Wide Web FAQ</A></LI>
  </UL>
  
  
  <HR>
  
  <A HREF="../"><IMG SRC="../images/apache_home.gif" ALT="Home"></A>
  </BODY>
  </HTML>
  
  
  
  1.1                  httpd-site/xdocs/press/04apr96.txt
  
  Index: 04apr96.txt
  ===================================================================
  
  For Immediate Release
  Contact: The Apache Group - apache@apache.org
  
        APACHE GROUP ANNOUNCES THE WORLD'S MOST POPULAR WEBSERVER
  
  INTERNET - April 3, 1996 - The Apache Group today announced that their
  popular webserver, Apache, was found by the Netcraft Web Server Survey
  to be the most popular server on the Internet. The latest Netcraft
  survey found that Apache and its derivatives claimed a 29% marketshare
  as of April 1st, making it more used than any other webserver on the
  market. The NCSA server, which had previously held the number one
  position, now holds a 26% share of webservers surveyed.
  
  
  Speaking of Apache's competition in the packed World Wide Web server
  arena, Apache Group developer Alexei Kosut remarked, "While
  commercial servers are limited by profit margins and corporate
  politics, a free server like Apache is limited only by the
  imagination." In fact, the Apache Group is working furiously on a new
  version of their server, which Kosut promises will have "more new
  features than you can shake a stick at."
  
  Sameer Parekh, President of Community ConneXion, Inc., commented on
  the Apache server's suitability for high-security applications, "Time
  and time again security incidents on the Internet have shown the
  importance of having source code available for the deployment of
  secure Internet and Intranet applications. Apache is an excellent
  example of the kind of product which is suitable for high security
  applications, since the source is provided with the product allowing
  full scrutiny of its implementation."
  
  Apache is now being backed by full commercial support by a number of
  companies.  Mark Cox, Technical Director of UK Web Ltd., commented
  "Sometimes organisations are hesitant to use unsupported software, but
  with commercial support they can have the peace of mind they require."
  
  "The Netcraft Web Server Survey has become a huge exercise in network
  exploration" said Mike Prettejohn, director of Netcraft, a British
  internet services company, "we are learning a great deal". The April
  Netcraft Survey found more than one hundred fifty thousand servers on
  the Internet, and the full survey results can be reached at
  http://www.netcraft.co.uk/Survey/.
  
  The Apache Group is a collection of volunteers dedicated to the
  development of a high-quality webserver for deployment throughout the
  World-Wide-Web. The Apache Group prides itself on the available
  source, open development environment, and fast bugfix turnaround.
  Information, documentation, binaries, and source for Apache is
  available from the Apache Server's main web site, at
  http://www.apache.org/
  
  
  
  
  1.1                  httpd-site/xdocs/press/05Jan98.txt
  
  Index: 05Jan98.txt
  ===================================================================
  For Release: January 5th, 1998
  
  Contact:
  Jim Jagielski
  The Apache Group
  c/o jaguNET Access Services
  +1 410 931 3157
  
  Mike Prettejohn
  Netcraft, Ltd.
  +44 1225 447500
  
  Sameer Parekh
  C2Net Software, Inc.
  +1 510 986 8770
  
              APACHE WEBSERVER SERVES OVER HALF THE INTERNET
  
  The Apache Web Server, from the Apache Group (http://www.apache.org/),
  now serves over half the domains on the Internet, according to the
  latest Netcraft Web Server Survey (http://www.netcraft.com/). According
  to the January 1998 survey, the Apache server and its derivatives
  serve 50.24% of the 1,834,710 sites found by Netcraft.
  
  From its humble beginnings in early 1995 as a set of patches to the
  original NCSA Web Server, the Apache Web Server has steadily grown in
  popularity as well as power and capability. The Apache server was one
  of the first Web servers to implement the HTTP/1.1 protocol, for
  example. The Apache server has become established as the dominant Web
  server, far outpacing commercial offerings from the giants Microsoft
  and Netscape.
  
  The key to the success of the Apache Web server is its dedicated
  development team. A core group of developers, known as the Apache
  Group, constantly update, fix, and improve the server in order to
  create the best server available. 
  
  Another key to the Apache server's impressive popularity is that it is
  freely available via the Internet. Webmasters can quickly and easily
  download the entire source code for the server to compile it
  themselves, or they can download various precompiled and "ready to
  run" versions.  Since the source code is freely available, it is easy
  for webmasters to greatly enhance the Apache Web server's capability,
  either by adding numerous "modules" which extend the server's
  functions or by editing the actual server code to suit their needs.
  
  "It really is a labour of love," said Jim Jagielski, member of the
  Apache Group. "Every one of us in the Group are committed to making
  Apache the best it can be. We are all experienced Net citizens
  and therefore have a real feel for what's needed. We also listen
  very intently to what is needed and desired by the Net community, so
  we can implement those features into Apache. And since we don't have
  the huge inertia of a commercial company to worry about, we can do it
  quicker and better than anyone else."
  
  "One of the strengths of the Apache project is that many of the core
  team and key contributors are themeselves running high profile sites,
  and so know what is required from first hand experience," said Mike
  Prettejohn, Director of Netcraft, "in particular, the support for
  virtual domains, and the server's overall stability and resilience has
  made Apache the de facto choice for ISPs and hosting companies
  throughout the world."
  
  "Apache is the ideal platform for building mission-critical web-based
  applications," said Sameer Parekh, President of C2Net Software, Inc.,
  whose Stronghold Web Server is the most widely used commercial
  Apache-based server. "Apache confuses most industry analysts because
  they have forgotten that mission-critical Internet services, from web
  services to domain name services to electronic mail, have been running
  on free software since Day One."
  
  The latest version of the Apache Web server is 1.2.4, which runs on
  most UNIX platforms. The next release of the Apache server, version 1.3,
  currently in beta test, will run on both UNIX and Microsoft Windows NT.
  
  Netcraft (http://www.netcraft.com/) is an networking consultancy based
  in Bath, England and is well known worldwide for its Web Server
  Survey, which is widely considered a primary empirical metric for the
  number of web sites and the relative popularity of web server software
  on the internet.
  
  C2Net Software, Inc. (http://www.c2.net/) is a leading provider of
  uncompromised network security software. Through its international
  offshore development programs, all C2Net products are exempt from
  U.S. government export restrictions, allowing the company to offer
  uncrippled, strong cryptography solutions to customers worldwide.
  
  The Apache Group is a group of individuals who are committed to
  developing the best web server in the world and making it freely
  available.
  
                                   ###
  
  
  
  1.1                  httpd-site/xdocs/press/22Jun98.html
  
  Index: 22Jun98.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  <HTML><HEAD>
  <TITLE>IBM joins the Apache Project,
  Plans to bundle and support the Apache HTTP Server</TITLE>
  </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
  <BODY
   BGCOLOR="#FFFFFF"
   TEXT="#000000"
   LINK="#0000FF"
   VLINK="#000080"
   ALINK="#FF0000"
  >
  
  <IMG SRC="../images/apache_sub.gif" ALT="">
  
  <H2 align=center>IBM joins the Apache Project,<br>
  Plans to bundle and support the Apache HTTP Server</H2>
  
  <P>
  INTERNET - June 22, 1998 - The Apache Group announced today that they are
  entering into an engineering partnership with IBM for development of the
  open-source Apache HTTP server software.  IBM will be contributing
  engineering manpower and technology to the project, and will be
  incorporating the award-winning Apache software into the IBM line of
  WebSphere Application Server software, as well as providing support and
  services for the Apache platform.  A technical representative from IBM will
  be joining the Apache Group, which directs the Apache development effort.
  
  <P>
  The Apache Group is a non-profit international organization comprised of
  individuals who jointly develop software for serving World Wide Web pages
  from Unix and NT systems.  The Apache HTTP server software is available at
  no cost, with an open-source license.  Several other companies sell
  derivative products and services based on the Apache distribution.  Apache
  and Apache-based software runs on over half of the Web sites on the
  Internet, according to numbers published by Netcraft Ltd.
  
  <P>
  "This is a major endorsement of the open-source software development model,
  and of the quality of the code we have developed," said Brian Behlendorf,
  Apache Group member.  "IBM will benefit by having a world-class Web serving
  solution to offer to its customers; the Apache Group, and by proxy all users
  of Apache or Apache-derived software, will benefit through contributions
  back to the project by IBM developers."
  
  <P>
  Paraic Sweeney, vice president of IBM's WebSphere Application Server
  Marketing, said, "IBM is pleased to join the Apache Group, and in
  shipping the Apache HTTP Server with the WebSphere Application Server,
  IBM is providing customers with commercial grade support to a highly
  successful product across a broad range of customers."
  
  <P>
  "Open-source development efforts have existed on the Internet for as long
  as it has been around, and much of the software that makes the Internet work
  was developed that way," said Ken Coar, another member of the Apache Group.
  "It's very encouraging that IBM, a major player in the computer industry,
  is recognizing the power and value of the open-source model.  By supporting
  an open-source project rather than pursuing a proprietary and competitive
  effort, IBM is helping to assure that Internet software and standards will
  be the best they can be for everyone, and not just serve a single interest.
  This way, everyone benefits."
  
  <P>
  "Apache's emphasis on developing software according to the latest Internet
  standards, and feeding that development experience back into the standards
  specification process of the Internet Engineering Taskforce (IETF), makes
  the Apache HTTP server an ideal platform for both non-profit and commercial
  products," said Roy Fielding, an Apache Group member and researcher at the
  University of California, Irvine.  "IBM's involvement in the Apache Group
  gives them access to both a robust implementation of current Web technology
  and a premier forum for the development of the future Web architecture.
  Researchers call this `technology transfer,' but in the commercial world
  it is just good business sense."
  
  <P>
  "I am excited to see IBM join the large group of individuals and companies
  that develop and support open-source software," said Dean Gaudet,
  Apache Group member.  "I can't help but feel that we'll see more
  companies begin experimenting with the open development model.
  It is great to be a part of this."
  
  <P>
  With this move, IBM becomes the latest in a series of commercial ventures
  to support the Apache HTTP server project, joining long-time current
  contributors <a href="http://www.c2.net/">C2Net Software</a>
   (&lt;http://www.c2.net/&gt;),
  <a href="http://www.covalent.net/">Covalent Technologies</a>
   (&lt;http://www.covalent.net/&gt;),
  <a href="http://www.aldigital.co.uk/">A. L. Digital</a>
   (&lt;http://www.aldigital.co.uk/&gt;),
  and <a href="http://www.jaguNET.com/">jaguNET Access Services</a>
   (&lt;http://www.jaguNET.com&gt;).
  
  <P>
  The Apache Group was founded in 1995 to address the need for a public,
  open-source, reference implementation of the HTTP protocol which is the
  foundation of the World Wide Web.  The software is developed through a
  collaborative process, involving 18 "core" developers and hundreds of
  auxiliary contributors.  More information on the
  <a href="http://www.apache.org/">Apache project</a> can be
  found at &lt;http://www.apache.org/&gt;.
  
  <P>
  The <a href="http://www.netcraft.com/Survey/">Netcraft Internet Web survey</a>
  can be accessed online at &lt;http://www.netcraft.com/Survey/&gt;.
  
  <HR>
  </BODY></HTML>
  
  
  
  1.1                  httpd-site/xdocs/press/22Jun98.txt
  
  Index: 22Jun98.txt
  ===================================================================
  
                       IBM JOINS THE APACHE PROJECT,
  
             PLANS TO BUNDLE AND SUPPORT THE APACHE HTTP SERVER
  
  INTERNET - June 22, 1998 - The Apache Group announced today that they are
  entering into an engineering partnership with IBM for development of the
  open-source Apache HTTP server software.  IBM will be contributing
  engineering manpower and technology to the project, and will be
  incorporating the award-winning Apache software into the IBM line of
  WebSphere Application Server software, as well as providing support and
  services for the Apache platform.  A technical representative from IBM will
  be joining the Apache Group, which directs the Apache development effort.
  
  The Apache Group is a non-profit international organization comprised of
  individuals who jointly develop software for serving World Wide Web pages
  from Unix and NT systems.  The Apache HTTP server software is available at
  no cost, with an open-source license.  Several other companies sell
  derivative products and services based on the Apache distribution.  Apache
  and Apache-based software runs on over half of the Web sites on the
  Internet, according to numbers published by Netcraft Ltd.
  
  "This is a major endorsement of the open-source software development model,
  and of the quality of the code we have developed," said Brian Behlendorf,
  Apache Group member.  "IBM will benefit by having a world-class Web serving
  solution to offer to its customers; the Apache Group, and by proxy all users
  of Apache or Apache-derived software, will benefit through contributions
  back to the project by IBM developers."
  
  Paraic Sweeney, vice president of IBM's WebSphere Application Server
  Marketing, said, "IBM is pleased to join the Apache Group, and in
  shipping the Apache HTTP Server with the WebSphere Application Server,
  IBM is providing customers with commercial grade support to a highly
  successful product across a broad range of customers."
  
  "Open-source development efforts have existed on the Internet for as long
  as it has been around, and much of the software that makes the Internet work
  was developed that way," said Ken Coar, another member of the Apache Group.
  "It's very encouraging that IBM, a major player in the computer industry,
  is recognizing the power and value of the open-source model.  By supporting
  an open-source project rather than pursuing a proprietary and competitive
  effort, IBM is helping to assure that Internet software and standards will
  be the best they can be for everyone, and not just serve a single interest.
  This way, everyone benefits."
  
  "Apache's emphasis on developing software according to the latest Internet
  standards, and feeding that development experience back into the standards
  specification process of the Internet Engineering Taskforce (IETF), makes
  the Apache HTTP server an ideal platform for both non-profit and commercial
  products," said Roy Fielding, an Apache Group member and researcher at the
  University of California, Irvine.  "IBM's involvement in the Apache Group
  gives them access to both a robust implementation of current Web technology
  and a premier forum for the development of the future Web architecture.
  Researchers call this `technology transfer,' but in the commercial world
  it is just good business sense."
  
  "I am excited to see IBM join the large group of individuals and companies
  that develop and support open-source software," said Dean Gaudet,
  Apache Group member.  "I can't help but feel that we'll see more
  companies begin experimenting with the open development model.
  It is great to be a part of this."
  
  With this move, IBM becomes the latest in a series of commercial ventures
  to support the Apache HTTP server project, joining long-time current
  contributors C2Net Software (<http://www.c2.net/>), Covalent Technologies
  (<http://www.covalent.net/>), A. L. Digital (<http://www.aldigital.co.uk/>),
  and jaguNET Access Services (<http://www.jaguNET.com>).
  
  The Apache Group was founded in 1995 to address the need for a public,
  open-source, reference implementation of the HTTP protocol which is the
  foundation of the World Wide Web.  The software is developed through a
  collaborative process, involving 18 "core" developers and hundreds of
  auxiliary contributors.  More information on the Apache project can be
  found at <http://www.apache.org/>.
  
  The Netcraft Internet Web survey can be accessed online at
  <http://www.netcraft.com/Survey/>.
  
                                   ###
  
  
  
  1.1                  httpd-site/xdocs/stylesheets/apache-site.dtd
  
  Index: apache-site.dtd
  ===================================================================
  <!-- apache-site 1.0 DTD
  
       This XML DTD is intended for building simple websites using XHTML
       with additional structure and semantic tags (mostly from DocBook).
  
       Please use this formal public identifier to identify it:
  
           "-//Apache//DTD apache-site 1.0//EN"
  -->
  <!-- Derived from XHTML 1.1 DTD
  
       Portions of this DTD were obtained from XHTML, a reformulation of
       HTML as a modular XML application:
  
       The Extensible HyperText Markup Language (XHTML)
       Copyright 1998-2000 World Wide Web Consortium
          (Massachusetts Institute of Technology, Institut National de
           Recherche en Informatique et en Automatique, Keio University).
           All Rights Reserved.
  
       Permission to use, copy, modify and distribute the XHTML DTD and its 
       accompanying documentation for any purpose and without fee is hereby 
       granted in perpetuity, provided that the above copyright notice and 
       this paragraph appear in all copies.  The copyright holders make no 
       representation about the suitability of the DTD for any purpose.
  
       It is provided "as is" without expressed or implied warranty.
  
          Author:     Murray M. Altheim <altheim@eng.sun.com>
  -->
  
  <!ENTITY % XHTML.version  "-//W3C//DTD XHTML 1.1//EN" >
  
  <!-- reserved for future use with document profiles -->
  <!ENTITY % XHTML.profile  "" >
  
  <!-- Bidirectional Text features
       This feature-test entity is used to declare elements
       and attributes used for bidirectional text support.
  -->
  <!ENTITY % XHTML.bidi  "INCLUDE" >
  
  <?doc type="doctype" role="title" { apache-site 1.0 } ?>
  
  <!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
  
  <!-- Inline Style
  
       This module declares the 'style' attribute, used to support inline
       style markup. This module must be instantiated prior to the XHTML
       Common Attributes module in order to be included in %Core.attrib;.
  -->
  
  <!ENTITY % style.attrib
       "style        CDATA                    #IMPLIED"
  >
  
  <!ENTITY % Core.extra.attrib
       "%style.attrib;"
  >
  
  <!-- Modular Framework
  
       This required module instantiates the modules needed
       to support the XHTML modularization model, including:
  
          +  notations
          +  datatypes
          +  namespace-qualified names
          +  common attributes
          +  document model
          +  character entities
  
       The Intrinsic Events module is ignored by default but
       occurs in this module because it must be instantiated
       prior to Attributes but after Datatypes.
  -->
  
  <!-- Notations
  
       defines the following notations, many of these imported from
       other specifications and standards. When an existing FPI is
       known, it is incorporated here.
  -->
  
  <!-- XML Notations ..................................... -->
  <!-- SGML and XML Notations ............................ -->
  
  <!-- W3C XML 1.0 Recommendation -->
  <!NOTATION w3c-xml
       PUBLIC "ISO 8879//NOTATION Extensible Markup Language (XML) 1.0//EN" >
  
  <!-- XML 1.0 CDATA -->
  <!NOTATION cdata
       PUBLIC "-//W3C//NOTATION XML 1.0: CDATA//EN" >
  
  <!-- SGML Formal Public Identifiers -->
  <!NOTATION fpi
       PUBLIC "ISO 8879:1986//NOTATION Formal Public Identifier//EN" >
  
  <!-- XHTML Notations ................................... -->
  
  <!-- Length defined for cellpadding/cellspacing -->
  
  <!-- nn for pixels or nn% for percentage length -->
  <!NOTATION length
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Length//EN" >
  
  <!-- space-separated list of link types -->
  <!NOTATION linkTypes
      PUBLIC "-//W3C//NOTATION XHTML Datatype: LinkTypes//EN" >
  
  <!-- single or comma-separated list of media descriptors -->
  <!NOTATION mediaDesc
      PUBLIC "-//W3C//NOTATION XHTML Datatype: MediaDesc//EN" >
  
  <!-- pixel, percentage, or relative -->
  <!NOTATION multiLength
      PUBLIC "-//W3C//NOTATION XHTML Datatype: MultiLength//EN" >
  
  <!-- one or more digits (NUMBER) -->
  <!NOTATION number
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Number//EN" >
  
  <!-- integer representing length in pixels -->
  <!NOTATION pixels
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Pixels//EN" >
  
  <!-- script expression -->
  <!NOTATION script
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Script//EN" >
  
  <!-- textual content -->
  <!NOTATION text
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Text//EN" >
  
  <!-- Imported Notations ................................ -->
  
  <!-- a single character from [ISO10646] -->
  <!NOTATION character
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Character//EN" >
  
  <!-- a character encoding, as per [RFC2045] -->
  <!NOTATION charset
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Charset//EN" >
  
  <!-- a space separated list of character encodings, as per [RFC2045] -->
  <!NOTATION charsets
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Charsets//EN" >
  
  <!-- media type, as per [RFC2045] -->
  <!NOTATION contentType
      PUBLIC "-//W3C//NOTATION XHTML Datatype: ContentType//EN" >
  
  <!-- comma-separated list of media types, as per [RFC2045] -->
  <!NOTATION contentTypes
      PUBLIC "-//W3C//NOTATION XHTML Datatype: ContentTypes//EN" >
  
  <!-- date and time information. ISO date format -->
  <!NOTATION datetime
      PUBLIC "-//W3C//NOTATION XHTML Datatype: Datetime//EN" >
  
  <!-- a language code, as per [RFC3066] -->
  <!NOTATION languageCode
      PUBLIC "-//W3C//NOTATION XHTML Datatype: LanguageCode//EN" >
  
  <!-- a Uniform Resource Identifier, see [URI] -->
  <!NOTATION uri
      PUBLIC "-//W3C//NOTATION XHTML Datatype: URI//EN" >
  
  <!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
  <!NOTATION uris
      PUBLIC "-//W3C//NOTATION XHTML Datatype: URIs//EN" >
  
  <!-- Datatypes
  
       defines containers for the following datatypes, many of
       these imported from other specifications and standards.
  -->
  
  <!-- Length defined for cellpadding/cellspacing -->
  
  <!-- nn for pixels or nn% for percentage length -->
  <!ENTITY % Length.datatype "CDATA" >
  
  <!-- space-separated list of link types -->
  <!ENTITY % LinkTypes.datatype "NMTOKENS" >
  
  <!-- single or comma-separated list of media descriptors -->
  <!ENTITY % MediaDesc.datatype "CDATA" >
  
  <!-- pixel, percentage, or relative -->
  <!ENTITY % MultiLength.datatype "CDATA" >
  
  <!-- one or more digits (NUMBER) -->
  <!ENTITY % Number.datatype "CDATA" >
  
  <!-- integer representing length in pixels -->
  <!ENTITY % Pixels.datatype "CDATA" >
  
  <!-- script expression -->
  <!ENTITY % Script.datatype "CDATA" >
  
  <!-- textual content -->
  <!ENTITY % Text.datatype "CDATA" >
  
  <!-- Imported Datatypes ................................ -->
  
  <!-- a single character from [ISO10646] -->
  <!ENTITY % Character.datatype "CDATA" >
  
  <!-- a character encoding, as per [RFC2045] -->
  <!ENTITY % Charset.datatype "CDATA" >
  
  <!-- a space separated list of character encodings, as per [RFC2045] -->
  <!ENTITY % Charsets.datatype "CDATA" >
  
  <!-- media type, as per [RFC2045] -->
  <!ENTITY % ContentType.datatype "CDATA" >
  
  <!-- comma-separated list of media types, as per [RFC2045] -->
  <!ENTITY % ContentTypes.datatype "CDATA" >
  
  <!-- date and time information. ISO date format -->
  <!ENTITY % Datetime.datatype "CDATA" >
  
  <!-- formal public identifier, as per [ISO8879] -->
  <!ENTITY % FPI.datatype "CDATA" >
  
  <!-- a language code, as per [RFC3066] -->
  <!ENTITY % LanguageCode.datatype "NMTOKEN" >
  
  <!-- a Uniform Resource Identifier, see [URI] -->
  <!ENTITY % URI.datatype "CDATA" >
  
  <!-- a space-separated list of Uniform Resource Identifiers, see [URI] -->
  <!ENTITY % URIs.datatype "CDATA" >
  
  <!-- XHTML Qname (Qualified Name) Module
  
       This module is contained in two parts, labeled Section 'A' and 'B':
  
         Section A declares parameter entities to support namespace-
         qualified names, namespace declarations, and name prefixing
         for XHTML and extensions.
  
         Section B declares parameter entities used to provide
         namespace-qualified names for all XHTML element types:
  
           %applet.qname;   the xmlns-qualified name for <applet>
           %base.qname;     the xmlns-qualified name for <base>
           ...
  
       XHTML extensions would create a module similar to this one.
       Included in the XHTML distribution is a template module
       ('template-qname-1.mod') suitable for this purpose.
  -->
  
  <!ENTITY % XHTML.xmlns  "http://www.w3.org/1999/xhtml" >
  
  <!ENTITY % XHTML.xmlns.attrib
       "xmlns        %URI.datatype;           #FIXED '%XHTML.xmlns;'"
  >
  
  <!ENTITY % applet.qname      "applet" >
  <!ENTITY % base.qname        "base" >
  <!ENTITY % bdo.qname         "bdo" >
  <!ENTITY % address.qname     "address" >
  <!ENTITY % blockquote.qname  "blockquote" >
  <!ENTITY % pre.qname         "pre" >
  <!ENTITY % h1.qname          "h1" >
  <!ENTITY % h2.qname          "h2" >
  <!ENTITY % h3.qname          "h3" >
  <!ENTITY % h4.qname          "h4" >
  <!ENTITY % h5.qname          "h5" >
  <!ENTITY % h6.qname          "h6" >
  <!ENTITY % hr.qname          "hr" >
  <!ENTITY % div.qname         "div" >
  <!ENTITY % p.qname           "p" >
  <!ENTITY % ins.qname         "ins" >
  <!ENTITY % del.qname         "del" >
  <!ENTITY % form.qname        "form" >
  <!ENTITY % label.qname       "label" >
  <!ENTITY % input.qname       "input" >
  <!ENTITY % select.qname      "select" >
  <!ENTITY % optgroup.qname    "optgroup" >
  <!ENTITY % option.qname      "option" >
  <!ENTITY % textarea.qname    "textarea" >
  <!ENTITY % fieldset.qname    "fieldset" >
  <!ENTITY % legend.qname      "legend" >
  <!ENTITY % button.qname      "button" >
  <!ENTITY % a.qname           "a" >
  <!ENTITY % img.qname         "img" >
  <!ENTITY % abbr.qname        "abbr" >
  <!ENTITY % acronym.qname     "acronym" >
  <!ENTITY % cite.qname        "cite" >
  <!ENTITY % code.qname        "code" >
  <!ENTITY % dfn.qname         "dfn" >
  <!ENTITY % em.qname          "em" >
  <!ENTITY % kbd.qname         "kbd" >
  <!ENTITY % q.qname           "q" >
  <!ENTITY % samp.qname        "samp" >
  <!ENTITY % strong.qname      "strong" >
  <!ENTITY % var.qname         "var" >
  <!ENTITY % b.qname           "b" >
  <!ENTITY % big.qname         "big" >
  <!ENTITY % i.qname           "i" >
  <!ENTITY % small.qname       "small" >
  <!ENTITY % sub.qname         "sub" >
  <!ENTITY % sup.qname         "sup" >
  <!ENTITY % tt.qname          "tt" >
  <!ENTITY % br.qname          "br" >
  <!ENTITY % span.qname        "span" >
  <!ENTITY % map.qname         "map" >
  <!ENTITY % area.qname        "area" >
  <!ENTITY % link.qname        "link" >
  <!ENTITY % dl.qname          "dl" >
  <!ENTITY % dt.qname          "dt" >
  <!ENTITY % dd.qname          "dd" >
  <!ENTITY % ol.qname          "ol" >
  <!ENTITY % ul.qname          "ul" >
  <!ENTITY % li.qname          "li" >
  <!ENTITY % meta.qname        "meta" >
  <!ENTITY % param.qname       "param" >
  <!ENTITY % object.qname      "object" >
  <!ENTITY % script.qname      "script" >
  <!ENTITY % noscript.qname    "noscript" >
  <!ENTITY % html.qname        "html" >
  <!ENTITY % head.qname        "head" >
  <!ENTITY % title.qname       "title" >
  <!ENTITY % body.qname        "body" >
  <!ENTITY % style.qname       "style" >
  <!ENTITY % table.qname       "table" >
  <!ENTITY % caption.qname     "caption" >
  <!ENTITY % thead.qname       "thead" >
  <!ENTITY % tfoot.qname       "tfoot" >
  <!ENTITY % tbody.qname       "tbody" >
  <!ENTITY % colgroup.qname    "colgroup" >
  <!ENTITY % col.qname         "col" >
  <!ENTITY % tr.qname          "tr" >
  <!ENTITY % th.qname          "th" >
  <!ENTITY % td.qname          "td" >
  <!ENTITY % ruby.qname        "ruby" >
  <!ENTITY % rbc.qname         "rbc" >
  <!ENTITY % rtc.qname         "rtc" >
  <!ENTITY % rb.qname          "rb" >
  <!ENTITY % rt.qname          "rt" >
  <!ENTITY % rp.qname          "rp" >
  <!ENTITY % alt.qname         "alt" >
  
  <!-- Intrinsic Event Attributes
  
       These are the event attributes defined in HTML 4.0,
       Section 18.2.3 "Intrinsic Events". This module must be
       instantiated prior to the Attributes Module but after
       the Datatype Module in the Modular Framework module.
  -->
  
  <!ENTITY % Events.attrib
       "onclick      %Script.datatype;        #IMPLIED
        ondblclick   %Script.datatype;        #IMPLIED
        onmousedown  %Script.datatype;        #IMPLIED
        onmouseup    %Script.datatype;        #IMPLIED
        onmouseover  %Script.datatype;        #IMPLIED
        onmousemove  %Script.datatype;        #IMPLIED
        onmouseout   %Script.datatype;        #IMPLIED
        onkeypress   %Script.datatype;        #IMPLIED
        onkeydown    %Script.datatype;        #IMPLIED
        onkeyup      %Script.datatype;        #IMPLIED"
  >
  
  <!-- additional attributes on anchor element
  -->
  <!ATTLIST %a.qname;
       onfocus      %Script.datatype;         #IMPLIED
       onblur       %Script.datatype;         #IMPLIED
  >
  
  <!-- additional attributes on form element
  -->
  <!ATTLIST %form.qname;
        onsubmit     %Script.datatype;        #IMPLIED
        onreset      %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on label element
  -->
  <!ATTLIST %label.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on input element
  -->
  <!ATTLIST %input.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
        onselect     %Script.datatype;        #IMPLIED
        onchange     %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on select element
  -->
  <!ATTLIST %select.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
        onchange     %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on textarea element
  -->
  <!ATTLIST %textarea.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
        onselect     %Script.datatype;        #IMPLIED
        onchange     %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on button element
  -->
  <!ATTLIST %button.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on body element
  -->
  <!ATTLIST %body.qname;
        onload       %Script.datatype;        #IMPLIED
        onunload     %Script.datatype;        #IMPLIED
  >
  
  <!-- additional attributes on area element
  -->
  <!ATTLIST %area.qname;
        onfocus      %Script.datatype;        #IMPLIED
        onblur       %Script.datatype;        #IMPLIED
  >
  
  <!-- Common Attributes
  
       This module declares many of the common attributes for the XHTML DTD.
  -->
  
  <!ENTITY % id.attrib
       "id           ID                       #IMPLIED"
  >
  
  <!ENTITY % class.attrib
       "class        NMTOKENS                 #IMPLIED"
  >
  
  <!ENTITY % title.attrib
       "title        %Text.datatype;          #IMPLIED"
  >
  
  <!ENTITY % Core.extra.attrib "" >
  
  <!ENTITY % Core.attrib
       "%XHTML.xmlns.attrib;
        %id.attrib;
        %class.attrib;
        %title.attrib;
        %Core.extra.attrib;"
  >
  
  <!ENTITY % lang.attrib
       "xml:lang     %LanguageCode.datatype;  #IMPLIED"
  >
  
  <!ENTITY % dir.attrib
       "dir          ( ltr | rtl )            #IMPLIED"
  >
  
  <!ENTITY % I18n.attrib
       "%dir.attrib;
        %lang.attrib;"
  >
  
  <!ENTITY % Common.extra.attrib "" >
  
  <!-- intrinsic event attributes declared previously
  -->
  <!ENTITY % Events.attrib "" >
  
  <!ENTITY % Common.attrib
       "%Core.attrib;
        %I18n.attrib;
        %Events.attrib;
        %Common.extra.attrib;"
  >
  
  <!-- XHTML 1.1 Document Model
  
       This module describes the groupings of elements that make up
       common content models for XHTML elements.
  
       XHTML has three basic content models:
  
           %Inline.mix;  character-level elements
           %Block.mix;   block-like elements, eg., paragraphs and lists
           %Flow.mix;    any block or inline elements
  
       Any parameter entities declared in this module may be used
       to create element content models, but the above three are
       considered 'global' (insofar as that term applies here).
  
       The reserved word '#PCDATA' (indicating a text string) is now
       included explicitly with each element declaration that is
       declared as mixed content, as XML requires that this token
       occur first in a content model specification.
  -->
  <!-- Extending the Model
  
       While in some cases this module may need to be rewritten to
       accommodate changes to the document model, minor extensions
       may be accomplished by redeclaring any of the three *.extra;
       parameter entities to contain extension element types as follows:
  
           %Misc.extra;    whose parent may be any block or
                           inline element.
  
           %Inline.extra;  whose parent may be any inline element.
  
           %Block.extra;   whose parent may be any block element.
  
       If used, these parameter entities must be an OR-separated
       list beginning with an OR separator ("|"), eg., "| a | b | c"
  
       All block and inline *.class parameter entities not part
       of the *struct.class classes begin with "| " to allow for
       exclusion from mixes.
  -->
  
  <!-- ..............  Optional Elements in head  .................. -->
  
  <!ENTITY % HeadOpts.mix
       "( %script.qname; | %style.qname; | %meta.qname;
        | %link.qname; | %object.qname; )*"
  >
  
  <!-- .................  Miscellaneous Elements  .................. -->
  
  <!-- ins and del are used to denote editing changes
  -->
  <!ENTITY % Edit.class "| %ins.qname; | %del.qname;" >
  
  <!-- script and noscript are used to contain scripts
       and alternative content
  -->
  <!ENTITY % Script.class "| %script.qname; | %noscript.qname;" >
  
  <!ENTITY % Misc.extra "" >
  
  <!-- These elements are neither block nor inline, and can
       essentially be used anywhere in the document body.
  -->
  <!ENTITY % Misc.class
       "%Edit.class;
        %Script.class;
        %Misc.extra;"
  >
  
  <!-- ....................  Inline Elements  ...................... -->
  
  <!ENTITY % InlStruct.class "%br.qname; | %span.qname;" >
  
  <!ENTITY % InlPhras.class
       "| %em.qname; | %strong.qname; | %dfn.qname; | %code.qname;
        | %samp.qname; | %kbd.qname; | %var.qname; | %cite.qname;
        | %abbr.qname; | %acronym.qname; | %q.qname;" >
  
  <!ENTITY % InlPres.class
       "| %tt.qname; | %i.qname; | %b.qname; | %big.qname;
        | %small.qname; | %sub.qname; | %sup.qname;" >
  
  <!ENTITY % I18n.class "| %bdo.qname;" >
  
  <!ENTITY % Anchor.class "| %a.qname;" >
  
  <!ENTITY % InlSpecial.class
       "| %img.qname; | %map.qname;
        | %object.qname;" >
  
  <!ENTITY % InlForm.class
       "| %input.qname; | %select.qname; | %textarea.qname;
        | %label.qname; | %button.qname;" >
  
  <!ENTITY % Inline.extra "" >
  
  <!ENTITY % Ruby.class "| %ruby.qname;" >
  
  <!-- %Inline.class; includes all inline elements,
       used as a component in mixes
  -->
  <!ENTITY % Inline.class
       "%InlStruct.class;
        %InlPhras.class;
        %InlPres.class;
        %I18n.class;
        %Anchor.class;
        %InlSpecial.class;
        %InlForm.class;
        %Ruby.class;
        %Inline.extra;"
  >
  
  <!-- %InlNoRuby.class; includes all inline elements
       except ruby, used as a component in mixes
  -->
  <!ENTITY % InlNoRuby.class
       "%InlStruct.class;
        %InlPhras.class;
        %InlPres.class;
        %I18n.class;
        %Anchor.class;
        %InlSpecial.class;
        %InlForm.class;
        %Inline.extra;"
  >
  
  <!-- %NoRuby.content; includes all inlines except ruby
  -->
  <!ENTITY % NoRuby.content
       "( #PCDATA
        | %InlNoRuby.class;
        %Misc.class; )*"
  >
  
  <!-- %InlNoAnchor.class; includes all non-anchor inlines,
       used as a component in mixes
  -->
  <!ENTITY % InlNoAnchor.class
       "%InlStruct.class;
        %InlPhras.class;
        %InlPres.class;
        %I18n.class;
        %InlSpecial.class;
        %InlForm.class;
        %Ruby.class;
        %Inline.extra;"
  >
  
  <!-- %InlNoAnchor.mix; includes all non-anchor inlines
  -->
  <!ENTITY % InlNoAnchor.mix
       "%InlNoAnchor.class;
        %Misc.class;"
  >
  
  <!-- %Inline.mix; includes all inline elements, including %Misc.class;
  -->
  <!ENTITY % Inline.mix
       "%Inline.class;
        %Misc.class;"
  >
  
  <!-- .....................  Block Elements  ...................... -->
  
  <!-- In the HTML 4.0 DTD, heading and list elements were included
       in the %block; parameter entity. The %Heading.class; and
       %List.class; parameter entities must now be included explicitly
       on element declarations where desired.
  -->
  
  <!ENTITY % Heading.class
       "%h1.qname; | %h2.qname; | %h3.qname;
        | %h4.qname; | %h5.qname; | %h6.qname;" >
  
  <!ENTITY % List.class "%ul.qname; | %ol.qname; | %dl.qname;" >
  
  <!ENTITY % Table.class "| %table.qname;" >
  
  <!ENTITY % Form.class  "| %form.qname;" >
  
  <!ENTITY % Fieldset.class  "| %fieldset.qname;" >
  
  <!ENTITY % BlkStruct.class "%p.qname; | %div.qname;" >
  
  <!ENTITY % BlkPhras.class
       "| %pre.qname; | %blockquote.qname; | %address.qname;" >
  
  <!ENTITY % BlkPres.class "| %hr.qname;" >
  
  <!ENTITY % BlkSpecial.class
       "%Table.class;
        %Form.class;
        %Fieldset.class;"
  >
  
  <!ENTITY % Block.extra "" >
  
  <!-- %Block.class; includes all block elements,
       used as an component in mixes
  -->
  <!ENTITY % Block.class
       "%BlkStruct.class;
        %BlkPhras.class;
        %BlkPres.class;
        %BlkSpecial.class;
        %Block.extra;"
  >
  
  <!-- %Block.mix; includes all block elements plus %Misc.class;
  -->
  <!ENTITY % Block.mix
       "%Heading.class;
        | %List.class;
        | %Block.class;
        %Misc.class;"
  >
  
  <!-- ................  All Content Elements  .................. -->
  
  <!-- %Flow.mix; includes all text content, block and inline
  -->
  <!ENTITY % Flow.mix
       "%Heading.class;
        | %List.class;
        | %Block.class;
        | %Inline.class;
        %Misc.class;"
  >
  
  <!-- Character Entities for XHTML
  
       This module declares the set of character entities for XHTML,
       including the Latin 1, Symbol and Special character collections.
  -->
  
  <!ENTITY % xhtml-lat1
      PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
             "xhtml-lat1.ent" >
  <!-- Portions (C) International Organization for Standardization 1986
       Permission to copy in any form is granted for use with
       conforming SGML systems and applications as defined in
       ISO 8879, provided this notice is included in all copies.
  -->
  <!-- Character entity set. Typical invocation:
      <!ENTITY % HTMLlat1 PUBLIC
         "-//W3C//ENTITIES Latin 1 for XHTML//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
      %HTMLlat1;
  -->
  
  <!ENTITY nbsp   "&#160;"> <!-- no-break space = non-breaking space,
                                    U+00A0 ISOnum -->
  <!ENTITY iexcl  "&#161;"> <!-- inverted exclamation mark, U+00A1 ISOnum -->
  <!ENTITY cent   "&#162;"> <!-- cent sign, U+00A2 ISOnum -->
  <!ENTITY pound  "&#163;"> <!-- pound sign, U+00A3 ISOnum -->
  <!ENTITY curren "&#164;"> <!-- currency sign, U+00A4 ISOnum -->
  <!ENTITY yen    "&#165;"> <!-- yen sign = yuan sign, U+00A5 ISOnum -->
  <!ENTITY brvbar "&#166;"> <!-- broken bar = broken vertical bar,
                                    U+00A6 ISOnum -->
  <!ENTITY sect   "&#167;"> <!-- section sign, U+00A7 ISOnum -->
  <!ENTITY uml    "&#168;"> <!-- diaeresis = spacing diaeresis,
                                    U+00A8 ISOdia -->
  <!ENTITY copy   "&#169;"> <!-- copyright sign, U+00A9 ISOnum -->
  <!ENTITY ordf   "&#170;"> <!-- feminine ordinal indicator, U+00AA ISOnum -->
  <!ENTITY laquo  "&#171;"> <!-- left-pointing double angle quotation mark
                                    = left pointing guillemet, U+00AB ISOnum -->
  <!ENTITY not    "&#172;"> <!-- not sign = discretionary hyphen,
                                    U+00AC ISOnum -->
  <!ENTITY shy    "&#173;"> <!-- soft hyphen = discretionary hyphen,
                                    U+00AD ISOnum -->
  <!ENTITY reg    "&#174;"> <!-- registered sign = registered trade mark sign,
                                    U+00AE ISOnum -->
  <!ENTITY macr   "&#175;"> <!-- macron = spacing macron = overline
                                    = APL overbar, U+00AF ISOdia -->
  <!ENTITY deg    "&#176;"> <!-- degree sign, U+00B0 ISOnum -->
  <!ENTITY plusmn "&#177;"> <!-- plus-minus sign = plus-or-minus sign,
                                    U+00B1 ISOnum -->
  <!ENTITY sup2   "&#178;"> <!-- superscript two = superscript digit two
                                    = squared, U+00B2 ISOnum -->
  <!ENTITY sup3   "&#179;"> <!-- superscript three = superscript digit three
                                    = cubed, U+00B3 ISOnum -->
  <!ENTITY acute  "&#180;"> <!-- acute accent = spacing acute,
                                    U+00B4 ISOdia -->
  <!ENTITY micro  "&#181;"> <!-- micro sign, U+00B5 ISOnum -->
  <!ENTITY para   "&#182;"> <!-- pilcrow sign = paragraph sign,
                                    U+00B6 ISOnum -->
  <!ENTITY middot "&#183;"> <!-- middle dot = Georgian comma
                                    = Greek middle dot, U+00B7 ISOnum -->
  <!ENTITY cedil  "&#184;"> <!-- cedilla = spacing cedilla, U+00B8 ISOdia -->
  <!ENTITY sup1   "&#185;"> <!-- superscript one = superscript digit one,
                                    U+00B9 ISOnum -->
  <!ENTITY ordm   "&#186;"> <!-- masculine ordinal indicator,
                                    U+00BA ISOnum -->
  <!ENTITY raquo  "&#187;"> <!-- right-pointing double angle quotation mark
                                    = right pointing guillemet, U+00BB ISOnum -->
  <!ENTITY frac14 "&#188;"> <!-- vulgar fraction one quarter
                                    = fraction one quarter, U+00BC ISOnum -->
  <!ENTITY frac12 "&#189;"> <!-- vulgar fraction one half
                                    = fraction one half, U+00BD ISOnum -->
  <!ENTITY frac34 "&#190;"> <!-- vulgar fraction three quarters
                                    = fraction three quarters, U+00BE ISOnum -->
  <!ENTITY iquest "&#191;"> <!-- inverted question mark
                                    = turned question mark, U+00BF ISOnum -->
  <!ENTITY Agrave "&#192;"> <!-- latin capital letter A with grave
                                    = latin capital letter A grave,
                                    U+00C0 ISOlat1 -->
  <!ENTITY Aacute "&#193;"> <!-- latin capital letter A with acute,
                                    U+00C1 ISOlat1 -->
  <!ENTITY Acirc  "&#194;"> <!-- latin capital letter A with circumflex,
                                    U+00C2 ISOlat1 -->
  <!ENTITY Atilde "&#195;"> <!-- latin capital letter A with tilde,
                                    U+00C3 ISOlat1 -->
  <!ENTITY Auml   "&#196;"> <!-- latin capital letter A with diaeresis,
                                    U+00C4 ISOlat1 -->
  <!ENTITY Aring  "&#197;"> <!-- latin capital letter A with ring above
                                    = latin capital letter A ring,
                                    U+00C5 ISOlat1 -->
  <!ENTITY AElig  "&#198;"> <!-- latin capital letter AE
                                    = latin capital ligature AE,
                                    U+00C6 ISOlat1 -->
  <!ENTITY Ccedil "&#199;"> <!-- latin capital letter C with cedilla,
                                    U+00C7 ISOlat1 -->
  <!ENTITY Egrave "&#200;"> <!-- latin capital letter E with grave,
                                    U+00C8 ISOlat1 -->
  <!ENTITY Eacute "&#201;"> <!-- latin capital letter E with acute,
                                    U+00C9 ISOlat1 -->
  <!ENTITY Ecirc  "&#202;"> <!-- latin capital letter E with circumflex,
                                    U+00CA ISOlat1 -->
  <!ENTITY Euml   "&#203;"> <!-- latin capital letter E with diaeresis,
                                    U+00CB ISOlat1 -->
  <!ENTITY Igrave "&#204;"> <!-- latin capital letter I with grave,
                                    U+00CC ISOlat1 -->
  <!ENTITY Iacute "&#205;"> <!-- latin capital letter I with acute,
                                    U+00CD ISOlat1 -->
  <!ENTITY Icirc  "&#206;"> <!-- latin capital letter I with circumflex,
                                    U+00CE ISOlat1 -->
  <!ENTITY Iuml   "&#207;"> <!-- latin capital letter I with diaeresis,
                                    U+00CF ISOlat1 -->
  <!ENTITY ETH    "&#208;"> <!-- latin capital letter ETH, U+00D0 ISOlat1 -->
  <!ENTITY Ntilde "&#209;"> <!-- latin capital letter N with tilde,
                                    U+00D1 ISOlat1 -->
  <!ENTITY Ograve "&#210;"> <!-- latin capital letter O with grave,
                                    U+00D2 ISOlat1 -->
  <!ENTITY Oacute "&#211;"> <!-- latin capital letter O with acute,
                                    U+00D3 ISOlat1 -->
  <!ENTITY Ocirc  "&#212;"> <!-- latin capital letter O with circumflex,
                                    U+00D4 ISOlat1 -->
  <!ENTITY Otilde "&#213;"> <!-- latin capital letter O with tilde,
                                    U+00D5 ISOlat1 -->
  <!ENTITY Ouml   "&#214;"> <!-- latin capital letter O with diaeresis,
                                    U+00D6 ISOlat1 -->
  <!ENTITY times  "&#215;"> <!-- multiplication sign, U+00D7 ISOnum -->
  <!ENTITY Oslash "&#216;"> <!-- latin capital letter O with stroke
                                    = latin capital letter O slash,
                                    U+00D8 ISOlat1 -->
  <!ENTITY Ugrave "&#217;"> <!-- latin capital letter U with grave,
                                    U+00D9 ISOlat1 -->
  <!ENTITY Uacute "&#218;"> <!-- latin capital letter U with acute,
                                    U+00DA ISOlat1 -->
  <!ENTITY Ucirc  "&#219;"> <!-- latin capital letter U with circumflex,
                                    U+00DB ISOlat1 -->
  <!ENTITY Uuml   "&#220;"> <!-- latin capital letter U with diaeresis,
                                    U+00DC ISOlat1 -->
  <!ENTITY Yacute "&#221;"> <!-- latin capital letter Y with acute,
                                    U+00DD ISOlat1 -->
  <!ENTITY THORN  "&#222;"> <!-- latin capital letter THORN,
                                    U+00DE ISOlat1 -->
  <!ENTITY szlig  "&#223;"> <!-- latin small letter sharp s = ess-zed,
                                    U+00DF ISOlat1 -->
  <!ENTITY agrave "&#224;"> <!-- latin small letter a with grave
                                    = latin small letter a grave,
                                    U+00E0 ISOlat1 -->
  <!ENTITY aacute "&#225;"> <!-- latin small letter a with acute,
                                    U+00E1 ISOlat1 -->
  <!ENTITY acirc  "&#226;"> <!-- latin small letter a with circumflex,
                                    U+00E2 ISOlat1 -->
  <!ENTITY atilde "&#227;"> <!-- latin small letter a with tilde,
                                    U+00E3 ISOlat1 -->
  <!ENTITY auml   "&#228;"> <!-- latin small letter a with diaeresis,
                                    U+00E4 ISOlat1 -->
  <!ENTITY aring  "&#229;"> <!-- latin small letter a with ring above
                                    = latin small letter a ring,
                                    U+00E5 ISOlat1 -->
  <!ENTITY aelig  "&#230;"> <!-- latin small letter ae
                                    = latin small ligature ae, U+00E6 ISOlat1 -->
  <!ENTITY ccedil "&#231;"> <!-- latin small letter c with cedilla,
                                    U+00E7 ISOlat1 -->
  <!ENTITY egrave "&#232;"> <!-- latin small letter e with grave,
                                    U+00E8 ISOlat1 -->
  <!ENTITY eacute "&#233;"> <!-- latin small letter e with acute,
                                    U+00E9 ISOlat1 -->
  <!ENTITY ecirc  "&#234;"> <!-- latin small letter e with circumflex,
                                    U+00EA ISOlat1 -->
  <!ENTITY euml   "&#235;"> <!-- latin small letter e with diaeresis,
                                    U+00EB ISOlat1 -->
  <!ENTITY igrave "&#236;"> <!-- latin small letter i with grave,
                                    U+00EC ISOlat1 -->
  <!ENTITY iacute "&#237;"> <!-- latin small letter i with acute,
                                    U+00ED ISOlat1 -->
  <!ENTITY icirc  "&#238;"> <!-- latin small letter i with circumflex,
                                    U+00EE ISOlat1 -->
  <!ENTITY iuml   "&#239;"> <!-- latin small letter i with diaeresis,
                                    U+00EF ISOlat1 -->
  <!ENTITY eth    "&#240;"> <!-- latin small letter eth, U+00F0 ISOlat1 -->
  <!ENTITY ntilde "&#241;"> <!-- latin small letter n with tilde,
                                    U+00F1 ISOlat1 -->
  <!ENTITY ograve "&#242;"> <!-- latin small letter o with grave,
                                    U+00F2 ISOlat1 -->
  <!ENTITY oacute "&#243;"> <!-- latin small letter o with acute,
                                    U+00F3 ISOlat1 -->
  <!ENTITY ocirc  "&#244;"> <!-- latin small letter o with circumflex,
                                    U+00F4 ISOlat1 -->
  <!ENTITY otilde "&#245;"> <!-- latin small letter o with tilde,
                                    U+00F5 ISOlat1 -->
  <!ENTITY ouml   "&#246;"> <!-- latin small letter o with diaeresis,
                                    U+00F6 ISOlat1 -->
  <!ENTITY divide "&#247;"> <!-- division sign, U+00F7 ISOnum -->
  <!ENTITY oslash "&#248;"> <!-- latin small letter o with stroke,
                                    = latin small letter o slash,
                                    U+00F8 ISOlat1 -->
  <!ENTITY ugrave "&#249;"> <!-- latin small letter u with grave,
                                    U+00F9 ISOlat1 -->
  <!ENTITY uacute "&#250;"> <!-- latin small letter u with acute,
                                    U+00FA ISOlat1 -->
  <!ENTITY ucirc  "&#251;"> <!-- latin small letter u with circumflex,
                                    U+00FB ISOlat1 -->
  <!ENTITY uuml   "&#252;"> <!-- latin small letter u with diaeresis,
                                    U+00FC ISOlat1 -->
  <!ENTITY yacute "&#253;"> <!-- latin small letter y with acute,
                                    U+00FD ISOlat1 -->
  <!ENTITY thorn  "&#254;"> <!-- latin small letter thorn with,
                                    U+00FE ISOlat1 -->
  <!ENTITY yuml   "&#255;"> <!-- latin small letter y with diaeresis,
                                    U+00FF ISOlat1 -->
  
  
  <!ENTITY % xhtml-symbol
      PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
             "xhtml-symbol.ent" >
  <!-- Mathematical, Greek and Symbolic characters for HTML -->
  
  <!-- Character entity set. Typical invocation:
       <!ENTITY % HTMLsymbol PUBLIC
          "-//W3C//ENTITIES Symbols for XHTML//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">
       %HTMLsymbol;
  -->
  
  <!-- Portions (C) International Organization for Standardization 1986:
       Permission to copy in any form is granted for use with
       conforming SGML systems and applications as defined in
       ISO 8879, provided this notice is included in all copies.
  -->
  
  <!-- Relevant ISO entity set is given unless names are newly introduced.
       New names (i.e., not in ISO 8879 list) do not clash with any
       existing ISO 8879 entity names. ISO 10646 character numbers
       are given for each character, in hex. values are decimal
       conversions of the ISO 10646 values and refer to the document
       character set. Names are Unicode names. 
  -->
  
  <!-- Latin Extended-B -->
  <!ENTITY fnof     "&#402;"> <!-- latin small f with hook = function
                                      = florin, U+0192 ISOtech -->
  
  <!-- Greek -->
  <!ENTITY Alpha    "&#913;"> <!-- greek capital letter alpha, U+0391 -->
  <!ENTITY Beta     "&#914;"> <!-- greek capital letter beta, U+0392 -->
  <!ENTITY Gamma    "&#915;"> <!-- greek capital letter gamma,
                                      U+0393 ISOgrk3 -->
  <!ENTITY Delta    "&#916;"> <!-- greek capital letter delta,
                                      U+0394 ISOgrk3 -->
  <!ENTITY Epsilon  "&#917;"> <!-- greek capital letter epsilon, U+0395 -->
  <!ENTITY Zeta     "&#918;"> <!-- greek capital letter zeta, U+0396 -->
  <!ENTITY Eta      "&#919;"> <!-- greek capital letter eta, U+0397 -->
  <!ENTITY Theta    "&#920;"> <!-- greek capital letter theta,
                                      U+0398 ISOgrk3 -->
  <!ENTITY Iota     "&#921;"> <!-- greek capital letter iota, U+0399 -->
  <!ENTITY Kappa    "&#922;"> <!-- greek capital letter kappa, U+039A -->
  <!ENTITY Lambda   "&#923;"> <!-- greek capital letter lambda,
                                      U+039B ISOgrk3 -->
  <!ENTITY Mu       "&#924;"> <!-- greek capital letter mu, U+039C -->
  <!ENTITY Nu       "&#925;"> <!-- greek capital letter nu, U+039D -->
  <!ENTITY Xi       "&#926;"> <!-- greek capital letter xi, U+039E ISOgrk3 -->
  <!ENTITY Omicron  "&#927;"> <!-- greek capital letter omicron, U+039F -->
  <!ENTITY Pi       "&#928;"> <!-- greek capital letter pi, U+03A0 ISOgrk3 -->
  <!ENTITY Rho      "&#929;"> <!-- greek capital letter rho, U+03A1 -->
  <!-- there is no Sigmaf, and no U+03A2 character either -->
  <!ENTITY Sigma    "&#931;"> <!-- greek capital letter sigma,
                                      U+03A3 ISOgrk3 -->
  <!ENTITY Tau      "&#932;"> <!-- greek capital letter tau, U+03A4 -->
  <!ENTITY Upsilon  "&#933;"> <!-- greek capital letter upsilon,
                                      U+03A5 ISOgrk3 -->
  <!ENTITY Phi      "&#934;"> <!-- greek capital letter phi,
                                      U+03A6 ISOgrk3 -->
  <!ENTITY Chi      "&#935;"> <!-- greek capital letter chi, U+03A7 -->
  <!ENTITY Psi      "&#936;"> <!-- greek capital letter psi,
                                      U+03A8 ISOgrk3 -->
  <!ENTITY Omega    "&#937;"> <!-- greek capital letter omega,
                                      U+03A9 ISOgrk3 -->
  
  <!ENTITY alpha    "&#945;"> <!-- greek small letter alpha,
                                      U+03B1 ISOgrk3 -->
  <!ENTITY beta     "&#946;"> <!-- greek small letter beta, U+03B2 ISOgrk3 -->
  <!ENTITY gamma    "&#947;"> <!-- greek small letter gamma,
                                      U+03B3 ISOgrk3 -->
  <!ENTITY delta    "&#948;"> <!-- greek small letter delta,
                                      U+03B4 ISOgrk3 -->
  <!ENTITY epsilon  "&#949;"> <!-- greek small letter epsilon,
                                      U+03B5 ISOgrk3 -->
  <!ENTITY zeta     "&#950;"> <!-- greek small letter zeta, U+03B6 ISOgrk3 -->
  <!ENTITY eta      "&#951;"> <!-- greek small letter eta, U+03B7 ISOgrk3 -->
  <!ENTITY theta    "&#952;"> <!-- greek small letter theta,
                                      U+03B8 ISOgrk3 -->
  <!ENTITY iota     "&#953;"> <!-- greek small letter iota, U+03B9 ISOgrk3 -->
  <!ENTITY kappa    "&#954;"> <!-- greek small letter kappa,
                                      U+03BA ISOgrk3 -->
  <!ENTITY lambda   "&#955;"> <!-- greek small letter lambda,
                                      U+03BB ISOgrk3 -->
  <!ENTITY mu       "&#956;"> <!-- greek small letter mu, U+03BC ISOgrk3 -->
  <!ENTITY nu       "&#957;"> <!-- greek small letter nu, U+03BD ISOgrk3 -->
  <!ENTITY xi       "&#958;"> <!-- greek small letter xi, U+03BE ISOgrk3 -->
  <!ENTITY omicron  "&#959;"> <!-- greek small letter omicron, U+03BF NEW -->
  <!ENTITY pi       "&#960;"> <!-- greek small letter pi, U+03C0 ISOgrk3 -->
  <!ENTITY rho      "&#961;"> <!-- greek small letter rho, U+03C1 ISOgrk3 -->
  <!ENTITY sigmaf   "&#962;"> <!-- greek small letter final sigma,
                                      U+03C2 ISOgrk3 -->
  <!ENTITY sigma    "&#963;"> <!-- greek small letter sigma,
                                      U+03C3 ISOgrk3 -->
  <!ENTITY tau      "&#964;"> <!-- greek small letter tau, U+03C4 ISOgrk3 -->
  <!ENTITY upsilon  "&#965;"> <!-- greek small letter upsilon,
                                      U+03C5 ISOgrk3 -->
  <!ENTITY phi      "&#966;"> <!-- greek small letter phi, U+03C6 ISOgrk3 -->
  <!ENTITY chi      "&#967;"> <!-- greek small letter chi, U+03C7 ISOgrk3 -->
  <!ENTITY psi      "&#968;"> <!-- greek small letter psi, U+03C8 ISOgrk3 -->
  <!ENTITY omega    "&#969;"> <!-- greek small letter omega,
                                      U+03C9 ISOgrk3 -->
  <!ENTITY thetasym "&#977;"> <!-- greek small letter theta symbol,
                                      U+03D1 NEW -->
  <!ENTITY upsih    "&#978;"> <!-- greek upsilon with hook symbol,
                                      U+03D2 NEW -->
  <!ENTITY piv      "&#982;"> <!-- greek pi symbol, U+03D6 ISOgrk3 -->
  
  <!-- General Punctuation -->
  <!ENTITY bull     "&#8226;"> <!-- bullet = black small circle,
                                       U+2022 ISOpub  -->
  <!-- bullet is NOT the same as bullet operator, U+2219 -->
  <!ENTITY hellip   "&#8230;"> <!-- horizontal ellipsis = three dot leader,
                                       U+2026 ISOpub  -->
  <!ENTITY prime    "&#8242;"> <!-- prime = minutes = feet, U+2032 ISOtech -->
  <!ENTITY Prime    "&#8243;"> <!-- double prime = seconds = inches,
                                       U+2033 ISOtech -->
  <!ENTITY oline    "&#8254;"> <!-- overline = spacing overscore,
                                       U+203E NEW -->
  <!ENTITY frasl    "&#8260;"> <!-- fraction slash, U+2044 NEW -->
  
  <!-- Letterlike Symbols -->
  <!ENTITY weierp   "&#8472;"> <!-- script capital P = power set
                                       = Weierstrass p, U+2118 ISOamso -->
  <!ENTITY image    "&#8465;"> <!-- blackletter capital I = imaginary part,
                                       U+2111 ISOamso -->
  <!ENTITY real     "&#8476;"> <!-- blackletter capital R = real part symbol,
                                       U+211C ISOamso -->
  <!ENTITY trade    "&#8482;"> <!-- trade mark sign, U+2122 ISOnum -->
  <!ENTITY alefsym  "&#8501;"> <!-- alef symbol = first transfinite cardinal,
                                       U+2135 NEW -->
  <!-- alef symbol is NOT the same as hebrew letter alef,
       U+05D0 although the same glyph could be used to depict both characters -->
  
  <!-- Arrows -->
  <!ENTITY larr     "&#8592;"> <!-- leftwards arrow, U+2190 ISOnum -->
  <!ENTITY uarr     "&#8593;"> <!-- upwards arrow, U+2191 ISOnum-->
  <!ENTITY rarr     "&#8594;"> <!-- rightwards arrow, U+2192 ISOnum -->
  <!ENTITY darr     "&#8595;"> <!-- downwards arrow, U+2193 ISOnum -->
  <!ENTITY harr     "&#8596;"> <!-- left right arrow, U+2194 ISOamsa -->
  <!ENTITY crarr    "&#8629;"> <!-- downwards arrow with corner leftwards
                                       = carriage return, U+21B5 NEW -->
  <!ENTITY lArr     "&#8656;"> <!-- leftwards double arrow, U+21D0 ISOtech -->
  <!-- Unicode does not say that lArr is the same as the 'is implied by' arrow
      but also does not have any other character for that function. So ? lArr can
      be used for 'is implied by' as ISOtech suggests -->
  <!ENTITY uArr     "&#8657;"> <!-- upwards double arrow, U+21D1 ISOamsa -->
  <!ENTITY rArr     "&#8658;"> <!-- rightwards double arrow,
                                       U+21D2 ISOtech -->
  <!-- Unicode does not say this is the 'implies' character but does not have 
       another character with this function so ?
       rArr can be used for 'implies' as ISOtech suggests -->
  <!ENTITY dArr     "&#8659;"> <!-- downwards double arrow, U+21D3 ISOamsa -->
  <!ENTITY hArr     "&#8660;"> <!-- left right double arrow,
                                       U+21D4 ISOamsa -->
  
  <!-- Mathematical Operators -->
  <!ENTITY forall   "&#8704;"> <!-- for all, U+2200 ISOtech -->
  <!ENTITY part     "&#8706;"> <!-- partial differential, U+2202 ISOtech  -->
  <!ENTITY exist    "&#8707;"> <!-- there exists, U+2203 ISOtech -->
  <!ENTITY empty    "&#8709;"> <!-- empty set = null set = diameter,
                                       U+2205 ISOamso -->
  <!ENTITY nabla    "&#8711;"> <!-- nabla = backward difference,
                                       U+2207 ISOtech -->
  <!ENTITY isin     "&#8712;"> <!-- element of, U+2208 ISOtech -->
  <!ENTITY notin    "&#8713;"> <!-- not an element of, U+2209 ISOtech -->
  <!ENTITY ni       "&#8715;"> <!-- contains as member, U+220B ISOtech -->
  <!-- should there be a more memorable name than 'ni'? -->
  <!ENTITY prod     "&#8719;"> <!-- n-ary product = product sign,
                                       U+220F ISOamsb -->
  <!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
       the same glyph might be used for both -->
  <!ENTITY sum      "&#8721;"> <!-- n-ary sumation, U+2211 ISOamsb -->
  <!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
       though the same glyph might be used for both -->
  <!ENTITY minus    "&#8722;"> <!-- minus sign, U+2212 ISOtech -->
  <!ENTITY lowast   "&#8727;"> <!-- asterisk operator, U+2217 ISOtech -->
  <!ENTITY radic    "&#8730;"> <!-- square root = radical sign,
                                       U+221A ISOtech -->
  <!ENTITY prop     "&#8733;"> <!-- proportional to, U+221D ISOtech -->
  <!ENTITY infin    "&#8734;"> <!-- infinity, U+221E ISOtech -->
  <!ENTITY ang      "&#8736;"> <!-- angle, U+2220 ISOamso -->
  <!ENTITY and      "&#8743;"> <!-- logical and = wedge, U+2227 ISOtech -->
  <!ENTITY or       "&#8744;"> <!-- logical or = vee, U+2228 ISOtech -->
  <!ENTITY cap      "&#8745;"> <!-- intersection = cap, U+2229 ISOtech -->
  <!ENTITY cup      "&#8746;"> <!-- union = cup, U+222A ISOtech -->
  <!ENTITY int      "&#8747;"> <!-- integral, U+222B ISOtech -->
  <!ENTITY there4   "&#8756;"> <!-- therefore, U+2234 ISOtech -->
  <!ENTITY sim      "&#8764;"> <!-- tilde operator = varies with = similar to,
                                       U+223C ISOtech -->
  <!-- tilde operator is NOT the same character as the tilde, U+007E,
       although the same glyph might be used to represent both  -->
  <!ENTITY cong     "&#8773;"> <!-- approximately equal to, U+2245 ISOtech -->
  <!ENTITY asymp    "&#8776;"> <!-- almost equal to = asymptotic to,
                                       U+2248 ISOamsr -->
  <!ENTITY ne       "&#8800;"> <!-- not equal to, U+2260 ISOtech -->
  <!ENTITY equiv    "&#8801;"> <!-- identical to, U+2261 ISOtech -->
  <!ENTITY le       "&#8804;"> <!-- less-than or equal to, U+2264 ISOtech -->
  <!ENTITY ge       "&#8805;"> <!-- greater-than or equal to,
                                       U+2265 ISOtech -->
  <!ENTITY sub      "&#8834;"> <!-- subset of, U+2282 ISOtech -->
  <!ENTITY sup      "&#8835;"> <!-- superset of, U+2283 ISOtech -->
  <!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol 
       font encoding and is not included. Should it be, for symmetry?
       It is in ISOamsn  --> 
  <!ENTITY nsub     "&#8836;"> <!-- not a subset of, U+2284 ISOamsn -->
  <!ENTITY sube     "&#8838;"> <!-- subset of or equal to, U+2286 ISOtech -->
  <!ENTITY supe     "&#8839;"> <!-- superset of or equal to,
                                       U+2287 ISOtech -->
  <!ENTITY oplus    "&#8853;"> <!-- circled plus = direct sum,
                                       U+2295 ISOamsb -->
  <!ENTITY otimes   "&#8855;"> <!-- circled times = vector product,
                                       U+2297 ISOamsb -->
  <!ENTITY perp     "&#8869;"> <!-- up tack = orthogonal to = perpendicular,
                                       U+22A5 ISOtech -->
  <!ENTITY sdot     "&#8901;"> <!-- dot operator, U+22C5 ISOamsb -->
  <!-- dot operator is NOT the same character as U+00B7 middle dot -->
  
  <!-- Miscellaneous Technical -->
  <!ENTITY lceil    "&#8968;"> <!-- left ceiling = apl upstile,
                                       U+2308 ISOamsc  -->
  <!ENTITY rceil    "&#8969;"> <!-- right ceiling, U+2309 ISOamsc  -->
  <!ENTITY lfloor   "&#8970;"> <!-- left floor = apl downstile,
                                       U+230A ISOamsc  -->
  <!ENTITY rfloor   "&#8971;"> <!-- right floor, U+230B ISOamsc  -->
  <!ENTITY lang     "&#9001;"> <!-- left-pointing angle bracket = bra,
                                       U+2329 ISOtech -->
  <!-- lang is NOT the same character as U+003C 'less than' 
       or U+2039 'single left-pointing angle quotation mark' -->
  <!ENTITY rang     "&#9002;"> <!-- right-pointing angle bracket = ket,
                                       U+232A ISOtech -->
  <!-- rang is NOT the same character as U+003E 'greater than' 
       or U+203A 'single right-pointing angle quotation mark' -->
  
  <!-- Geometric Shapes -->
  <!ENTITY loz      "&#9674;"> <!-- lozenge, U+25CA ISOpub -->
  
  <!-- Miscellaneous Symbols -->
  <!ENTITY spades   "&#9824;"> <!-- black spade suit, U+2660 ISOpub -->
  <!-- black here seems to mean filled as opposed to hollow -->
  <!ENTITY clubs    "&#9827;"> <!-- black club suit = shamrock,
                                       U+2663 ISOpub -->
  <!ENTITY hearts   "&#9829;"> <!-- black heart suit = valentine,
                                       U+2665 ISOpub -->
  <!ENTITY diams    "&#9830;"> <!-- black diamond suit, U+2666 ISOpub -->
  
  
  <!ENTITY % xhtml-special
      PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
             "xhtml-special.ent" >
  <!-- Special characters for HTML -->
  
  <!-- Character entity set. Typical invocation:
       <!ENTITY % HTMLspecial PUBLIC
          "-//W3C//ENTITIES Special for XHTML//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">
       %HTMLspecial;
  -->
  
  <!-- Portions (C) International Organization for Standardization 1986:
       Permission to copy in any form is granted for use with
       conforming SGML systems and applications as defined in
       ISO 8879, provided this notice is included in all copies.
  -->
  
  <!-- Relevant ISO entity set is given unless names are newly introduced.
       New names (i.e., not in ISO 8879 list) do not clash with any
       existing ISO 8879 entity names. ISO 10646 character numbers
       are given for each character, in hex. values are decimal
       conversions of the ISO 10646 values and refer to the document
       character set. Names are Unicode names. 
  -->
  
  <!-- C0 Controls and Basic Latin -->
  <!ENTITY quot    "&#34;"> <!--  quotation mark = APL quote,
                                      U+0022 ISOnum -->
  <!ENTITY amp     "&#38;#38;"> <!--  ampersand, U+0026 ISOnum -->
  <!ENTITY lt      "&#38;#60;"> <!--  less-than sign, U+003C ISOnum -->
  <!ENTITY gt      "&#62;"> <!--  greater-than sign, U+003E ISOnum -->
  <!ENTITY apos	 "&#39;"> <!--  apostrophe mark, U+0027 ISOnum -->
  
  <!-- Latin Extended-A -->
  <!ENTITY OElig   "&#338;"> <!--  latin capital ligature OE,
                                      U+0152 ISOlat2 -->
  <!ENTITY oelig   "&#339;"> <!--  latin small ligature oe, U+0153 ISOlat2 -->
  <!-- ligature is a misnomer, this is a separate character in some languages -->
  <!ENTITY Scaron  "&#352;"> <!--  latin capital letter S with caron,
                                      U+0160 ISOlat2 -->
  <!ENTITY scaron  "&#353;"> <!--  latin small letter s with caron,
                                      U+0161 ISOlat2 -->
  <!ENTITY Yuml    "&#376;"> <!--  latin capital letter Y with diaeresis,
                                      U+0178 ISOlat2 -->
  
  <!-- Spacing Modifier Letters -->
  <!ENTITY circ    "&#710;"> <!--  modifier letter circumflex accent,
                                      U+02C6 ISOpub -->
  <!ENTITY tilde   "&#732;"> <!--  small tilde, U+02DC ISOdia -->
  
  <!-- General Punctuation -->
  <!ENTITY ensp    "&#8194;"> <!-- en space, U+2002 ISOpub -->
  <!ENTITY emsp    "&#8195;"> <!-- em space, U+2003 ISOpub -->
  <!ENTITY thinsp  "&#8201;"> <!-- thin space, U+2009 ISOpub -->
  <!ENTITY zwnj    "&#8204;"> <!-- zero width non-joiner,
                                      U+200C NEW RFC 2070 -->
  <!ENTITY zwj     "&#8205;"> <!-- zero width joiner, U+200D NEW RFC 2070 -->
  <!ENTITY lrm     "&#8206;"> <!-- left-to-right mark, U+200E NEW RFC 2070 -->
  <!ENTITY rlm     "&#8207;"> <!-- right-to-left mark, U+200F NEW RFC 2070 -->
  <!ENTITY ndash   "&#8211;"> <!-- en dash, U+2013 ISOpub -->
  <!ENTITY mdash   "&#8212;"> <!-- em dash, U+2014 ISOpub -->
  <!ENTITY lsquo   "&#8216;"> <!-- left single quotation mark,
                                      U+2018 ISOnum -->
  <!ENTITY rsquo   "&#8217;"> <!-- right single quotation mark,
                                      U+2019 ISOnum -->
  <!ENTITY sbquo   "&#8218;"> <!-- single low-9 quotation mark, U+201A NEW -->
  <!ENTITY ldquo   "&#8220;"> <!-- left double quotation mark,
                                      U+201C ISOnum -->
  <!ENTITY rdquo   "&#8221;"> <!-- right double quotation mark,
                                      U+201D ISOnum -->
  <!ENTITY bdquo   "&#8222;"> <!-- double low-9 quotation mark, U+201E NEW -->
  <!ENTITY dagger  "&#8224;"> <!-- dagger, U+2020 ISOpub -->
  <!ENTITY Dagger  "&#8225;"> <!-- double dagger, U+2021 ISOpub -->
  <!ENTITY permil  "&#8240;"> <!-- per mille sign, U+2030 ISOtech -->
  <!ENTITY lsaquo  "&#8249;"> <!-- single left-pointing angle quotation mark,
                                      U+2039 ISO proposed -->
  <!-- lsaquo is proposed but not yet ISO standardized -->
  <!ENTITY rsaquo  "&#8250;"> <!-- single right-pointing angle quotation mark,
                                      U+203A ISO proposed -->
  <!-- rsaquo is proposed but not yet ISO standardized -->
  <!ENTITY euro   "&#8364;"> <!--  euro sign, U+20AC NEW -->
  
  <!-- Textual Content
  
       The Text module includes declarations for all core
       text container elements and their attributes.
  -->
  
  <!-- Inline Structural
  
          br, span
  
       This module declares the elements and their attributes
       used to support inline-level structural markup.
  -->
  
  <!-- br: forced line break ............................. -->
  
  <!ENTITY % br.element  "INCLUDE" >
  <![%br.element;[
  
  <!ENTITY % br.content  "EMPTY" >
  <!ENTITY % br.qname  "br" >
  <!ELEMENT %br.qname;  %br.content; >
  
  <!-- end of br.element -->]]>
  
  <!ENTITY % br.attlist  "INCLUDE" >
  <![%br.attlist;[
  <!ATTLIST %br.qname;
        %Core.attrib;
  >
  <!-- end of br.attlist -->]]>
  
  <!-- span: generic inline container .................... -->
  
  <!ENTITY % span.element  "INCLUDE" >
  <![%span.element;[
  <!ENTITY % span.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % span.qname  "span" >
  <!ELEMENT %span.qname;  %span.content; >
  <!-- end of span.element -->]]>
  
  <!ENTITY % span.attlist  "INCLUDE" >
  <![%span.attlist;[
  <!ATTLIST %span.qname;
        %Common.attrib;
  >
  <!-- end of span.attlist -->]]>
  
  <!-- Inline Phrasal
  
          abbr, acronym, cite, code, dfn, em, kbd, q, samp, strong, var
  
       This module declares the elements and their attributes used to
       support inline-level phrasal markup.
  -->
  
  <!ENTITY % abbr.element  "INCLUDE" >
  <![%abbr.element;[
  <!ENTITY % abbr.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % abbr.qname  "abbr" >
  <!ELEMENT %abbr.qname;  %abbr.content; >
  <!-- end of abbr.element -->]]>
  
  <!ENTITY % abbr.attlist  "INCLUDE" >
  <![%abbr.attlist;[
  <!ATTLIST %abbr.qname;
        %Common.attrib;
  >
  <!-- end of abbr.attlist -->]]>
  
  <!ENTITY % acronym.element  "INCLUDE" >
  <![%acronym.element;[
  <!ENTITY % acronym.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % acronym.qname  "acronym" >
  <!ELEMENT %acronym.qname;  %acronym.content; >
  <!-- end of acronym.element -->]]>
  
  <!ENTITY % acronym.attlist  "INCLUDE" >
  <![%acronym.attlist;[
  <!ATTLIST %acronym.qname;
        %Common.attrib;
  >
  <!-- end of acronym.attlist -->]]>
  
  <!ENTITY % cite.element  "INCLUDE" >
  <![%cite.element;[
  <!ENTITY % cite.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % cite.qname  "cite" >
  <!ELEMENT %cite.qname;  %cite.content; >
  <!-- end of cite.element -->]]>
  
  <!ENTITY % cite.attlist  "INCLUDE" >
  <![%cite.attlist;[
  <!ATTLIST %cite.qname;
        %Common.attrib;
  >
  <!-- end of cite.attlist -->]]>
  
  <!ENTITY % code.element  "INCLUDE" >
  <![%code.element;[
  <!ENTITY % code.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % code.qname  "code" >
  <!ELEMENT %code.qname;  %code.content; >
  <!-- end of code.element -->]]>
  
  <!ENTITY % code.attlist  "INCLUDE" >
  <![%code.attlist;[
  <!ATTLIST %code.qname;
        %Common.attrib;
  >
  <!-- end of code.attlist -->]]>
  
  <!ENTITY % dfn.element  "INCLUDE" >
  <![%dfn.element;[
  <!ENTITY % dfn.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % dfn.qname  "dfn" >
  <!ELEMENT %dfn.qname;  %dfn.content; >
  <!-- end of dfn.element -->]]>
  
  <!ENTITY % dfn.attlist  "INCLUDE" >
  <![%dfn.attlist;[
  <!ATTLIST %dfn.qname;
        %Common.attrib;
  >
  <!-- end of dfn.attlist -->]]>
  
  <!ENTITY % em.element  "INCLUDE" >
  <![%em.element;[
  <!ENTITY % em.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % em.qname  "em" >
  <!ELEMENT %em.qname;  %em.content; >
  <!-- end of em.element -->]]>
  
  <!ENTITY % em.attlist  "INCLUDE" >
  <![%em.attlist;[
  <!ATTLIST %em.qname;
        %Common.attrib;
  >
  <!-- end of em.attlist -->]]>
  
  <!ENTITY % kbd.element  "INCLUDE" >
  <![%kbd.element;[
  <!ENTITY % kbd.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % kbd.qname  "kbd" >
  <!ELEMENT %kbd.qname;  %kbd.content; >
  <!-- end of kbd.element -->]]>
  
  <!ENTITY % kbd.attlist  "INCLUDE" >
  <![%kbd.attlist;[
  <!ATTLIST %kbd.qname;
        %Common.attrib;
  >
  <!-- end of kbd.attlist -->]]>
  
  <!ENTITY % q.element  "INCLUDE" >
  <![%q.element;[
  <!ENTITY % q.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % q.qname  "q" >
  <!ELEMENT %q.qname;  %q.content; >
  <!-- end of q.element -->]]>
  
  <!ENTITY % q.attlist  "INCLUDE" >
  <![%q.attlist;[
  <!ATTLIST %q.qname;
        %Common.attrib;
        cite         %URI.datatype;           #IMPLIED
  >
  <!-- end of q.attlist -->]]>
  
  <!ENTITY % samp.element  "INCLUDE" >
  <![%samp.element;[
  <!ENTITY % samp.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % samp.qname  "samp" >
  <!ELEMENT %samp.qname;  %samp.content; >
  <!-- end of samp.element -->]]>
  
  <!ENTITY % samp.attlist  "INCLUDE" >
  <![%samp.attlist;[
  <!ATTLIST %samp.qname;
        %Common.attrib;
  >
  <!-- end of samp.attlist -->]]>
  
  <!ENTITY % strong.element  "INCLUDE" >
  <![%strong.element;[
  <!ENTITY % strong.content
       "( #PCDATA | %Inline.mix; )*"
  >
  <!ENTITY % strong.qname  "strong" >
  <!ELEMENT %strong.qname;  %strong.content; >
  <!-- end of strong.element -->]]>
  
  <!ENTITY % strong.attlist  "INCLUDE" >
  <![%strong.attlist;[
  <!ATTLIST %strong.qname;
        %Common.attrib;
  >
  <!-- end of strong.attlist -->]]>
  
  <!ENTITY % var.element  "INCLUDE" >
  <![%var.element;[
  <!ENTITY % var.con