1*76404edcSAsim Jamshed #ifndef _PLUGIN_H_
2*76404edcSAsim Jamshed #define _PLUGIN_H_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include "base.h"
5*76404edcSAsim Jamshed #include "buffer.h"
6*76404edcSAsim Jamshed 
7*76404edcSAsim Jamshed #define SERVER_FUNC(x) \
8*76404edcSAsim Jamshed 		static handler_t x(server *srv, void *p_d)
9*76404edcSAsim Jamshed 
10*76404edcSAsim Jamshed #define CONNECTION_FUNC(x) \
11*76404edcSAsim Jamshed 		static handler_t x(server *srv, connection *con, void *p_d)
12*76404edcSAsim Jamshed 
13*76404edcSAsim Jamshed #define INIT_FUNC(x) \
14*76404edcSAsim Jamshed 		static void *x(void)
15*76404edcSAsim Jamshed 
16*76404edcSAsim Jamshed #define FREE_FUNC          SERVER_FUNC
17*76404edcSAsim Jamshed #define TRIGGER_FUNC       SERVER_FUNC
18*76404edcSAsim Jamshed #define SETDEFAULTS_FUNC   SERVER_FUNC
19*76404edcSAsim Jamshed #define SIGHUP_FUNC        SERVER_FUNC
20*76404edcSAsim Jamshed 
21*76404edcSAsim Jamshed #define SUBREQUEST_FUNC    CONNECTION_FUNC
22*76404edcSAsim Jamshed #define JOBLIST_FUNC       CONNECTION_FUNC
23*76404edcSAsim Jamshed #define PHYSICALPATH_FUNC  CONNECTION_FUNC
24*76404edcSAsim Jamshed #define REQUESTDONE_FUNC   CONNECTION_FUNC
25*76404edcSAsim Jamshed #define URIHANDLER_FUNC    CONNECTION_FUNC
26*76404edcSAsim Jamshed 
27*76404edcSAsim Jamshed #define PLUGIN_DATA        size_t id
28*76404edcSAsim Jamshed 
29*76404edcSAsim Jamshed typedef struct {
30*76404edcSAsim Jamshed 	size_t version;
31*76404edcSAsim Jamshed 
32*76404edcSAsim Jamshed 	buffer *name; /* name of the plugin */
33*76404edcSAsim Jamshed 
34*76404edcSAsim Jamshed 	void *(* init)                       ();
35*76404edcSAsim Jamshed 	handler_t (* set_defaults)           (server *srv, void *p_d);
36*76404edcSAsim Jamshed 	handler_t (* cleanup)                (server *srv, void *p_d);
37*76404edcSAsim Jamshed 	                                                                                   /* is called ... */
38*76404edcSAsim Jamshed 	handler_t (* handle_trigger)         (server *srv, void *p_d);                     /* once a second */
39*76404edcSAsim Jamshed 	handler_t (* handle_sighup)          (server *srv, void *p_d);                     /* at a signup */
40*76404edcSAsim Jamshed 
41*76404edcSAsim Jamshed 	handler_t (* handle_uri_raw)         (server *srv, connection *con, void *p_d);    /* after uri_raw is set */
42*76404edcSAsim Jamshed 	handler_t (* handle_uri_clean)       (server *srv, connection *con, void *p_d);    /* after uri is set */
43*76404edcSAsim Jamshed 	handler_t (* handle_docroot)         (server *srv, connection *con, void *p_d);    /* getting the document-root */
44*76404edcSAsim Jamshed 	handler_t (* handle_physical)        (server *srv, connection *con, void *p_d);    /* mapping url to physical path */
45*76404edcSAsim Jamshed 	handler_t (* handle_request_done)    (server *srv, connection *con, void *p_d);    /* at the end of a request */
46*76404edcSAsim Jamshed 	handler_t (* handle_connection_close)(server *srv, connection *con, void *p_d);    /* at the end of a connection */
47*76404edcSAsim Jamshed 	handler_t (* handle_joblist)         (server *srv, connection *con, void *p_d);    /* after all events are handled */
48*76404edcSAsim Jamshed 
49*76404edcSAsim Jamshed 
50*76404edcSAsim Jamshed 
51*76404edcSAsim Jamshed 	handler_t (* handle_subrequest_start)(server *srv, connection *con, void *p_d);
52*76404edcSAsim Jamshed 
53*76404edcSAsim Jamshed 	                                                                                   /* when a handler for the request
54*76404edcSAsim Jamshed 											    * has to be found
55*76404edcSAsim Jamshed 											    */
56*76404edcSAsim Jamshed 	handler_t (* handle_subrequest)      (server *srv, connection *con, void *p_d);    /* */
57*76404edcSAsim Jamshed 	handler_t (* connection_reset)       (server *srv, connection *con, void *p_d);    /* */
58*76404edcSAsim Jamshed 	void *data;
59*76404edcSAsim Jamshed 
60*76404edcSAsim Jamshed 	/* dlopen handle */
61*76404edcSAsim Jamshed 	void *lib;
62*76404edcSAsim Jamshed } plugin;
63*76404edcSAsim Jamshed 
64*76404edcSAsim Jamshed int plugins_load(server *srv);
65*76404edcSAsim Jamshed void plugins_free(server *srv);
66*76404edcSAsim Jamshed 
67*76404edcSAsim Jamshed handler_t plugins_call_handle_uri_raw(server *srv, connection *con);
68*76404edcSAsim Jamshed handler_t plugins_call_handle_uri_clean(server *srv, connection *con);
69*76404edcSAsim Jamshed handler_t plugins_call_handle_subrequest_start(server *srv, connection *con);
70*76404edcSAsim Jamshed handler_t plugins_call_handle_subrequest(server *srv, connection *con);
71*76404edcSAsim Jamshed handler_t plugins_call_handle_request_done(server *srv, connection *con);
72*76404edcSAsim Jamshed handler_t plugins_call_handle_docroot(server *srv, connection *con);
73*76404edcSAsim Jamshed handler_t plugins_call_handle_physical(server *srv, connection *con);
74*76404edcSAsim Jamshed handler_t plugins_call_handle_connection_close(server *srv, connection *con);
75*76404edcSAsim Jamshed handler_t plugins_call_handle_joblist(server *srv, connection *con);
76*76404edcSAsim Jamshed handler_t plugins_call_connection_reset(server *srv, connection *con);
77*76404edcSAsim Jamshed 
78*76404edcSAsim Jamshed handler_t plugins_call_handle_trigger(server *srv);
79*76404edcSAsim Jamshed handler_t plugins_call_handle_sighup(server *srv);
80*76404edcSAsim Jamshed 
81*76404edcSAsim Jamshed handler_t plugins_call_init(server *srv);
82*76404edcSAsim Jamshed handler_t plugins_call_set_defaults(server *srv);
83*76404edcSAsim Jamshed handler_t plugins_call_cleanup(server *srv);
84*76404edcSAsim Jamshed 
85*76404edcSAsim Jamshed int config_insert_values_global(server *srv, array *ca, const config_values_t *cv);
86*76404edcSAsim Jamshed int config_insert_values_internal(server *srv, array *ca, const config_values_t *cv);
87*76404edcSAsim Jamshed int config_setup_connection(server *srv, connection *con);
88*76404edcSAsim Jamshed int config_patch_connection(server *srv, connection *con, comp_key_t comp);
89*76404edcSAsim Jamshed int config_check_cond(server *srv, connection *con, data_config *dc);
90*76404edcSAsim Jamshed int config_append_cond_match_buffer(connection *con, data_config *dc, buffer *buf, int n);
91*76404edcSAsim Jamshed 
92*76404edcSAsim Jamshed #endif
93