version 1.1, 2013/10/14 10:32:48
|
version 1.1.1.3, 2016/11/02 10:35:00
|
Line 1
|
Line 1
|
|
#include "first.h" |
|
|
#include "plugin.h" |
#include "plugin.h" |
#include "log.h" |
#include "log.h" |
#include "response.h" |
#include "response.h" |
Line 46 FREE_FUNC(mod_evhost_free) {
|
Line 48 FREE_FUNC(mod_evhost_free) {
|
for (i = 0; i < srv->config_context->used; i++) { |
for (i = 0; i < srv->config_context->used; i++) { |
plugin_config *s = p->config_storage[i]; |
plugin_config *s = p->config_storage[i]; |
|
|
if (!s) continue; | if (NULL == s) continue; |
|
|
if(s->path_pieces) { |
if(s->path_pieces) { |
size_t j; |
size_t j; |
Line 128 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
Line 130 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
|
|
if (!p) return HANDLER_ERROR; |
if (!p) return HANDLER_ERROR; |
|
|
p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *)); | p->config_storage = calloc(1, srv->config_context->used * sizeof(plugin_config *)); |
|
|
for (i = 0; i < srv->config_context->used; i++) { |
for (i = 0; i < srv->config_context->used; i++) { |
|
data_config const* config = (data_config const*)srv->config_context->data[i]; |
plugin_config *s; |
plugin_config *s; |
|
|
s = calloc(1, sizeof(plugin_config)); |
s = calloc(1, sizeof(plugin_config)); |
Line 142 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
Line 145 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
|
|
p->config_storage[i] = s; |
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; |
return HANDLER_ERROR; |
} |
} |
|
|
if (s->path_pieces_raw->used != 0) { | if (!buffer_string_is_empty(s->path_pieces_raw)) { |
mod_evhost_parse_pattern(s); |
mod_evhost_parse_pattern(s); |
} |
} |
} |
} |
Line 164 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
Line 167 SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
|
*/ |
*/ |
|
|
static int mod_evhost_parse_host(connection *con,array *host) { |
static int mod_evhost_parse_host(connection *con,array *host) { |
/* con->uri.authority->used is always > 0 if we come here */ | register char *ptr = con->uri.authority->ptr + buffer_string_length(con->uri.authority); |
register char *ptr = con->uri.authority->ptr + con->uri.authority->used - 1; | |
char *colon = ptr; /* needed to filter out the colon (if exists) */ |
char *colon = ptr; /* needed to filter out the colon (if exists) */ |
int first = 1; |
int first = 1; |
data_string *ds; |
data_string *ds; |
Line 200 static int mod_evhost_parse_host(connection *con,array
|
Line 202 static int mod_evhost_parse_host(connection *con,array
|
/* is something between the dots */ |
/* is something between the dots */ |
ds = data_string_init(); |
ds = data_string_init(); |
buffer_copy_string_len(ds->key,CONST_STR_LEN("%")); |
buffer_copy_string_len(ds->key,CONST_STR_LEN("%")); |
buffer_append_long(ds->key, i++); | buffer_append_int(ds->key, i++); |
buffer_copy_string_len(ds->value,ptr+1,colon-ptr-1); |
buffer_copy_string_len(ds->value,ptr+1,colon-ptr-1); |
|
|
array_insert_unique(host,(data_unset *)ds); |
array_insert_unique(host,(data_unset *)ds); |
Line 213 static int mod_evhost_parse_host(connection *con,array
|
Line 215 static int mod_evhost_parse_host(connection *con,array
|
if (colon != ptr) { |
if (colon != ptr) { |
ds = data_string_init(); |
ds = data_string_init(); |
buffer_copy_string_len(ds->key,CONST_STR_LEN("%")); |
buffer_copy_string_len(ds->key,CONST_STR_LEN("%")); |
buffer_append_long(ds->key, i /* ++ */); | buffer_append_int(ds->key, i /* ++ */); |
buffer_copy_string_len(ds->value,ptr,colon-ptr); |
buffer_copy_string_len(ds->value,ptr,colon-ptr); |
|
|
array_insert_unique(host,(data_unset *)ds); |
array_insert_unique(host,(data_unset *)ds); |
Line 265 static handler_t mod_evhost_uri_handler(server *srv, c
|
Line 267 static handler_t mod_evhost_uri_handler(server *srv, c
|
stat_cache_entry *sce = NULL; |
stat_cache_entry *sce = NULL; |
|
|
/* not authority set */ |
/* not authority set */ |
if (con->uri.authority->used == 0) return HANDLER_GO_ON; | if (buffer_string_is_empty(con->uri.authority)) return HANDLER_GO_ON; |
|
|
mod_evhost_patch_connection(srv, con, p); |
mod_evhost_patch_connection(srv, con, p); |
|
|
Line 300 static handler_t mod_evhost_uri_handler(server *srv, c
|
Line 302 static handler_t mod_evhost_uri_handler(server *srv, c
|
buffer_append_string_len(p->tmp_buf, con->uri.authority->ptr, colon - con->uri.authority->ptr); /* adds fqdn */ |
buffer_append_string_len(p->tmp_buf, con->uri.authority->ptr, colon - con->uri.authority->ptr); /* adds fqdn */ |
} |
} |
} else if (NULL != (ds = (data_string *)array_get_element(parsed_host,p->conf.path_pieces[i]->ptr))) { |
} else if (NULL != (ds = (data_string *)array_get_element(parsed_host,p->conf.path_pieces[i]->ptr))) { |
if (ds->value->used) { | buffer_append_string_buffer(p->tmp_buf,ds->value); |
buffer_append_string_buffer(p->tmp_buf,ds->value); | |
} | |
} else { |
} else { |
/* unhandled %-sequence */ |
/* unhandled %-sequence */ |
} |
} |
Line 311 static handler_t mod_evhost_uri_handler(server *srv, c
|
Line 311 static handler_t mod_evhost_uri_handler(server *srv, c
|
} |
} |
} |
} |
|
|
BUFFER_APPEND_SLASH(p->tmp_buf); | buffer_append_slash(p->tmp_buf); |
|
|
array_free(parsed_host); |
array_free(parsed_host); |
|
|
Line 324 static handler_t mod_evhost_uri_handler(server *srv, c
|
Line 324 static handler_t mod_evhost_uri_handler(server *srv, c
|
} |
} |
|
|
if (!not_good) { |
if (!not_good) { |
buffer_copy_string_buffer(con->physical.doc_root, p->tmp_buf); | buffer_copy_buffer(con->physical.doc_root, p->tmp_buf); |
} |
} |
|
|
return HANDLER_GO_ON; |
return HANDLER_GO_ON; |