README for Apache 2.0 Example Module
[April, 1997, updated May 2000]

The files in the src/modules/examples directory under the Apache
distribution directory tree are provided as an example to those that
wish to write modules that use the Apache API.

The main file is mod_example_hooks.c, which illustrates all the different
callback mechanisms and call syntaces.  By no means does an add-on
module need to include routines for all of the callbacks - quite the
contrary!

The example module is an actual working module.  If you link it into
your server, enable the "example-hooks-handler" handler for a location,
and then browse to that location, you will see a display of some of the
tracing the example module did as the various callbacks were made.

To include the example module in your server add --enable-example-hooks
to the other ./configure arguments executed from the httpd source tree.
After that run 'make'.

To add another module of your own:

    A. cp modules/examples/mod_example_hooks.c modules/examples/mod_myexample.c
    B. Modify the file
    C. Add an entry to modules/examples/config.m4, e.g.
         APACHE_MODULE(myexample, my new module, , , no)
       The last argument specifies if the module is built by-default
    D. Build the server with --enable-myexample

For windows, the process is slightly different;

    A. copy modules\examples\mod_example_hooks.c modules\examples\mod_myexample.c
    B. copy modules\examples\mod_example_hooks.dsp modules\examples\mod_myexample.dsp
    C. replace the occurances of 'example_hooks' with your module name.
    D. add the new .dsp to your Apache.dsw workspace, with dependencies
       on the libapr, libaprutil and libhttpd projects.  With the newer
       Developer Studio 2002 through 2005, when you add the new .dsp
       file it will be converted to a .vcproj file.

To activate the example module, include a block similar to the
following in your httpd.conf file:

    <Location /example-info>
	SetHandler example-hooks-handler
    </Location>

As an alternative, you can put the following into a .htaccess file and
then request the file "test.example" from that location:

    AddHandler example-hooks-handler .example

After reloading/restarting your server, you should be able to browse
to this location and see the brief display mentioned earlier.
