mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-05 05:18:53 +08:00
90 lines
2.3 KiB
C
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);
|
|
}
|