123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- ================
- Plugin Interface
- ================
- ------------
- Module: core
- ------------
- :Author: Jan Kneschke
- :Date: $Date: 2004/08/01 07:01:29 $
- :Revision: $Revision: 1.1 $
- :abstract:
- The plugin interface is an integral part of lighttpd which
- provides a flexible way to add specific functionality to lighttpd.
- .. meta::
- :keywords: lighttpd, plugins
- .. contents:: Table of Contents
- Description
- ===========
- Plugins allow you to enhance the functionality of lighttpd without
- changing the core of the webserver. They can be loaded at startup time
- and can change virtually 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 called in ``http_response_prepare()`` after some
- fields 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 set up 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 set up the ``plugin`` structure with
- some useful 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 useful defaults or return with HANDLER_ERROR and an error message.
- :returns:
- HANDLER_GO_ON if ok
- HANDLER_ERROR will terminate 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
|