================ Plugin Interface ================ ------------ Module: core ------------ :Author: Jan Kneschke :Date: $Date: 2004/08/01 07:01:29 $ :Revision: $Revision: 1.1 $ :abstract: The plugin interface is the integral part of lighttpd provide a flexible way to add specific functionality to lighttpd. .. meta:: :keywords: lighttpd, plugins .. contents:: Table of Contents Description =========== Plugins allow you to enhance to functionality of lighttpd without changing the core of the webserver. They can be loaded at startup-time and can change hardly any aspect of the behaviour of the webserver. Plugin Entry Points ------------------- lighttpd has 16 hooks which are used in different states of the execution of the request: Serverwide hooks ```````````````` :init_: called when the plugin is loaded :cleanup_: called when the plugin is unloaded :set_defaults_: called when the configuration has to be processed :handle_trigger_: called once a second :handle_sighup_: called when the server received a SIGHUP Connectionwide hooks ```````````````````` Most of these hooks are call in ``http_response_prepare()`` after some field in the connection structure are set. :handle_uri_raw_: called after uri.path_raw, uri.authority and uri.scheme are set :handle_uri_clean_: called after uri.path (a clean uri without .. and %20) is set :handle_docroot_: called at the end of the logical path handle to get a docroot :handle_subrequest_start_: called if the physical path is setup and checked :handle_subrequest_: called at the end of ``http_response_prepare()`` :handle_physical_path_: called after the physical path is created and no other handler is found for this request :handle_request_done_: called when the request is done :handle_connection_close_: called if the connection has to be closed :handle_joblist_: called after the connection_state_engine is left again and plugin internal handles have to be called :connection_reset_: called if the connection structure has to be cleaned up Plugin Interface ---------------- \*_plugin_init `````````````` Every plugin has a uniquely named function which is called after the plugin is loaded. It is used to setup the ``plugin`` structure with some usefull data: - name of the plugin ``name`` - all hooks The field ``data`` and ``lib`` should not be touched in the init function. ``lib`` is the library handler from dlopen and ``data`` will be the storage of the internal plugin data. :returns: 0 (not handled) init ```` The first real call of a plugin function is the init-hook which is used to set up the internal plugin data. The internal plugin is assigned the ``data`` field mentioned in the \*_plugin_init description. :returns: a pointer to the internal plugin data. cleanup ``````` The cleanup hook is called just before the plugin is unloaded. It is meant to free all buffers allocated in ``init`` or somewhere else in the plugin which are still not freed and to close all handles which were opened and are not closed yet. :returns: HANDLER_GO_ON if ok (not handled) set_defaults ```````````` set_defaults is your entry point into the configfile parsing. It should pass a list of options to ``config_insert_values`` and check if the plugin configuration is valid. If it is not valid yet, it should set usefull defaults or return with HANDLER_ERROR and an error message. :returns: HANDLER_GO_ON if ok HANDLER_ERROR will terminated lighttpd connection_reset ```````````````` called at the end of each request :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error handle_trigger `````````````` called once a second :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error handle_sighup ````````````` called if a SIGHUP is received (cycling logfiles, ...) :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error handle_uri_raw `````````````` called after uri_raw is set :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_uri_clean ```````````````` called after uri.path is set :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_docroot `````````````` called when a docroot is needed :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_subrequest_start ``````````````````````` called after physical.path is set :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_subrequest ````````````````` called if subrequest_start requested a COMEBACK or a WAIT_FOR_EVENT :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_physical_path ```````````````````` called after physical.path is set :returns: HANDLER_GO_ON if ok HANDLER_FINISHED if the final output is prepared HANDLER_ERROR on error handle_request_done ``````````````````` called at the end of the request (logging, statistics, ...) :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error handle_connection_close ``````````````````````` called if the connection is terminated :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error handle_joblist `````````````` called if the state of the connection has changed :returns: HANDLER_GO_ON if ok HANDLER_ERROR on error