--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/server/daemon/config.h Mon Jan 16 14:06:52 2012 +0100 @@ -0,0 +1,107 @@ +/* + * 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. + */ + +#ifndef CONF_H +#define CONF_H + +#include "../util/object.h" + +#include "../config/objconf.h" +#include "../config/initconf.h" +#include "../config/serverconf.h" + +#include "../ucx/list.h" +#include "../ucx/dlist.h" +#include "../ucx/map.h" +#include "../ucx/mempool.h" +#include "../ucx/string.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _server_configuration { + pool_handle_t *pool; + UcxMap *host_vs; // map of all vservers. key is the host name + UcxList *listeners; // list of all listeners + UcxList *logfiles; + UcxMap *authdbs; + sstr_t tmp; + sstr_t user; +} ServerConfiguration; + +/* + * Handles an object in the server.conf + * An object looks like <ObjectName> ... directives ... </ObjectName> + * The parser executes the handlers process_directive function for each + * directive in the object + */ +typedef struct _server_conf_handler ServerConfigHandler; + +typedef void(*cfg_handler_init_f)(ServerConfigHandler*, ServerConfiguration*); +typedef int(*cfg_process_directive_f)( + ServerConfigHandler*, + ServerConfiguration*, + ConfigDirective*); + +struct _server_conf_handler { + cfg_handler_init_f init; + cfg_process_directive_f process_directive; +}; + +void load_init_conf(char *file); + +void load_server_conf(char *file); + +void init_default_server_conf_handlers(); + +int handle_runtime_directive( + ServerConfigHandler *h, + ServerConfiguration *conf, + ConfigDirective *dir); +int handle_listener_directive( + ServerConfigHandler *h, + ServerConfiguration *conf, + ConfigDirective *dir); +int handle_vserver_directive( + ServerConfigHandler *h, + ServerConfiguration *conf, + ConfigDirective *dir); + +VirtualServer* conf_get_default_vs(); + +HTTPObjectConfig* load_obj_conf(char *file); + + + +#ifdef __cplusplus +} +#endif + +#endif /* CONF_H */ +