O'Reilly logo

Writing Apache Modules with Perl and C by Lincoln Stein, Doug MacEachern

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

10.2. Major Data Structures

Our Perl examples throughout the book have plugged into the Perl API via an object-oriented interface that blurs the distinction between data structures and function calls. For better or for worse, there is no such blurring in the C API. Data is maintained in data structures. To work with these structures, you either access their fields directly or pass them to function calls to do the work for you. In this section, we work our way through the four central data structures in the Apache C API: the module, the request_rec, the conn_rec, and the server_rec.

10.2.1. The module Record

Our Perl examples have plugged into the various phases of the request cycle via the various Perl*Handler directives. There are no such directives for C modules. Instead, all C modules contain a compiled data structure of type module. At runtime, all loaded modules are linked together via a linked list rooted at the Apache global top_module. Apache then consults each module table in turn to determine what phases of the transaction the module wishes to handle.

The module structure is usually defined at the bottom of the module's C source code file. Most module writers begin by cutting and pasting this definition from another source code file, filling in the slots that they need and NULLing out those that they don't want. In this tradition, let's revisit the mod_hello module introduced in Chapter 2 :

module MODULE_VAR_EXPORT hello_module = { STANDARD_MODULE_STUFF, NULL, /* ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required