acl/app/jaws/plugin/cgi/http_conf.c
2014-11-19 00:25:21 +08:00

90 lines
2.3 KiB
C

#include "lib_acl.h"
#include "http_plugin.h"
char *var_cfg_log_name;
char *var_cfg_cgi_bin;
static ACL_CFG_STR_TABLE __conf_str_tab[] = {
/* 配置项名称, 配置项缺省值, 存储配置项值的地址 */
{ "logpath", "/tmp/cgifilter.log", &var_cfg_log_name },
{ "cgi-bin", "/opt/jaws/www/cgi-bin", &var_cfg_cgi_bin },
{ 0, 0, 0 }
};
int var_cfg_data_clone;
static int var_cfg_debug_mem;
static ACL_CFG_BOOL_TABLE __conf_bool_tab[] = {
/* 配置项名称, 配置项缺省值, 存储配置项值的地址 */
{ "data_clone", 0, &var_cfg_data_clone },
{ "debug_mem", 0, &var_cfg_debug_mem },
{ 0, 0 , 0 }
};
static int var_cfg_threads_limit;
static int var_cfg_threads_idle;
static ACL_CFG_INT_TABLE __conf_int_tab[] = {
/* 配置项名称, 配置项缺省值, 存储配置项值的地址 */
{ "threads_limit", 100, &var_cfg_threads_limit, 0, 0 },
{ "threads_idle", 120, &var_cfg_threads_idle, 0, 0 },
{ 0, 0 , 0, 0, 0 }
};
void http_conf_load(const char *cfg_dir)
{
char *filepath;
ACL_XINETD_CFG_PARSER *cfg;
const ACL_ARRAY *cgi_maps;
/* 读取配置文件 */
filepath = acl_concatenate((cfg_dir && *cfg_dir)
? cfg_dir : "/tmp", "/cgi.cf", NULL);
cfg = acl_xinetd_cfg_load(filepath);
if (cfg == NULL)
acl_msg_warn("load cfg(%s) error(%s)",
filepath, acl_last_serror());
acl_xinetd_params_str_table(cfg, __conf_str_tab);
acl_xinetd_params_int_table(cfg, __conf_int_tab);
acl_xinetd_params_bool_table(cfg, __conf_bool_tab);
cgi_maps = acl_xinetd_cfg_get_ex(cfg, "cgi-map");
if (cgi_maps) {
ACL_ITER iter;
acl_foreach(iter, (ACL_ARRAY*) cgi_maps) {
const char *cgi_map = (const char*) iter.data;
ACL_ARGV *cgi_argv = acl_argv_split(cgi_map, "\t ");
ACL_ITER iter2;
if (cgi_argv->argc < 2) {
acl_msg_warn("%s(%d): cgi-map(%s) invalid",
__FUNCTION__, __LINE__, cgi_map);
acl_argv_free(cgi_argv);
continue;
}
acl_foreach(iter2, cgi_argv) {
char *ptr = (char*) iter2.data;
acl_lowercase(ptr);
}
http_cgi_add1(cgi_argv);
acl_argv_free(cgi_argv);
}
}
if (cfg)
acl_xinetd_cfg_free(cfg);
acl_myfree(filepath);
/* 初始化CGI模块 */
http_cgi_init();
/* 创建线程池 */
http_plugin_pool_create(var_cfg_threads_limit, var_cfg_threads_idle);
http_plugin_debug_memory(var_cfg_debug_mem);
}