|
|
|
@ -178,6 +178,7 @@ static action_result core_handle_test(server *srv, connection *con, gpointer par
|
|
|
|
|
gpointer k, v;
|
|
|
|
|
GList *hv;
|
|
|
|
|
GString *str;
|
|
|
|
|
gchar *backend;
|
|
|
|
|
guint64 uptime;
|
|
|
|
|
guint64 avg1, avg2, avg3;
|
|
|
|
|
gchar suffix1[2] = {0,0}, suffix2[2] = {0,0}, suffix3[2] = {0,0};
|
|
|
|
@ -218,6 +219,10 @@ static action_result core_handle_test(server *srv, connection *con, gpointer par
|
|
|
|
|
g_string_printf(str, "%"G_GUINT64_FORMAT"%s (%"G_GUINT64_FORMAT"%s/s)", avg1, suffix1, avg2, suffix2);
|
|
|
|
|
chunkqueue_append_string(con->out, str);
|
|
|
|
|
|
|
|
|
|
backend = ev_backend_string(ev_backend(srv->loop));
|
|
|
|
|
chunkqueue_append_mem(con->out, CONST_STR_LEN("\r\nevent handler: "));
|
|
|
|
|
chunkqueue_append_mem(con->out, backend, strlen(backend));
|
|
|
|
|
|
|
|
|
|
chunkqueue_append_mem(con->out, CONST_STR_LEN("\r\n\r\n--- headers ---\r\n"));
|
|
|
|
|
g_hash_table_iter_init(&iter, con->request.headers->table);
|
|
|
|
|
while (g_hash_table_iter_next(&iter, &k, &v)) {
|
|
|
|
@ -307,6 +312,53 @@ static gboolean core_listen(server *srv, plugin* p, option *opt) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static gboolean core_event_handler(server *srv, plugin* p, option *opt) {
|
|
|
|
|
guint backend;
|
|
|
|
|
gchar *str;
|
|
|
|
|
UNUSED(p);
|
|
|
|
|
|
|
|
|
|
if (opt->type != OPTION_STRING) {
|
|
|
|
|
ERROR(srv, "%s", "event_handler expects a string as parameter");
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
str = opt->value.opt_string->str;
|
|
|
|
|
backend = 0; /* libev will chose the right one by default */
|
|
|
|
|
|
|
|
|
|
if (g_str_equal(str, "select"))
|
|
|
|
|
backend = EVBACKEND_SELECT;
|
|
|
|
|
else if (g_str_equal(str, "poll"))
|
|
|
|
|
backend = EVBACKEND_POLL;
|
|
|
|
|
else if (g_str_equal(str, "epoll"))
|
|
|
|
|
backend = EVBACKEND_EPOLL;
|
|
|
|
|
else if (g_str_equal(str, "kqueue"))
|
|
|
|
|
backend = EVBACKEND_KQUEUE;
|
|
|
|
|
else if (g_str_equal(str, "devpoll"))
|
|
|
|
|
backend = EVBACKEND_DEVPOLL;
|
|
|
|
|
else if (g_str_equal(str, "port"))
|
|
|
|
|
backend = EVBACKEND_PORT;
|
|
|
|
|
else {
|
|
|
|
|
ERROR(srv, "unkown event handler: '%s'", str);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (backend) {
|
|
|
|
|
if (!(ev_supported_backends() & backend)) {
|
|
|
|
|
ERROR(srv, "unsupported event handler: '%s'", str);
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!(ev_recommended_backends() & backend)) {
|
|
|
|
|
TRACE(srv, "warning: event handler '%s' not recommended for this platform!", str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
srv->loop_flags |= backend;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gboolean core_option_log_target_parse(server *srv, plugin *p, size_t ndx, option *opt, gpointer *value) {
|
|
|
|
|
log_t *log;
|
|
|
|
|
log_type_t log_type;
|
|
|
|
@ -380,6 +432,7 @@ static const plugin_action actions[] = {
|
|
|
|
|
|
|
|
|
|
static const plugin_setup setups[] = {
|
|
|
|
|
{ "listen", core_listen },
|
|
|
|
|
{ "event_handler", core_event_handler },
|
|
|
|
|
{ NULL, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|