xref: /lighttpd1.4/doc/outdated/plugins.txt (revision 960d34c7)
1*960d34c7SStefan Bühler================
2*960d34c7SStefan BühlerPlugin Interface
3*960d34c7SStefan Bühler================
4*960d34c7SStefan Bühler
5*960d34c7SStefan Bühler------------
6*960d34c7SStefan BühlerModule: core
7*960d34c7SStefan Bühler------------
8*960d34c7SStefan Bühler
9*960d34c7SStefan Bühler:Author: Jan Kneschke
10*960d34c7SStefan Bühler:Date: $Date: 2004/08/01 07:01:29 $
11*960d34c7SStefan Bühler:Revision: $Revision: 1.1 $
12*960d34c7SStefan Bühler
13*960d34c7SStefan Bühler:abstract:
14*960d34c7SStefan Bühler  The plugin interface is an integral part of lighttpd which
15*960d34c7SStefan Bühler  provides a flexible way to add specific functionality to lighttpd.
16*960d34c7SStefan Bühler
17*960d34c7SStefan Bühler.. meta::
18*960d34c7SStefan Bühler  :keywords: lighttpd, plugins
19*960d34c7SStefan Bühler
20*960d34c7SStefan Bühler.. contents:: Table of Contents
21*960d34c7SStefan Bühler
22*960d34c7SStefan BühlerDescription
23*960d34c7SStefan Bühler===========
24*960d34c7SStefan Bühler
25*960d34c7SStefan BühlerPlugins allow you to enhance the functionality of lighttpd without
26*960d34c7SStefan Bühlerchanging the core of the webserver. They can be loaded at startup time
27*960d34c7SStefan Bühlerand can change virtually any aspect of the behaviour of the webserver.
28*960d34c7SStefan Bühler
29*960d34c7SStefan BühlerPlugin Entry Points
30*960d34c7SStefan Bühler-------------------
31*960d34c7SStefan Bühler
32*960d34c7SStefan Bühlerlighttpd has 16 hooks which are used in different states of the
33*960d34c7SStefan Bühlerexecution of the request:
34*960d34c7SStefan Bühler
35*960d34c7SStefan BühlerServerwide hooks
36*960d34c7SStefan Bühler````````````````
37*960d34c7SStefan Bühler
38*960d34c7SStefan Bühler:init_:
39*960d34c7SStefan Bühler  called when the plugin is loaded
40*960d34c7SStefan Bühler:cleanup_:
41*960d34c7SStefan Bühler  called when the plugin is unloaded
42*960d34c7SStefan Bühler:set_defaults_:
43*960d34c7SStefan Bühler  called when the configuration has to be processed
44*960d34c7SStefan Bühler:handle_trigger_:
45*960d34c7SStefan Bühler  called once a second
46*960d34c7SStefan Bühler:handle_sighup_:
47*960d34c7SStefan Bühler  called when the server received a SIGHUP
48*960d34c7SStefan Bühler
49*960d34c7SStefan BühlerConnectionwide hooks
50*960d34c7SStefan Bühler````````````````````
51*960d34c7SStefan Bühler
52*960d34c7SStefan BühlerMost of these hooks are called in ``http_response_prepare()`` after some
53*960d34c7SStefan Bühlerfields in the connection structure are set.
54*960d34c7SStefan Bühler
55*960d34c7SStefan Bühler:handle_uri_raw_:
56*960d34c7SStefan Bühler  called after uri.path_raw, uri.authority and uri.scheme are set
57*960d34c7SStefan Bühler:handle_uri_clean_:
58*960d34c7SStefan Bühler  called after uri.path (a clean URI without .. and %20) is set
59*960d34c7SStefan Bühler:handle_docroot_:
60*960d34c7SStefan Bühler  called at the end of the logical path handle to get a docroot
61*960d34c7SStefan Bühler:handle_subrequest_start_:
62*960d34c7SStefan Bühler  called if the physical path is set up and checked
63*960d34c7SStefan Bühler:handle_subrequest_:
64*960d34c7SStefan Bühler  called at the end of ``http_response_prepare()``
65*960d34c7SStefan Bühler:handle_physical_path_:
66*960d34c7SStefan Bühler  called after the physical path is created and no other handler is
67*960d34c7SStefan Bühler  found for this request
68*960d34c7SStefan Bühler:handle_request_done_:
69*960d34c7SStefan Bühler  called when the request is done
70*960d34c7SStefan Bühler:handle_connection_close_:
71*960d34c7SStefan Bühler  called if the connection has to be closed
72*960d34c7SStefan Bühler:handle_joblist_:
73*960d34c7SStefan Bühler  called after the connection_state_engine is left again and plugin
74*960d34c7SStefan Bühler  internal handles have to be called
75*960d34c7SStefan Bühler:connection_reset_:
76*960d34c7SStefan Bühler  called if the connection structure has to be cleaned up
77*960d34c7SStefan Bühler
78*960d34c7SStefan Bühler
79*960d34c7SStefan BühlerPlugin Interface
80*960d34c7SStefan Bühler----------------
81*960d34c7SStefan Bühler
82*960d34c7SStefan Bühler\*_plugin_init
83*960d34c7SStefan Bühler``````````````
84*960d34c7SStefan Bühler
85*960d34c7SStefan BühlerEvery plugin has a uniquely-named function which is called after the
86*960d34c7SStefan Bühlerplugin is loaded. It is used to set up the ``plugin`` structure with
87*960d34c7SStefan Bühlersome useful data:
88*960d34c7SStefan Bühler
89*960d34c7SStefan Bühler- name of the plugin ``name``
90*960d34c7SStefan Bühler- all hooks
91*960d34c7SStefan Bühler
92*960d34c7SStefan BühlerThe field ``data`` and ``lib`` should not be touched in the init function.
93*960d34c7SStefan Bühler``lib`` is the library handler from dlopen and ``data`` will be the storage
94*960d34c7SStefan Bühlerof the internal plugin data.
95*960d34c7SStefan Bühler
96*960d34c7SStefan Bühler:returns:
97*960d34c7SStefan Bühler  0 (not handled)
98*960d34c7SStefan Bühler
99*960d34c7SStefan Bühlerinit
100*960d34c7SStefan Bühler````
101*960d34c7SStefan Bühler
102*960d34c7SStefan BühlerThe first real call of a plugin function is the init hook which is used
103*960d34c7SStefan Bühlerto set up the internal plugin data. The internal plugin is assigned the
104*960d34c7SStefan Bühler``data`` field mentioned in the \*_plugin_init description.
105*960d34c7SStefan Bühler
106*960d34c7SStefan Bühler:returns:
107*960d34c7SStefan Bühler  a pointer to the internal plugin data.
108*960d34c7SStefan Bühler
109*960d34c7SStefan Bühlercleanup
110*960d34c7SStefan Bühler```````
111*960d34c7SStefan Bühler
112*960d34c7SStefan BühlerThe cleanup hook is called just before the plugin is unloaded. It is meant
113*960d34c7SStefan Bühlerto free all buffers allocated in ``init`` or somewhere else in the plugin
114*960d34c7SStefan Bühlerwhich are still not freed and to close all handles which were opened and
115*960d34c7SStefan Bühlerare not closed yet.
116*960d34c7SStefan Bühler
117*960d34c7SStefan Bühler:returns:
118*960d34c7SStefan Bühler  HANDLER_GO_ON if ok (not handled)
119*960d34c7SStefan Bühler
120*960d34c7SStefan Bühlerset_defaults
121*960d34c7SStefan Bühler````````````
122*960d34c7SStefan Bühler
123*960d34c7SStefan Bühlerset_defaults is your entry point into the configfile parsing. It should
124*960d34c7SStefan Bühlerpass a list of options to ``config_insert_values`` and check if
125*960d34c7SStefan Bühlerthe plugin configuration is valid. If it is not valid yet, it should
126*960d34c7SStefan Bühlerset useful defaults or return with HANDLER_ERROR and an error message.
127*960d34c7SStefan Bühler
128*960d34c7SStefan Bühler:returns:
129*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
130*960d34c7SStefan Bühler
131*960d34c7SStefan Bühler  HANDLER_ERROR will terminate lighttpd
132*960d34c7SStefan Bühler
133*960d34c7SStefan Bühlerconnection_reset
134*960d34c7SStefan Bühler````````````````
135*960d34c7SStefan Bühler
136*960d34c7SStefan Bühlercalled at the end of each request
137*960d34c7SStefan Bühler
138*960d34c7SStefan Bühler:returns:
139*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
140*960d34c7SStefan Bühler
141*960d34c7SStefan Bühler  HANDLER_ERROR on error
142*960d34c7SStefan Bühler
143*960d34c7SStefan Bühlerhandle_trigger
144*960d34c7SStefan Bühler``````````````
145*960d34c7SStefan Bühler
146*960d34c7SStefan Bühlercalled once a second
147*960d34c7SStefan Bühler
148*960d34c7SStefan Bühler:returns:
149*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
150*960d34c7SStefan Bühler
151*960d34c7SStefan Bühler  HANDLER_ERROR on error
152*960d34c7SStefan Bühler
153*960d34c7SStefan Bühlerhandle_sighup
154*960d34c7SStefan Bühler`````````````
155*960d34c7SStefan Bühler
156*960d34c7SStefan Bühlercalled if a SIGHUP is received (cycling logfiles, ...)
157*960d34c7SStefan Bühler
158*960d34c7SStefan Bühler:returns:
159*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
160*960d34c7SStefan Bühler
161*960d34c7SStefan Bühler  HANDLER_ERROR on error
162*960d34c7SStefan Bühler
163*960d34c7SStefan Bühlerhandle_uri_raw
164*960d34c7SStefan Bühler``````````````
165*960d34c7SStefan Bühler
166*960d34c7SStefan Bühlercalled after uri_raw is set
167*960d34c7SStefan Bühler
168*960d34c7SStefan Bühler:returns:
169*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
170*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
171*960d34c7SStefan Bühler
172*960d34c7SStefan Bühler  HANDLER_ERROR on error
173*960d34c7SStefan Bühler
174*960d34c7SStefan Bühlerhandle_uri_clean
175*960d34c7SStefan Bühler````````````````
176*960d34c7SStefan Bühler
177*960d34c7SStefan Bühlercalled after uri.path is set
178*960d34c7SStefan Bühler
179*960d34c7SStefan Bühler:returns:
180*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
181*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
182*960d34c7SStefan Bühler
183*960d34c7SStefan Bühler  HANDLER_ERROR on error
184*960d34c7SStefan Bühler
185*960d34c7SStefan Bühlerhandle_docroot
186*960d34c7SStefan Bühler``````````````
187*960d34c7SStefan Bühler
188*960d34c7SStefan Bühlercalled when a docroot is needed
189*960d34c7SStefan Bühler
190*960d34c7SStefan Bühler:returns:
191*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
192*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
193*960d34c7SStefan Bühler
194*960d34c7SStefan Bühler  HANDLER_ERROR on error
195*960d34c7SStefan Bühler
196*960d34c7SStefan Bühlerhandle_subrequest_start
197*960d34c7SStefan Bühler```````````````````````
198*960d34c7SStefan Bühler
199*960d34c7SStefan Bühlercalled after physical.path is set
200*960d34c7SStefan Bühler
201*960d34c7SStefan Bühler:returns:
202*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
203*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
204*960d34c7SStefan Bühler
205*960d34c7SStefan Bühler  HANDLER_ERROR on error
206*960d34c7SStefan Bühler
207*960d34c7SStefan Bühlerhandle_subrequest
208*960d34c7SStefan Bühler`````````````````
209*960d34c7SStefan Bühler
210*960d34c7SStefan Bühlercalled if subrequest_start requested a COMEBACK or a WAIT_FOR_EVENT
211*960d34c7SStefan Bühler
212*960d34c7SStefan Bühler:returns:
213*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
214*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
215*960d34c7SStefan Bühler
216*960d34c7SStefan Bühler  HANDLER_ERROR on error
217*960d34c7SStefan Bühler
218*960d34c7SStefan Bühlerhandle_physical_path
219*960d34c7SStefan Bühler````````````````````
220*960d34c7SStefan Bühler
221*960d34c7SStefan Bühlercalled after physical.path is set
222*960d34c7SStefan Bühler
223*960d34c7SStefan Bühler:returns:
224*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
225*960d34c7SStefan Bühler  HANDLER_FINISHED if the final output is prepared
226*960d34c7SStefan Bühler
227*960d34c7SStefan Bühler  HANDLER_ERROR on error
228*960d34c7SStefan Bühler
229*960d34c7SStefan Bühler
230*960d34c7SStefan Bühlerhandle_request_done
231*960d34c7SStefan Bühler```````````````````
232*960d34c7SStefan Bühler
233*960d34c7SStefan Bühlercalled at the end of the request (logging, statistics, ...)
234*960d34c7SStefan Bühler
235*960d34c7SStefan Bühler:returns:
236*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
237*960d34c7SStefan Bühler
238*960d34c7SStefan Bühler  HANDLER_ERROR on error
239*960d34c7SStefan Bühler
240*960d34c7SStefan Bühlerhandle_connection_close
241*960d34c7SStefan Bühler```````````````````````
242*960d34c7SStefan Bühler
243*960d34c7SStefan Bühlercalled if the connection is terminated
244*960d34c7SStefan Bühler
245*960d34c7SStefan Bühler:returns:
246*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
247*960d34c7SStefan Bühler
248*960d34c7SStefan Bühler  HANDLER_ERROR on error
249*960d34c7SStefan Bühler
250*960d34c7SStefan Bühlerhandle_joblist
251*960d34c7SStefan Bühler``````````````
252*960d34c7SStefan Bühler
253*960d34c7SStefan Bühlercalled if the state of the connection has changed
254*960d34c7SStefan Bühler
255*960d34c7SStefan Bühler:returns:
256*960d34c7SStefan Bühler  HANDLER_GO_ON if ok
257*960d34c7SStefan Bühler
258*960d34c7SStefan Bühler  HANDLER_ERROR on error
259*960d34c7SStefan Bühler
260*960d34c7SStefan Bühler
261