diff --git a/src/char/char.c b/src/char/char.c index cd31f7d39e..c57bfb91c8 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -2527,13 +2527,13 @@ void char_set_defaults(){ charserv_config.guild_exp_rate = 100; } -int char_config_read(const char* cfgName){ +bool char_config_read(const char* cfgName, bool normal){ char line[1024], w1[1024], w2[1024]; FILE* fp = fopen(cfgName, "r"); if (fp == NULL) { ShowError("Configuration file not found: %s.\n", cfgName); - return 1; + return false; } while(fgets(line, sizeof(line), fp)) { @@ -2545,6 +2545,49 @@ int char_config_read(const char* cfgName){ remove_control_chars(w1); remove_control_chars(w2); + + // Config that loaded only when server started, not by reloading config file + if (normal) { + if (strcmpi(w1, "userid") == 0) { + safestrncpy(charserv_config.userid, w2, sizeof(charserv_config.userid)); + } else if (strcmpi(w1, "passwd") == 0) { + safestrncpy(charserv_config.passwd, w2, sizeof(charserv_config.passwd)); + } else if (strcmpi(w1, "server_name") == 0) { + safestrncpy(charserv_config.server_name, w2, sizeof(charserv_config.server_name)); + } else if (strcmpi(w1, "wisp_server_name") == 0) { + if (strlen(w2) >= 4) { + safestrncpy(charserv_config.wisp_server_name, w2, sizeof(charserv_config.wisp_server_name)); + } + } else if (strcmpi(w1, "login_ip") == 0) { + charserv_config.login_ip = host2ip(w2); + if (charserv_config.login_ip) { + char ip_str[16]; + safestrncpy(charserv_config.login_ip_str, w2, sizeof(charserv_config.login_ip_str)); + ShowStatus("Login server IP address : %s -> %s\n", w2, ip2str(charserv_config.login_ip, ip_str)); + } + } else if (strcmpi(w1, "login_port") == 0) { + charserv_config.login_port = atoi(w2); + } else if (strcmpi(w1, "char_ip") == 0) { + charserv_config.char_ip = host2ip(w2); + if (charserv_config.char_ip) { + char ip_str[16]; + safestrncpy(charserv_config.char_ip_str, w2, sizeof(charserv_config.char_ip_str)); + ShowStatus("Character server IP address : %s -> %s\n", w2, ip2str(charserv_config.char_ip, ip_str)); + } + } else if (strcmpi(w1, "bind_ip") == 0) { + charserv_config.bind_ip = host2ip(w2); + if (charserv_config.bind_ip) { + char ip_str[16]; + safestrncpy(charserv_config.bind_ip_str, w2, sizeof(charserv_config.bind_ip_str)); + ShowStatus("Character server binding IP address : %s -> %s\n", w2, ip2str(charserv_config.bind_ip, ip_str)); + } + } else if (strcmpi(w1, "char_port") == 0) { + charserv_config.char_port = atoi(w2); + } else if (strcmpi(w1, "console") == 0) { + charserv_config.console = config_switch(w2); + } + } + if(strcmpi(w1,"timestamp_format") == 0) { safestrncpy(timestamp_format, w2, sizeof(timestamp_format)); } else if(strcmpi(w1,"console_silent")==0){ @@ -2553,41 +2596,6 @@ int char_config_read(const char* cfgName){ ShowInfo("Console Silent Setting: %d\n", atoi(w2)); } else if(strcmpi(w1,"stdout_with_ansisequence")==0){ stdout_with_ansisequence = config_switch(w2); - } else if (strcmpi(w1, "userid") == 0) { - safestrncpy(charserv_config.userid, w2, sizeof(charserv_config.userid)); - } else if (strcmpi(w1, "passwd") == 0) { - safestrncpy(charserv_config.passwd, w2, sizeof(charserv_config.passwd)); - } else if (strcmpi(w1, "server_name") == 0) { - safestrncpy(charserv_config.server_name, w2, sizeof(charserv_config.server_name)); - } else if (strcmpi(w1, "wisp_server_name") == 0) { - if (strlen(w2) >= 4) { - safestrncpy(charserv_config.wisp_server_name, w2, sizeof(charserv_config.wisp_server_name)); - } - } else if (strcmpi(w1, "login_ip") == 0) { - charserv_config.login_ip = host2ip(w2); - if (charserv_config.login_ip) { - char ip_str[16]; - safestrncpy(charserv_config.login_ip_str, w2, sizeof(charserv_config.login_ip_str)); - ShowStatus("Login server IP address : %s -> %s\n", w2, ip2str(charserv_config.login_ip, ip_str)); - } - } else if (strcmpi(w1, "login_port") == 0) { - charserv_config.login_port = atoi(w2); - } else if (strcmpi(w1, "char_ip") == 0) { - charserv_config.char_ip = host2ip(w2); - if (charserv_config.char_ip) { - char ip_str[16]; - safestrncpy(charserv_config.char_ip_str, w2, sizeof(charserv_config.char_ip_str)); - ShowStatus("Character server IP address : %s -> %s\n", w2, ip2str(charserv_config.char_ip, ip_str)); - } - } else if (strcmpi(w1, "bind_ip") == 0) { - charserv_config.bind_ip = host2ip(w2); - if (charserv_config.bind_ip) { - char ip_str[16]; - safestrncpy(charserv_config.bind_ip_str, w2, sizeof(charserv_config.bind_ip_str)); - ShowStatus("Character server binding IP address : %s -> %s\n", w2, ip2str(charserv_config.bind_ip, ip_str)); - } - } else if (strcmpi(w1, "char_port") == 0) { - charserv_config.char_port = atoi(w2); } else if (strcmpi(w1, "char_maintenance") == 0) { charserv_config.char_maintenance = atoi(w2); } else if (strcmpi(w1, "char_new") == 0) { @@ -2664,8 +2672,6 @@ int char_config_read(const char* cfgName){ charserv_config.char_config.char_del_option = atoi(w2); } else if(strcmpi(w1,"db_path")==0) { safestrncpy(schema_config.db_path, w2, sizeof(schema_config.db_path)); - } else if (strcmpi(w1, "console") == 0) { - charserv_config.console = config_switch(w2); } else if (strcmpi(w1, "fame_list_alchemist") == 0) { fame_list_size_chemist = atoi(w2); if (fame_list_size_chemist > MAX_FAME_LIST) { @@ -2709,13 +2715,13 @@ int char_config_read(const char* cfgName){ } else if (strcmpi(w1, "char_checkdb") == 0) { charserv_config.char_check_db = config_switch(w2); } else if (strcmpi(w1, "import") == 0) { - char_config_read(w2); + char_config_read(w2, normal); } } fclose(fp); ShowInfo("Done reading %s.\n", cfgName); - return 0; + return true; } @@ -2811,7 +2817,7 @@ int do_init(int argc, char **argv) cli_get_options(argc,argv); char_set_defaults(); - char_config_read(CHAR_CONF_NAME); + char_config_read(CHAR_CONF_NAME, true); char_lan_config_read(LAN_CONF_NAME); char_set_default_sql(); char_sql_config_read(SQL_CONF_NAME); diff --git a/src/char/char.h b/src/char/char.h index 98c313b2b9..d748e72869 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -271,6 +271,7 @@ int char_make_new_char_sql(struct char_session_data* sd, char* name_, int str, i int char_msg_config_read(char *cfgName); const char* char_msg_txt(int msg_number); void char_do_final_msg(void); +bool char_config_read(const char* cfgName, bool normal); #endif /* _CHAR_SQL_H_ */ diff --git a/src/char/char_cnslif.c b/src/char/char_cnslif.c index 0a0763e877..2b2c58cd50 100644 --- a/src/char/char_cnslif.c +++ b/src/char/char_cnslif.c @@ -77,6 +77,10 @@ int cnslif_parse(const char* buf) } else if( strcmpi("alive", command) == 0 || strcmpi("status", command) == 0 ) ShowInfo(CL_CYAN"Console: "CL_BOLD"I'm Alive."CL_RESET"\n"); + else if( strcmpi("reloadconf", command) == 0 ) { + ShowInfo("Reloading config file \"%s\"\n", CHAR_CONF_NAME); + char_config_read(CHAR_CONF_NAME, false); + } } else if( strcmpi("ers_report", type) == 0 ){ ers_report(); @@ -85,6 +89,7 @@ int cnslif_parse(const char* buf) ShowInfo("Available commands:\n"); ShowInfo("\t server:shutdown => Stops the server.\n"); ShowInfo("\t server:alive => Checks if the server is running.\n"); + ShowInfo("\t server:reloadconf => Reload config file: \"%s\"\n", CHAR_CONF_NAME); ShowInfo("\t ers_report => Displays database usage.\n"); } diff --git a/src/login/login.c b/src/login/login.c index 09985ee7c8..fa968e1419 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -538,14 +538,15 @@ int login_lan_config_read(const char *lancfgName) { /** * Reading main configuration file. * @param cfgName: Name of the configuration (could be fullpath) - * @return 0:success, 1:failure (file not found|readable) + * @param normal: Config read normally when server started + * @return True:success, Fals:failure (file not found|readable) */ -int login_config_read(const char* cfgName) { +bool login_config_read(const char* cfgName, bool normal) { char line[1024], w1[32], w2[1024]; FILE* fp = fopen(cfgName, "r"); if (fp == NULL) { ShowError("Configuration file (%s) not found.\n", cfgName); - return 1; + return false; } while(fgets(line, sizeof(line), fp)) { if (line[0] == '/' && line[1] == '/') @@ -554,6 +555,21 @@ int login_config_read(const char* cfgName) { if (sscanf(line, "%31[^:]: %1023[^\r\n]", w1, w2) < 2) continue; + // Config that loaded only when server started, not by reloading config file + if (normal) { + if( !strcmpi(w1, "bind_ip") ) { + login_config.login_ip = host2ip(w2); + if( login_config.login_ip ) { + char ip_str[16]; + ShowStatus("Login server binding IP address : %s -> %s\n", w2, ip2str(login_config.login_ip, ip_str)); + } + } + else if( !strcmpi(w1, "login_port") ) + login_config.login_port = (uint16)atoi(w2); + else if(!strcmpi(w1, "console")) + login_config.console = (bool)config_switch(w2); + } + if(!strcmpi(w1,"timestamp_format")) safestrncpy(timestamp_format, w2, 20); else if(strcmpi(w1,"db_path")==0) @@ -565,16 +581,7 @@ int login_config_read(const char* cfgName) { if( msg_silent ) /* only bother if we actually have this enabled */ ShowInfo("Console Silent Setting: %d\n", atoi(w2)); } - else if( !strcmpi(w1, "bind_ip") ) { - login_config.login_ip = host2ip(w2); - if( login_config.login_ip ) { - char ip_str[16]; - ShowStatus("Login server binding IP address : %s -> %s\n", w2, ip2str(login_config.login_ip, ip_str)); - } - } - else if( !strcmpi(w1, "login_port") ) { - login_config.login_port = (uint16)atoi(w2); - } else if(!strcmpi(w1, "log_login")) + else if(!strcmpi(w1, "log_login")) login_config.log_login = (bool)config_switch(w2); else if(!strcmpi(w1, "new_account")) login_config.new_account_flag = (bool)config_switch(w2); @@ -594,8 +601,6 @@ int login_config_read(const char* cfgName) { login_config.min_group_id_to_connect = atoi(w2); else if(!strcmpi(w1, "date_format")) safestrncpy(login_config.date_format, w2, sizeof(login_config.date_format)); - else if(!strcmpi(w1, "console")) - login_config.console = (bool)config_switch(w2); else if(!strcmpi(w1, "allowed_regs")) //account flood protection system login_config.allowed_regs = atoi(w2); else if(!strcmpi(w1, "time_allowed")) @@ -657,8 +662,10 @@ int login_config_read(const char* cfgName) { } #endif else if(!strcmpi(w1, "import")) - login_config_read(w2); + login_config_read(w2, normal); else {// try the account engines + if (!normal) + continue; if (accounts && accounts->set_property(accounts, w1, w2)) continue; // try others @@ -668,7 +675,7 @@ int login_config_read(const char* cfgName) { } fclose(fp); ShowInfo("Finished reading %s.\n", cfgName); - return 0; + return true; } /** @@ -812,7 +819,7 @@ int do_init(int argc, char** argv) { login_set_defaults(); logcnslif_get_options(argc,argv); - login_config_read(login_config.loginconf_name); + login_config_read(login_config.loginconf_name, true); msg_config_read(login_config.msgconf_name); login_lan_config_read(login_config.lanconf_name); //end config diff --git a/src/login/login.h b/src/login/login.h index 79ce524497..a56c686574 100644 --- a/src/login/login.h +++ b/src/login/login.h @@ -121,6 +121,7 @@ extern struct Login_Config login_config; int login_msg_config_read(char *cfgName); const char* login_msg_txt(int msg_number); void login_do_final_msg(void); +bool login_config_read(const char* cfgName, bool normal); /// Online User Database [Wizputer] struct online_login_data { diff --git a/src/login/logincnslif.c b/src/login/logincnslif.c index f91c8a529d..278923d03f 100644 --- a/src/login/logincnslif.c +++ b/src/login/logincnslif.c @@ -124,6 +124,10 @@ int cnslif_parse(const char* buf){ } else if( strcmpi("alive", command) == 0 || strcmpi("status", command) == 0 ) ShowInfo(CL_CYAN"Console: "CL_BOLD"I'm Alive."CL_RESET"\n"); + else if( strcmpi("reloadconf", command) == 0 ) { + ShowInfo("Reloading config file \"%s\"\n", login_config.loginconf_name); + login_config_read(login_config.loginconf_name, false); + } } if( strcmpi("create",type) == 0 ) { @@ -151,6 +155,7 @@ int cnslif_parse(const char* buf){ ShowInfo("Available commands:\n"); ShowInfo("\t server:shutdown => Stops the server.\n"); ShowInfo("\t server:alive => Checks if the server is running.\n"); + ShowInfo("\t server:reloadconf => Reload config file: \"%s\"\n", login_config.loginconf_name); ShowInfo("\t ers_report => Displays database usage.\n"); ShowInfo("\t create: => Creates a new account.\n"); }