--- a/src/server/daemon/conf.c Sun Jan 15 20:30:45 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 2011 Olaf Wintermann. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "../public/nsapi.h" - -#include <stdio.h> -#include <stdlib.h> - -#include <fcntl.h> -#include <sys/types.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/mman.h> - -#include "../ucx/string.h" - -#include "httplistener.h" -#include "conf.h" -#include "func.h" - -#include "vserver.h" -#include "../util/pblock.h" - -#include "../config/objconf.h" -#include "../config/initconf.h" - -VirtualServer *default_vs; - -pool_handle_t *cfg_pool; - -// TODO: Funktion für ConfigDirective -> directive -// TODO: Funktion für UcxList parameter list -> pblock -// TODO: ConfigurationManager -// TODO: server.conf - -void load_init_conf(char *file) { - printf("load_init_conf\n"); - - InitConfig *cfg = load_init_config("conf/init.conf"); - if(cfg == NULL) { - return; - } - - cfg_pool = pool_create(); // one pool for one Configuration - UcxDlist *dirs = cfg->directives; - while(dirs != NULL) { - ConfigDirective *dir = dirs->data; - - /* create NSAPI directive */ - directive *d = malloc(sizeof(directive)); - d->param = pblock_create_pool(cfg_pool, 8); - UcxList *param = dir->param; - while(param != NULL) { - ConfigParam *p = param->data; - pblock_nvlinsert( - p->name.ptr, - p->name.length, - p->value.ptr, - p->value.length, - d->param); - param = param->next; - } - - /* get function */ - char *func_name = pblock_findval("fn", d->param); - d->func = get_function(func_name); - if(d->func == NULL) { - free(d); - continue; - } - - /* execute init directive */ - d->func->func(d->param, NULL, NULL); - - dirs = dirs->next; - } - - free_init_config(cfg); -} - -void load_server_conf(char *file) { - printf("load_server_conf\n"); - - ListenerConfig *conf = malloc(sizeof(ListenerConfig)); - conf->port = 9090; - conf->nacceptors = 1; - conf->name = "default"; - - http_listener_new(conf); - - // virtual server - default_vs = vs_new(); - // load obj.conf - default_vs->objects = load_obj_conf("conf/obj.conf"); - default_vs->default_obj_name = "default"; - -} - -VirtualServer* conf_get_default_vs() { - return default_vs; -} - -HTTPObjectConfig* load_obj_conf(char *file) { - printf("load_obj_conf\n"); - - // new conf function test - ObjectConfig *cfg = load_object_config(file); - if(cfg == NULL) { - return NULL; - } - - /* create object config */ - HTTPObjectConfig *conf = calloc(sizeof(HTTPObjectConfig), 1); - conf->pool = cfg_pool; - - /* convert ObjectConfig to HTTPObjectConfig */ - - /* add objects */ - conf->nobj = ucx_dlist_size(cfg->objects); - conf->objects = calloc(1, sizeof(httpd_object*)); - - UcxDlist *objlist = cfg->objects; - int i = 0; - while(objlist != NULL) { - ConfigObject *cob = objlist->data; - - /* get name and ppath */ - char *name = NULL; - char *ppath = NULL; - if(cob->name.length > 0) { - name = sstrdub(cob->name).ptr; - } - if(cob->ppath.length > 0) { - ppath = sstrdub(cob->ppath).ptr; - } - - /* create and add object */ - httpd_object *obj = object_new(name); - obj->path = NULL; - - conf->objects[i] = obj; - - /* add directives */ - for(int i=0;i<6;i++) { - UcxDlist *dirs = cob->directives[i]; - while(dirs != NULL) { - ConfigDirective *cfgdir = dirs->data; - - directive *d = malloc(sizeof(directive)); - d->cond = NULL; - d->param = pblock_create_pool(conf->pool, 8); - - /* add params */ - UcxList *param = cfgdir->param; - while(param != NULL) { - ConfigParam *p = param->data; - pblock_nvlinsert( - p->name.ptr, - p->name.length, - p->value.ptr, - p->value.length, - d->param); - param = param->next; - } - - /* get function */ - char *func_name = pblock_findval("fn", d->param); - d->func = get_function(func_name); - - dirs = dirs->next; - - /* add function to dtable */ - object_add_directive(obj, d, cfgdir->type_num); - } - } - - /* next */ - i++; - objlist = objlist->next; - } - - free_object_config(cfg); - - return conf; -}