--- embedaddon/lighttpd/src/mod_cml.c 2014/06/15 20:20:06 1.1.1.2 +++ embedaddon/lighttpd/src/mod_cml.c 2016/11/02 10:35:00 1.1.1.3 @@ -1,3 +1,5 @@ +#include "first.h" + #include "buffer.h" #include "server.h" #include "log.h" @@ -43,14 +45,16 @@ FREE_FUNC(mod_cml_free) { for (i = 0; i < srv->config_context->used; i++) { plugin_config *s = p->config_storage[i]; + if (NULL == s) continue; + buffer_free(s->ext); buffer_free(s->mc_namespace); buffer_free(s->power_magnet); array_free(s->mc_hosts); -#if defined(HAVE_MEMCACHE_H) - if (s->mc) mc_free(s->mc); +#if defined(USE_MEMCACHED) + if (s->memc) memcached_free(s->memc); #endif free(s); @@ -86,6 +90,7 @@ SETDEFAULTS_FUNC(mod_cml_set_defaults) { p->config_storage = calloc(1, srv->config_context->used * sizeof(plugin_config *)); for (i = 0; i < srv->config_context->used; i++) { + data_config const* config = (data_config const*)srv->config_context->data[i]; plugin_config *s; s = malloc(sizeof(plugin_config)); @@ -93,8 +98,8 @@ SETDEFAULTS_FUNC(mod_cml_set_defaults) { s->mc_hosts = array_init(); s->mc_namespace = buffer_init(); s->power_magnet = buffer_init(); -#if defined(HAVE_MEMCACHE_H) - s->mc = NULL; +#if defined(USE_MEMCACHED) + s->memc = NULL; #endif cv[0].destination = s->ext; @@ -104,29 +109,42 @@ SETDEFAULTS_FUNC(mod_cml_set_defaults) { p->config_storage[i] = s; - if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) { + if (0 != config_insert_values_global(srv, config->value, cv, i == 0 ? T_CONFIG_SCOPE_SERVER : T_CONFIG_SCOPE_CONNECTION)) { return HANDLER_ERROR; } if (s->mc_hosts->used) { -#if defined(HAVE_MEMCACHE_H) +#if defined(USE_MEMCACHED) + buffer *option_string = buffer_init(); size_t k; - s->mc = mc_new(); - for (k = 0; k < s->mc_hosts->used; k++) { + { + data_string *ds = (data_string *)s->mc_hosts->data[0]; + + buffer_append_string_len(option_string, CONST_STR_LEN("--SERVER=")); + buffer_append_string_buffer(option_string, ds->value); + } + + for (k = 1; k < s->mc_hosts->used; k++) { data_string *ds = (data_string *)s->mc_hosts->data[k]; - if (0 != mc_server_add4(s->mc, ds->value->ptr)) { - log_error_write(srv, __FILE__, __LINE__, "sb", - "connection to host failed:", - ds->value); + buffer_append_string_len(option_string, CONST_STR_LEN(" --SERVER=")); + buffer_append_string_buffer(option_string, ds->value); + } - return HANDLER_ERROR; - } + s->memc = memcached(CONST_BUF_LEN(option_string)); + + if (NULL == s->memc) { + log_error_write(srv, __FILE__, __LINE__, "sb", + "configuring memcached failed for option string:", + option_string); } + buffer_free(option_string); + + if (NULL == s->memc) return HANDLER_ERROR; #else log_error_write(srv, __FILE__, __LINE__, "s", - "memcache support is not compiled in but cml.memcache-hosts is set, aborting"); + "memcache support is not compiled in but cml.memcache-hosts is set, aborting"); return HANDLER_ERROR; #endif } @@ -142,8 +160,8 @@ static int mod_cml_patch_connection(server *srv, conne plugin_config *s = p->config_storage[0]; PATCH(ext); -#if defined(HAVE_MEMCACHE_H) - PATCH(mc); +#if defined(USE_MEMCACHED) + PATCH(memc); #endif PATCH(mc_namespace); PATCH(power_magnet); @@ -163,8 +181,8 @@ static int mod_cml_patch_connection(server *srv, conne if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.extension"))) { PATCH(ext); } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.memcache-hosts"))) { -#if defined(HAVE_MEMCACHE_H) - PATCH(mc); +#if defined(USE_MEMCACHED) + PATCH(memc); #endif } else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.memcache-namespace"))) { PATCH(mc_namespace); @@ -184,21 +202,19 @@ static int cache_call_lua(server *srv, connection *con /* cleanup basedir */ b = p->baseurl; - buffer_copy_string_buffer(b, con->uri.path); - for (c = b->ptr + b->used - 1; c > b->ptr && *c != '/'; c--); + buffer_copy_buffer(b, con->uri.path); + for (c = b->ptr + buffer_string_length(b); c > b->ptr && *c != '/'; c--); if (*c == '/') { - b->used = c - b->ptr + 2; - *(c+1) = '\0'; + buffer_string_set_length(b, c - b->ptr + 1); } b = p->basedir; - buffer_copy_string_buffer(b, con->physical.path); - for (c = b->ptr + b->used - 1; c > b->ptr && *c != '/'; c--); + buffer_copy_buffer(b, con->physical.path); + for (c = b->ptr + buffer_string_length(b); c > b->ptr && *c != '/'; c--); if (*c == '/') { - b->used = c - b->ptr + 2; - *(c+1) = '\0'; + buffer_string_set_length(b, c - b->ptr + 1); } @@ -218,7 +234,7 @@ URIHANDLER_FUNC(mod_cml_power_magnet) { buffer_reset(p->baseurl); buffer_reset(p->trigger_handler); - if (buffer_is_empty(p->conf.power_magnet)) return HANDLER_GO_ON; + if (buffer_string_is_empty(p->conf.power_magnet)) return HANDLER_GO_ON; /* * power-magnet: @@ -264,7 +280,7 @@ URIHANDLER_FUNC(mod_cml_power_magnet) { URIHANDLER_FUNC(mod_cml_is_handled) { plugin_data *p = p_d; - if (buffer_is_empty(con->physical.path)) return HANDLER_ERROR; + if (buffer_string_is_empty(con->physical.path)) return HANDLER_ERROR; mod_cml_patch_connection(srv, con, p); @@ -272,9 +288,9 @@ URIHANDLER_FUNC(mod_cml_is_handled) { buffer_reset(p->baseurl); buffer_reset(p->trigger_handler); - if (buffer_is_empty(p->conf.ext)) return HANDLER_GO_ON; + if (buffer_string_is_empty(p->conf.ext)) return HANDLER_GO_ON; - if (!buffer_is_equal_right_len(con->physical.path, p->conf.ext, p->conf.ext->used - 1)) { + if (!buffer_is_equal_right_len(con->physical.path, p->conf.ext, buffer_string_length(p->conf.ext))) { return HANDLER_GO_ON; }