summaryrefslogtreecommitdiff
path: root/src/plugin.c
diff options
context:
space:
mode:
authorKrzysztof Krzyżaniak <eloy@debian.org>2006-10-09 09:32:13 +0000
committerKrzysztof Krzyżaniak <eloy@debian.org>2006-10-09 09:32:13 +0000
commite4c4e8f27b87db4084df3a3ee4f69f11f1b421af (patch)
tree0b98fbd030b6861640091b40838502371710d8b2 /src/plugin.c
parentb01d8392f0f4dde45edf65a5dd25e62abbe831b0 (diff)
downloadlighttpd-e4c4e8f27b87db4084df3a3ee4f69f11f1b421af.tar.gz
eloy: new upstream version
Diffstat (limited to 'src/plugin.c')
-rw-r--r--src/plugin.c142
1 files changed, 71 insertions, 71 deletions
diff --git a/src/plugin.c b/src/plugin.c
index e74d8b0..3e8147b 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -17,23 +17,23 @@
#include <dlfcn.h>
#endif
/*
- *
+ *
* if you change this enum to add a new callback, be sure
* - that PLUGIN_FUNC_SIZEOF is the last entry
* - that you add PLUGIN_TO_SLOT twice:
- * 1. as callback-dispatcher
+ * 1. as callback-dispatcher
* 2. in plugins_call_init()
- *
+ *
*/
typedef struct {
PLUGIN_DATA;
} plugin_data;
-typedef enum {
+typedef enum {
PLUGIN_FUNC_UNSET,
- PLUGIN_FUNC_HANDLE_URI_CLEAN,
- PLUGIN_FUNC_HANDLE_URI_RAW,
+ PLUGIN_FUNC_HANDLE_URI_CLEAN,
+ PLUGIN_FUNC_HANDLE_URI_RAW,
PLUGIN_FUNC_HANDLE_REQUEST_DONE,
PLUGIN_FUNC_HANDLE_CONNECTION_CLOSE,
PLUGIN_FUNC_HANDLE_TRIGGER,
@@ -44,18 +44,18 @@ typedef enum {
PLUGIN_FUNC_HANDLE_DOCROOT,
PLUGIN_FUNC_HANDLE_PHYSICAL,
PLUGIN_FUNC_CONNECTION_RESET,
- PLUGIN_FUNC_INIT,
+ PLUGIN_FUNC_INIT,
PLUGIN_FUNC_CLEANUP,
PLUGIN_FUNC_SET_DEFAULTS,
-
+
PLUGIN_FUNC_SIZEOF
} plugin_t;
static plugin *plugin_init(void) {
plugin *p;
-
+
p = calloc(1, sizeof(*p));
-
+
return p;
}
@@ -67,7 +67,7 @@ static void plugin_free(plugin *p) {
#endif
#ifndef LIGHTTPD_STATIC
- if (use_dlclose && p->lib) {
+ if (use_dlclose && p->lib) {
#ifdef __WIN32
FreeLibrary(p->lib);
#else
@@ -75,7 +75,7 @@ static void plugin_free(plugin *p) {
#endif
}
#endif
-
+
free(p);
}
@@ -89,17 +89,17 @@ static int plugins_register(server *srv, plugin *p) {
srv->plugins.size += 4;
srv->plugins.ptr = realloc(srv->plugins.ptr, srv->plugins.size * sizeof(*ps));
}
-
+
ps = srv->plugins.ptr;
ps[srv->plugins.used++] = p;
-
+
return 0;
}
/**
- *
- *
- *
+ *
+ *
+ *
*/
#ifdef LIGHTTPD_STATIC
@@ -124,11 +124,11 @@ int plugins_load(server *srv) {
int (*init)(plugin *pl);
const char *error;
size_t i;
-
+
for (i = 0; i < srv->srvconf.modules->used; i++) {
data_string *d = (data_string *)srv->srvconf.modules->data[i];
char *modules = d->value->ptr;
-
+
buffer_copy_string_buffer(srv->tmp_buf, srv->srvconf.modules_dir);
buffer_append_string(srv->tmp_buf, "/");
@@ -138,13 +138,13 @@ int plugins_load(server *srv) {
#else
buffer_append_string(srv->tmp_buf, ".so");
#endif
-
+
p = plugin_init();
#ifdef __WIN32
if (NULL == (p->lib = LoadLibrary(srv->tmp_buf->ptr))) {
LPVOID lpMsgBuf;
FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
@@ -152,24 +152,24 @@ int plugins_load(server *srv) {
(LPTSTR) &lpMsgBuf,
0, NULL );
- log_error_write(srv, __FILE__, __LINE__, "ssb", "LoadLibrary() failed",
+ log_error_write(srv, __FILE__, __LINE__, "ssb", "LoadLibrary() failed",
lpMsgBuf, srv->tmp_buf);
-
+
plugin_free(p);
-
+
return -1;
}
-#else
+#else
if (NULL == (p->lib = dlopen(srv->tmp_buf->ptr, RTLD_LAZY))) {
- log_error_write(srv, __FILE__, __LINE__, "sbs", "dlopen() failed for:",
+ log_error_write(srv, __FILE__, __LINE__, "sbs", "dlopen() failed for:",
srv->tmp_buf, dlerror());
-
+
plugin_free(p);
-
+
return -1;
}
-
+
#endif
buffer_reset(srv->tmp_buf);
buffer_copy_string(srv->tmp_buf, modules);
@@ -181,7 +181,7 @@ int plugins_load(server *srv) {
if (init == NULL) {
LPVOID lpMsgBuf;
FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
@@ -190,7 +190,7 @@ int plugins_load(server *srv) {
0, NULL );
log_error_write(srv, __FILE__, __LINE__, "sbs", "getprocaddress failed:", srv->tmp_buf, lpMsgBuf);
-
+
plugin_free(p);
return -1;
}
@@ -203,15 +203,15 @@ int plugins_load(server *srv) {
#endif
if ((error = dlerror()) != NULL) {
log_error_write(srv, __FILE__, __LINE__, "s", error);
-
+
plugin_free(p);
return -1;
}
-
+
#endif
if ((*init)(p)) {
log_error_write(srv, __FILE__, __LINE__, "ss", modules, "plugin init failed" );
-
+
plugin_free(p);
return -1;
}
@@ -220,7 +220,7 @@ int plugins_load(server *srv) {
#endif
plugins_register(srv, p);
}
-
+
return 0;
}
#endif
@@ -253,8 +253,8 @@ int plugins_load(server *srv) {
}
/**
- * plugins that use
- *
+ * plugins that use
+ *
* - server *srv
* - connection *con
* - void *p_d (plugin_data *)
@@ -301,12 +301,12 @@ PLUGIN_TO_SLOT(PLUGIN_FUNC_CONNECTION_RESET, connection_reset)
}
/**
- * plugins that use
- *
+ * plugins that use
+ *
* - server *srv
* - void *p_d (plugin_data *)
*/
-
+
PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_TRIGGER, handle_trigger)
PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SIGHUP, handle_sighup)
PLUGIN_TO_SLOT(PLUGIN_FUNC_CLEANUP, cleanup)
@@ -314,18 +314,18 @@ PLUGIN_TO_SLOT(PLUGIN_FUNC_SET_DEFAULTS, set_defaults)
#undef PLUGIN_TO_SLOT
-#if 0
+#if 0
/**
- *
+ *
* special handler
- *
+ *
*/
handler_t plugins_call_handle_fdevent(server *srv, const fd_conn *fdc) {
size_t i;
plugin **ps;
-
+
ps = srv->plugins.ptr;
-
+
for (i = 0; i < srv->plugins.used; i++) {
plugin *p = ps[i];
if (p->handle_fdevent) {
@@ -344,34 +344,34 @@ handler_t plugins_call_handle_fdevent(server *srv, const fd_conn *fdc) {
}
}
}
-
+
return HANDLER_GO_ON;
}
#endif
/**
- *
+ *
* - call init function of all plugins to init the plugin-internals
* - added each plugin that supports has callback to the corresponding slot
- *
+ *
* - is only called once.
*/
handler_t plugins_call_init(server *srv) {
size_t i;
plugin **ps;
-
+
ps = srv->plugins.ptr;
-
+
/* fill slots */
-
+
srv->plugin_slots = calloc(PLUGIN_FUNC_SIZEOF, sizeof(ps));
-
+
for (i = 0; i < srv->plugins.used; i++) {
size_t j;
/* check which calls are supported */
-
+
plugin *p = ps[i];
-
+
#define PLUGIN_TO_SLOT(x, y) \
if (p->y) { \
plugin **slot = ((plugin ***)(srv->plugin_slots))[x]; \
@@ -384,11 +384,11 @@ handler_t plugins_call_init(server *srv) {
slot[j] = p;\
break;\
}\
- }
-
-
- PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_CLEAN, handle_uri_clean);
- PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_RAW, handle_uri_raw);
+ }
+
+
+ PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_CLEAN, handle_uri_clean);
+ PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_RAW, handle_uri_raw);
PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_REQUEST_DONE, handle_request_done);
PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_CONNECTION_CLOSE, handle_connection_close);
PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_TRIGGER, handle_trigger);
@@ -402,19 +402,19 @@ handler_t plugins_call_init(server *srv) {
PLUGIN_TO_SLOT(PLUGIN_FUNC_CLEANUP, cleanup);
PLUGIN_TO_SLOT(PLUGIN_FUNC_SET_DEFAULTS, set_defaults);
#undef PLUGIN_TO_SLOT
-
+
if (p->init) {
if (NULL == (p->data = p->init())) {
- log_error_write(srv, __FILE__, __LINE__, "sb",
+ log_error_write(srv, __FILE__, __LINE__, "sb",
"plugin-init failed for module", p->name);
return HANDLER_ERROR;
}
-
+
/* used for con->mode, DIRECT == 0, plugins above that */
((plugin_data *)(p->data))->id = i + 1;
-
+
if (p->version != LIGHTTPD_VERSION_ID) {
- log_error_write(srv, __FILE__, __LINE__, "sb",
+ log_error_write(srv, __FILE__, __LINE__, "sb",
"plugin-version doesn't match lighttpd-version for", p->name);
return HANDLER_ERROR;
}
@@ -422,29 +422,29 @@ handler_t plugins_call_init(server *srv) {
p->data = NULL;
}
}
-
+
return HANDLER_GO_ON;
}
void plugins_free(server *srv) {
size_t i;
plugins_call_cleanup(srv);
-
+
for (i = 0; i < srv->plugins.used; i++) {
plugin *p = ((plugin **)srv->plugins.ptr)[i];
-
+
plugin_free(p);
}
-
+
for (i = 0; srv->plugin_slots && i < PLUGIN_FUNC_SIZEOF; i++) {
plugin **slot = ((plugin ***)(srv->plugin_slots))[i];
-
+
if (slot) free(slot);
}
-
+
free(srv->plugin_slots);
srv->plugin_slots = NULL;
-
+
free(srv->plugins.ptr);
srv->plugins.ptr = NULL;
srv->plugins.used = 0;