diff --git a/antd-config.ini b/antd-config.ini index 57f64f3..6ef8df5 100644 --- a/antd-config.ini +++ b/antd-config.ini @@ -1,8 +1,4 @@ [SERVER] -; server port -; use 443 if one want to use -; SSL -port=8080 ; plugin directory plugins=/opt/www/lib/ ; plugin extension @@ -15,6 +11,8 @@ tmpdir=/opt/www/tmp/ server_log = /var/log/antd.log ; server error log error_log = /var/log/antd_error.log +; max concurent connection +maxcon=200 ; server backlocg backlog=5000 ; number of workers @@ -36,22 +34,7 @@ ssl.cipher=ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA htdocs=/opt/www/htdocs ; enable or disable SSL ssl.enable=1 - - -[PORT:80] -htdocs=/opt/www/htdocs -; enable or disable SSL -ssl.enable=0 - - -; This enable some plugins to be initialised at server startup -[AUTOSTART] -; to start a plugin at server statup use: -;plugin = plugin_name_1 -;plugin = plugin_name_2, etc - -; sever rules -[RULES] +; other config shoud be rules applied on this port ; For example the following rule will ; convert a request of type: ; name.example.com?rq=1 @@ -62,6 +45,29 @@ ssl.enable=0 ; ^([a-zA-Z][a-zA-Z0-9]*)\.[a-zA-Z0-9]+\..*$ = /<1>? ; Sytax: [regular expression on the original request]=[new request rule] +[PORT:80] +htdocs=/opt/www/htdocs +; enable or disable SSL +ssl.enable=0 +; other config shoud be rules applied on this port +; For example the following rule will +; convert a request of type: +; name.example.com?rq=1 +;TO: +; example.com/name/?rq=1 +; this is helpful to redirect many sub domains +; to a sub folder of the same server +; ^([a-zA-Z][a-zA-Z0-9]*)\.[a-zA-Z0-9]+\..*$ = /<1>? +; Sytax: [regular expression on the original request]=[new request rule] + + +; This enable some plugins to be initialised at server startup +[AUTOSTART] +; to start a plugin at server statup use: +;plugin = plugin_name_1 +;plugin = plugin_name_2, etc + + [MIMES] image/bmp=bmp image/jpeg=jpg,jpeg diff --git a/dist/antd-1.0.4b.tar.gz b/dist/antd-1.0.4b.tar.gz index 1820bc8..eef0111 100644 Binary files a/dist/antd-1.0.4b.tar.gz and b/dist/antd-1.0.4b.tar.gz differ diff --git a/http_server.c b/http_server.c index 30a188d..b1c4d25 100644 --- a/http_server.c +++ b/http_server.c @@ -74,7 +74,6 @@ void server_log(const char* fmt, ...) #endif void destroy_config() { - list_free(&(server_config.rules)); freedict(server_config.handlers); if (server_config.plugins_dir) free(server_config.plugins_dir); @@ -111,6 +110,7 @@ void destroy_config() { close(cnf->sock); } + list_free(&(cnf->rules)); } freedict(server_config.ports); } @@ -178,11 +178,6 @@ static int config_handler(void *conf, const char *section, const char *name, pconfig->ssl_cipher = strdup(value); } #endif - else if (strcmp(section, "RULES") == 0) - { - list_put_s(&pconfig->rules, name); - list_put_s(&pconfig->rules, value); - } else if (strcmp(section, "FILEHANDLER") == 0) { dput(pconfig->handlers, name, strdup(value)); @@ -208,6 +203,7 @@ static int config_handler(void *conf, const char *section, const char *name, p = (port_config_t*) malloc( sizeof(port_config_t)); p->htdocs = NULL; p->sock = -1; + p->rules = list_init(); dput(pconfig->ports,buf, p); p->port = atoi(buf); } @@ -221,6 +217,12 @@ static int config_handler(void *conf, const char *section, const char *name, if(p->usessl) pconfig->enable_ssl = 1; } + else + { + // other thing should be rules + list_put_s(&p->rules, name); + list_put_s(&p->rules, value); + } } else { @@ -263,7 +265,6 @@ void load_config(const char *file) server_config.tmpdir = "tmp/"; server_config.n_workers = 4; server_config.backlog = 1000; - server_config.rules = list_init(); server_config.handlers = dict(); server_config.maxcon = 100; server_config.connection = 0; @@ -694,7 +695,7 @@ int startup(unsigned *port) return (httpd); } -char *apply_rules(const char *host, char *url) +char *apply_rules(list_t rules, const char *host, char *url) { // rule check char *query_string = url; @@ -706,12 +707,12 @@ char *apply_rules(const char *host, char *url) query_string++; } //char* oldurl = strdup(url); - int size = list_size(server_config.rules); + int size = list_size(rules); for (int i = 0; i < size; i += 2) { char *k, *v; - k = list_at(server_config.rules, i)->value.s; - v = list_at(server_config.rules, i + 1)->value.s; + k = list_at(rules, i)->value.s; + v = list_at(rules, i + 1)->value.s; // 1 group if (rule_check(k, v, host, url, query_string, url)) { @@ -777,7 +778,7 @@ void *decode_request_header(void *data) memset(buf, 0, sizeof(buf)); strcat(buf, url); LOG("Original query: %s", url); - query = apply_rules(host, buf); + query = apply_rules(rq->client->port_config->rules, host, buf); LOG("Processed query: %s", query); dput(rq->request, "RESOURCE_PATH", url_decode(buf)); if (query) diff --git a/lib/handle.h b/lib/handle.h index 2bd5677..7d5b721 100644 --- a/lib/handle.h +++ b/lib/handle.h @@ -37,6 +37,7 @@ typedef struct { int usessl; char* htdocs; int sock; + list_t rules; } port_config_t; typedef struct{ @@ -73,7 +74,6 @@ typedef struct { char *db_path; //char* htdocs; char* tmpdir; - list_t rules; dictionary_t handlers; int backlog; int maxcon; diff --git a/lib/plugin.h b/lib/plugin.h index 5799c12..888720a 100644 --- a/lib/plugin.h +++ b/lib/plugin.h @@ -41,7 +41,7 @@ void __init_plugin__(const char* pl,config_t* conf){ __plugin__.name = strdup(pl); __plugin__.dbpath= conf->db_path; __plugin__.pdir = conf->plugins_dir; - __plugin__.tmpdir = = sconf->tmpdir; + __plugin__.tmpdir = conf->tmpdir; __plugin__.raw_body = 0; init(); };