support custom config
parent
5d3d0cafa6
commit
01d16a3611
109
src/sf_global.c
109
src/sf_global.c
|
|
@ -28,12 +28,45 @@ SFGlobalVariables g_sf_global_vars = {
|
|||
{'\0'}, {'\0'}, {0, 0}
|
||||
};
|
||||
|
||||
int sf_load_config(const char *server_name, const char *filename,
|
||||
IniContext *pIniContext, const int default_inner_port,
|
||||
const int default_outer_port)
|
||||
static int sf_get_config_int_value(IniContext *pIniContext,
|
||||
const char *item_prefix_name, const char *item_affix_name,
|
||||
const int default_value)
|
||||
{
|
||||
int value;
|
||||
char item_name[FAST_INI_ITEM_NAME_SIZE];
|
||||
|
||||
snprintf(item_name, sizeof(item_name), "%s_%s",
|
||||
item_prefix_name, item_affix_name);
|
||||
value = iniGetIntValue(NULL, item_name, pIniContext, default_value);
|
||||
if (value <= 0) {
|
||||
value = default_value;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
static void sf_get_config_str_value(IniContext *pIniContext,
|
||||
const char *item_prefix_name, const char *item_affix_name,
|
||||
char *dest, const int dest_size)
|
||||
{
|
||||
char item_name[FAST_INI_ITEM_NAME_SIZE];
|
||||
char *value;
|
||||
|
||||
snprintf(item_name, sizeof(item_name), "%s_%s",
|
||||
item_prefix_name, item_affix_name);
|
||||
value = iniGetStrValue(NULL, item_name, pIniContext);
|
||||
if (value == NULL) {
|
||||
*dest = '\0';
|
||||
}
|
||||
else {
|
||||
snprintf(dest, dest_size, "%s", value);
|
||||
}
|
||||
}
|
||||
|
||||
int sf_load_config_ex(const char *server_name, const char *filename,
|
||||
IniContext *pIniContext, const SFCustomConfig *inner_cfg,
|
||||
const SFCustomConfig *outer_cfg)
|
||||
{
|
||||
char *pBasePath;
|
||||
char *pBindAddr;
|
||||
char *pRunByGroup;
|
||||
char *pRunByUser;
|
||||
char *pMaxPkgSize;
|
||||
|
|
@ -54,7 +87,8 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
return ENOENT;
|
||||
}
|
||||
|
||||
snprintf(g_sf_global_vars.base_path, sizeof(g_sf_global_vars.base_path), "%s", pBasePath);
|
||||
snprintf(g_sf_global_vars.base_path, sizeof(g_sf_global_vars.base_path),
|
||||
"%s", pBasePath);
|
||||
chopPath(g_sf_global_vars.base_path);
|
||||
if (!fileExists(g_sf_global_vars.base_path)) {
|
||||
logError("file: "__FILE__", line: %d, "
|
||||
|
|
@ -81,32 +115,18 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
g_sf_global_vars.network_timeout = DEFAULT_NETWORK_TIMEOUT;
|
||||
}
|
||||
|
||||
g_sf_global_vars.inner_port = iniGetIntValue(NULL, "inner_port", pIniContext,
|
||||
default_inner_port);
|
||||
if (g_sf_global_vars.inner_port <= 0) {
|
||||
g_sf_global_vars.inner_port = default_inner_port;
|
||||
}
|
||||
g_sf_global_vars.outer_port = iniGetIntValue(NULL, "outer_port", pIniContext,
|
||||
default_outer_port);
|
||||
if (g_sf_global_vars.outer_port <= 0) {
|
||||
g_sf_global_vars.outer_port = default_outer_port;
|
||||
}
|
||||
g_sf_global_vars.inner_port = sf_get_config_int_value(pIniContext,
|
||||
inner_cfg->item_prefix_name, "port", inner_cfg->default_port);
|
||||
g_sf_global_vars.outer_port = sf_get_config_int_value(pIniContext,
|
||||
outer_cfg->item_prefix_name, "port", outer_cfg->default_port);
|
||||
|
||||
pBindAddr = iniGetStrValue(NULL, "inner_bind_addr", pIniContext);
|
||||
if (pBindAddr == NULL) {
|
||||
*g_sf_global_vars.inner_bind_addr = '\0';
|
||||
}
|
||||
else {
|
||||
snprintf(g_sf_global_vars.inner_bind_addr, sizeof(g_sf_global_vars.inner_bind_addr), "%s", pBindAddr);
|
||||
}
|
||||
sf_get_config_str_value(pIniContext, inner_cfg->item_prefix_name,
|
||||
"bind_addr", g_sf_global_vars.inner_bind_addr,
|
||||
sizeof(g_sf_global_vars.inner_bind_addr));
|
||||
|
||||
pBindAddr = iniGetStrValue(NULL, "outer_bind_addr", pIniContext);
|
||||
if (pBindAddr == NULL) {
|
||||
*g_sf_global_vars.outer_bind_addr = '\0';
|
||||
}
|
||||
else {
|
||||
snprintf(g_sf_global_vars.outer_bind_addr, sizeof(g_sf_global_vars.outer_bind_addr), "%s", pBindAddr);
|
||||
}
|
||||
sf_get_config_str_value(pIniContext, outer_cfg->item_prefix_name,
|
||||
"bind_addr", g_sf_global_vars.outer_bind_addr,
|
||||
sizeof(g_sf_global_vars.outer_bind_addr));
|
||||
|
||||
g_sf_global_vars.max_connections = iniGetIntValue(NULL, "max_connections",
|
||||
pIniContext, DEFAULT_MAX_CONNECTONS);
|
||||
|
|
@ -186,7 +206,8 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
*g_sf_global_vars.run_by_group = '\0';
|
||||
}
|
||||
else {
|
||||
snprintf(g_sf_global_vars.run_by_group, sizeof(g_sf_global_vars.run_by_group),
|
||||
snprintf(g_sf_global_vars.run_by_group,
|
||||
sizeof(g_sf_global_vars.run_by_group),
|
||||
"%s", pRunByGroup);
|
||||
}
|
||||
if (*g_sf_global_vars.run_by_group == '\0') {
|
||||
|
|
@ -212,7 +233,8 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
*g_sf_global_vars.run_by_user = '\0';
|
||||
}
|
||||
else {
|
||||
snprintf(g_sf_global_vars.run_by_user, sizeof(g_sf_global_vars.run_by_user),
|
||||
snprintf(g_sf_global_vars.run_by_user,
|
||||
sizeof(g_sf_global_vars.run_by_user),
|
||||
"%s", pRunByUser);
|
||||
}
|
||||
if (*g_sf_global_vars.run_by_user == '\0') {
|
||||
|
|
@ -234,7 +256,9 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
g_sf_global_vars.run_by_uid = pUser->pw_uid;
|
||||
}
|
||||
|
||||
if ((result=set_run_by(g_sf_global_vars.run_by_group, g_sf_global_vars.run_by_user)) != 0) {
|
||||
if ((result=set_run_by(g_sf_global_vars.run_by_group,
|
||||
g_sf_global_vars.run_by_user)) != 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -257,10 +281,10 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
}
|
||||
g_sf_global_vars.thread_stack_size = (int)thread_stack_size;
|
||||
|
||||
g_sf_global_vars.rotate_error_log = iniGetBoolValue(NULL, "rotate_error_log",
|
||||
pIniContext, false);
|
||||
g_sf_global_vars.log_file_keep_days = iniGetIntValue(NULL, "log_file_keep_days",
|
||||
pIniContext, 0);
|
||||
g_sf_global_vars.rotate_error_log = iniGetBoolValue(NULL,
|
||||
"rotate_error_log", pIniContext, false);
|
||||
g_sf_global_vars.log_file_keep_days = iniGetIntValue(NULL,
|
||||
"log_file_keep_days", pIniContext, 0);
|
||||
|
||||
load_log_level(pIniContext);
|
||||
if ((result=log_set_prefix(g_sf_global_vars.base_path, server_name)) != 0) {
|
||||
|
|
@ -270,6 +294,19 @@ int sf_load_config(const char *server_name, const char *filename,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int sf_load_config(const char *server_name, const char *filename,
|
||||
IniContext *pIniContext, const int default_inner_port,
|
||||
const int default_outer_port)
|
||||
{
|
||||
SFCustomConfig inner_cfg;
|
||||
SFCustomConfig outer_cfg;
|
||||
|
||||
SF_SET_CUSTOM_CONFIG(inner_cfg, "inner", default_inner_port);
|
||||
SF_SET_CUSTOM_CONFIG(outer_cfg, "outer", default_outer_port);
|
||||
return sf_load_config_ex(server_name, filename, pIniContext,
|
||||
&inner_cfg, &outer_cfg);
|
||||
}
|
||||
|
||||
void sf_log_config_ex(const char *other_config)
|
||||
{
|
||||
char sz_thread_stack_size[32];
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ typedef struct sf_connection_stat {
|
|||
volatile int max_count;
|
||||
} SFConnectionStat;
|
||||
|
||||
typedef struct sf_custom_config {
|
||||
const char *item_prefix_name;
|
||||
int default_port;
|
||||
} SFCustomConfig;
|
||||
|
||||
typedef struct sf_global_variables {
|
||||
int connect_timeout;
|
||||
int network_timeout;
|
||||
|
|
@ -54,10 +59,26 @@ extern "C" {
|
|||
|
||||
extern SFGlobalVariables g_sf_global_vars;
|
||||
|
||||
#define SF_G_BASE_PATH g_sf_global_vars.base_path
|
||||
#define SF_G_CONTINUE_FLAG g_sf_global_vars.continue_flag
|
||||
#define SF_G_CONNECT_TIMEOUT g_sf_global_vars.connect_timeout
|
||||
#define SF_G_NETWORK_TIMEOUT g_sf_global_vars.network_timeout
|
||||
#define SF_G_THREAD_STACK_SIZE g_sf_global_vars.thread_stack_size
|
||||
|
||||
#define SF_SET_CUSTOM_CONFIG(cfg, prefix_name, port) \
|
||||
do { \
|
||||
(cfg).item_prefix_name = prefix_name; \
|
||||
(cfg).default_port = port; \
|
||||
} while (0)
|
||||
|
||||
int sf_load_config(const char *server_name, const char *filename,
|
||||
IniContext *pIniContext, const int default_inner_port,
|
||||
const int default_outer_port);
|
||||
|
||||
int sf_load_config_ex(const char *server_name, const char *filename,
|
||||
IniContext *pIniContext, const SFCustomConfig *inner_cfg,
|
||||
const SFCustomConfig *outer_cfg);
|
||||
|
||||
void sf_log_config_ex(const char *other_config);
|
||||
|
||||
#define sf_log_config() sf_log_config_ex(NULL)
|
||||
|
|
|
|||
23
src/sf_nio.c
23
src/sf_nio.c
|
|
@ -325,7 +325,7 @@ int sf_client_sock_read(int sock, short event, void *arg)
|
|||
}
|
||||
else {
|
||||
logWarning("file: "__FILE__", line: %d, "
|
||||
"client ip: %s, recv failed, "
|
||||
"client ip: %s, recv fail, "
|
||||
"errno: %d, error info: %s",
|
||||
__LINE__, pTask->client_ip,
|
||||
errno, strerror(errno));
|
||||
|
|
@ -335,10 +335,29 @@ int sf_client_sock_read(int sock, short event, void *arg)
|
|||
}
|
||||
}
|
||||
else if (bytes == 0) {
|
||||
if (pTask->offset > 0) {
|
||||
if (pTask->length > 0) {
|
||||
logWarning("file: "__FILE__", line: %d, "
|
||||
"client ip: %s, connection "
|
||||
"disconnected, expect pkg length: %d, "
|
||||
"recv pkg length: %d", __LINE__,
|
||||
pTask->client_ip, pTask->length,
|
||||
pTask->offset);
|
||||
}
|
||||
else {
|
||||
logWarning("file: "__FILE__", line: %d, "
|
||||
"client ip: %s, connection "
|
||||
"disconnected, recv pkg length: %d",
|
||||
__LINE__, pTask->client_ip,
|
||||
pTask->offset);
|
||||
}
|
||||
}
|
||||
else {
|
||||
logDebug("file: "__FILE__", line: %d, "
|
||||
"client ip: %s, sock: %d, recv failed, "
|
||||
"client ip: %s, sock: %d, recv fail, "
|
||||
"connection disconnected",
|
||||
__LINE__, pTask->client_ip, sock);
|
||||
}
|
||||
|
||||
sf_task_cleanup_func(pTask);
|
||||
return -1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue