diff options
Diffstat (limited to 'server/server/config.cpp')
-rwxr-xr-x | server/server/config.cpp | 120 |
1 files changed, 63 insertions, 57 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp index 4d9f960..6d945d3 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -1,5 +1,7 @@ #include "headers.h" +extern logtofile *logger; + void reload_config_thread_func(config *cfg, boost::mutex *m) { while(!boost::this_thread::interruption_requested()) @@ -7,30 +9,38 @@ void reload_config_thread_func(config *cfg, boost::mutex *m) boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval())); if(boost::this_thread::interruption_requested()) return; + m->lock(); cfg->load_vars(); cfg->load_cvars(); - m->lock(); cfg->load_proxy_list(); cfg->load_static_proxy_list(); - m->unlock(); cfg->load_firewall_list(); cfg->load_deleted_list(); cfg->load_upload_list(); cfg->load_servers_list(); + m->unlock(); } } -void speed_test_thread_func(int check_interval, std::list<config::proxy_entry>* proxy_list, std::list<config::static_proxy_entry> *static_proxy_list, const std::string& test_url, boost::mutex *m) +void speed_test_thread_func(config *cfg, int check_interval, std::list<config::proxy_entry>* proxy_list, std::list<config::static_proxy_entry> *static_proxy_list, const std::string& test_url, boost::mutex *m) { while(!boost::this_thread::interruption_requested()) { m->lock(); -// logtofile *l = new logtofile(std::string(boost::filesystem::initial_path().string() + "/proxy_test_info").c_str()); for(std::list<config::static_proxy_entry>::iterator i = static_proxy_list->begin(), end = static_proxy_list->end(); i != end; ++i) { speedtest t(test_url); - //*l<<i->host<<" "<<(int)t.test(&(*i))<<"\n"; - t.test(&(*i)); + int sp = (int)t.test(&(*i)); + if(cfg->log_speed()) + { + char port[10]; + snprintf(port, 9, "%d", i->port); + while(!logger) + boost::this_thread::sleep(boost::posix_time::milliseconds(200)); + logger->lock(); + *logger << time_str() << ": "<<i->host<<":"<<port<<"\tspeed: "<<sp<<"b/s\n"; + logger->unlock(); + } boost::this_thread::sleep(boost::posix_time::seconds(1)); } /* for(std::list<config::proxy_entry>::iterator i = proxy_list->begin(), end = proxy_list->end(); i != end; ++i) @@ -61,6 +71,7 @@ void config::load_vars() vars.conn_time = get_int(cfg_str, "ConnectionTimeOut=", 60); vars.dos_conn_count = get_int(cfg_str, "DosConnectionCount=", 100); vars.debug = get_int(cfg_str, "Debug=", 0); + vars.log_speed = get_int(cfg_str, "LogSpeed=", 0); vars.bind_ip = get_string(cfg_str, "BindAddress=", "0.0.0.0"); vars.log_path = get_string(cfg_str, "LogPath=", ""); vars.dos_log_path = get_string(cfg_str, "DosLogPath=", ""); @@ -75,17 +86,24 @@ void config::load_cvars() { std::ifstream config; config.open(cli_config_path.c_str(), std::fstream::in); - if(config.is_open()) + if(!config.is_open()) + return; + if(!cvars.empty()) + cvars.clear(); + std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); + config.close(); + if(!cfg_str.empty()) { - std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); - config.close(); - cvars.config_update_interval = get_int(cfg_str, "config_update_interval=", 300); - cvars.client_update_interval = get_int(cfg_str, "client_update_interval=", 60000); - cvars.welcome_msg = get_string(cfg_str, "welcome_msg=", ""); - cvars.cfg_downloaded_msg = get_string(cfg_str, "config_downloaded_msg=", ""); - cvars.top_text = get_string(cfg_str, "top_panel_text=", ""); - cvars.bottom_text = get_string(cfg_str, "bottom_panel_text=", ""); - cvars.speed_visibility = get_int(cfg_str, "speed_visibility=", 1); + std::string::size_type p1 = 0, p2 = 0, l = 1; + if(cfg_str.find("\r\n") != std::string::npos) + l = 2; + p2 = cfg_str.find(';'); + while(p2 != std::string::npos) + { + cvars.push_back(cfg_str.substr(p1, p2-p1)); + p1 = p2+l+1; + p2 = cfg_str.find(';', p1); + } } } @@ -113,7 +131,7 @@ config::config(const char *pth): cfg_reload_thr(NULL), speed_test_thr(NULL) load_upload_list(); load_servers_list(); cfg_reload_thr = new boost::thread(boost::bind(reload_config_thread_func, this, &lists_mutex)); - speed_test_thr = new boost::thread(boost::bind(speed_test_thread_func, vars.proxy_check_interval, &proxy_list, &static_proxy_list, vars.speed_test_file_url, &lists_mutex)); + speed_test_thr = new boost::thread(boost::bind(speed_test_thread_func, this, vars.proxy_check_interval, &proxy_list, &static_proxy_list, vars.speed_test_file_url, &lists_mutex)); } const int config::get_int(const std::string& data, const char* var, int default_) { @@ -155,12 +173,14 @@ void config::load_servers_list(char* pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!servers_list.empty()) + servers_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!servers_list.empty()) - servers_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.find("\r\n") != std::string::npos) l = 2; @@ -196,12 +216,14 @@ void config::load_upload_list(char *pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!upload_list.empty()) + upload_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!upload_list.empty()) - upload_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.find("\r\n") != std::string::npos) l = 2; @@ -258,12 +280,14 @@ void config::load_proxy_list(char *pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!proxy_list.empty()) + proxy_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!proxy_list.empty()) - proxy_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.rfind("\r\n") != std::string::npos) l = 2; @@ -343,12 +367,14 @@ void config::load_static_proxy_list(char *pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!static_proxy_list.empty()) + static_proxy_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!static_proxy_list.empty()) - static_proxy_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.rfind("\r\n") != std::string::npos) l = 2; @@ -422,12 +448,14 @@ void config::load_firewall_list(char* pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!firewall_list.empty()) + firewall_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!firewall_list.empty()) - firewall_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; // if(cfg_str.find("\r\n") != std::string::npos) // l = 2; @@ -455,12 +483,14 @@ void config::load_deleted_list(char* pth) } else config.open(pth, std::fstream::in); + if(!config.is_open()) + return; + if(!deleted_list.empty()) + deleted_list.clear(); std::string cfg_str((std::istreambuf_iterator<char>(config)), std::istreambuf_iterator<char>()); config.close(); if(!cfg_str.empty()) { - if(!deleted_list.empty()) - deleted_list.clear(); std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.find("\r\n") != std::string::npos) l = 2; @@ -539,40 +569,16 @@ bool config::ignore_ssl_errors() return vars.ignore_ssl_errors; } -const int config::c_cfg_upd_int() +bool config::log_speed() { - return cvars.config_update_interval; + return vars.log_speed; } -const int config::c_cli_upd_int() +std::list<std::string>* config::cli_cfg() { - return cvars.client_update_interval; + return &cvars; } -bool config::c_speed_visibility() -{ - return cvars.speed_visibility; -} - -const std::string& config::c_welcome_msg() -{ - return cvars.welcome_msg; -} - -const std::string& config::c_cfg_download_msg() -{ - return cvars.cfg_downloaded_msg; -} - -const std::string& config::c_top_text() -{ - return cvars.top_text; -} - -const std::string& config::c_bottom_text() -{ - return cvars.bottom_text; -} const std::string& config::speed_test_file_url() { return vars.speed_test_file_url; |