The httpd-2.1 Source Tree LAYOUT
--------------------------------

./ .................... Top-Level httpd-2.1 Root Directory

  ABOUT_APACHE .......... Overview of the Apache HTTP Server
  LAYOUT ................ This file describing the source tree
  README ................ Overview of this distribution
  STATUS ................ Current project activity and commentary

build/ ................ Supporting tools for buildconf/configure

  win32/ ................ Supporting tools for Win32 MSVC builds

docs/ ................. Documentation and Examples

  cgi-examples/ ......... 

  conf/ ................. 

  docroot/ .............. 

  error/ ................ 

    include/ .............. 

  icons/ ................ 

    small/ ................ 

  man/ .................. 

  manual/ ............... 

    developer/ ............ 

    faq/ .................. 

    howto/ ................ 

    images/ ............... 

    misc/ ................. 

    mod/ .................. 

    platform/ ............. 

    programs/ ............. 

    search/ ............... 

    ssl/ .................. 

    style/ ................ 

    vhosts/ ............... 

include/ ................ 

modules/ ................ Manditory and Add-In Apache stock modules

  aaa/ .................... 

  arch/ ................... 

    netware/ ................ 

    win32/ .................. 

  cache/ .................. 

  dav/ .................... 

    fs/ ..................... 

    main/ ................... 

  echo/ ................... 

  experimental/ ........... 

  filters/ ................ 

  generators/ ............. 

  http/ ................... HTTP: protocol module

  loggers/ ................ 

  mappers/ ................ 

  metadata/ ............... 

  pop3/ ...................

  private/ ................

  proxy/ ..................

  ssl/ .................... HTTPS: SSL v2/v3 and TLS v1 protocol module

    README .................. Overview of mod_ssl
    README.dsov.fig ......... Overview diagram of mod_ssl design
    README.dsov.ps .......... Overview diagram of mod_ssl design
    Makefile.in ............. Makefile template for Unix platform
    config.m4 ............... Autoconf stub for the Apache config mechanism
    mod_ssl.c ............... main source file containing API structures
    mod_ssl.h ............... common header file of mod_ssl
    ssl_engine_config.c ..... module configuration handling
    ssl_engine_dh.c ......... DSA/DH support
    ssl_engine_init.c ....... module initialization
    ssl_engine_io.c ......... I/O support
    ssl_engine_kernel.c ..... SSL engine kernel
    ssl_engine_log.c ........ logfile support
    ssl_engine_mutex.c ...... mutual exclusion support
    ssl_engine_pphrase.c .... pass-phrase handling
    ssl_engine_rand.c ....... PRNG support
    ssl_engine_vars.c ....... Variable Expansion support
    ssl_expr.c .............. expression handling main source
    ssl_expr.h .............. expression handling common header
    ssl_expr_scan.c ......... expression scanner automaton (pre-generated)
    ssl_expr_scan.l ......... expression scanner source
    ssl_expr_parse.c ........ expression parser automaton  (pre-generated)
    ssl_expr_parse.h ........ expression parser header     (pre-generated)
    ssl_expr_parse.y ........ expression parser source
    ssl_expr_eval.c ......... expression machine evaluation
    ssl_scache.c ............ session cache abstraction layer
    ssl_scache_dbm.c ........ session cache via DBM file
    ssl_scache_shmcb.c ...... session cache via shared memory cyclic buffer
    ssl_scache_dc.c ......... session cache offloading via 'distcache'
    ssl_util.c .............. utility functions
    ssl_util_ssl.c .......... the OpenSSL companion source
    ssl_util_ssl.h .......... the OpenSSL companion header
    ssl_util_table.c ........ the hash table library source
    ssl_util_table.h ........ the hash table library header

  test/ ................... not distributed with released source tarballs

os/ ..................... 

  beos/ ................... 

  bs2000/ ................. 

  netware/ ................ 

  os2/ .................... 

  tpf/ .................... 

    samples/ ................ 

  unix/ ................... 

  win32/ .................. 

server/ ................. 

  mpm/ .................... 

    beos/ ................... 

    experimental/ ........... 

      leader/ ................. 

      perchild/ ............... 

      threadpool/ ............. 

    mpmt_os2/ ............... 

    netware/ ................ 

    prefork/ ................ 

    winnt/ .................. 

    worker/ ................. 

srclib/ ................... Additional Libraries

  apr/ ...................... SEE srclib/apr/LAYOUT

  apr-util/ ................. SEE srclib/apr/LAYOUT

  pcre/ ..................... 

    doc/ ...................... 

    testdata/ ................. 

support/ ................ Sources for Support Binaries

  SHA1/ .................. Ancient SHA1 password conversion utilities

  win32/ ................. Win32-only Support Applications

test/ ................... not distributed with released source tarballs

