From cd7e6b14fae54b023076f1338952a4a100a99648 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Tue, 20 Mar 2012 23:31:25 +0200 Subject: write log only in debug mode --- server/server/config.cpp | 36 ++++-- server/server/main.cpp | 324 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 243 insertions(+), 117 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index 4d9f960..ac0f95e 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -155,12 +155,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(config)), std::istreambuf_iterator()); 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 +198,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(config)), std::istreambuf_iterator()); 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 +262,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(config)), std::istreambuf_iterator()); 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 +349,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(config)), std::istreambuf_iterator()); 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 +430,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(config)), std::istreambuf_iterator()); 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 +465,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(config)), std::istreambuf_iterator()); 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; diff --git a/server/server/main.cpp b/server/server/main.cpp index 2fc1b18..4ac3c83 100755 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -44,9 +44,12 @@ session::~session() killer->interrupt(); delete killer; } - logger->lock(); - *logger << time_str() << ": Connection with ip "<< remote_ip << " session " << this_sid << " closed\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str() << ": Connection with ip "<< remote_ip << " session " << this_sid << " closed\n"; + logger->unlock(); + } critical_mutex.unlock(); } @@ -59,9 +62,12 @@ void session::start() { remote_ip = socket_.lowest_layer().remote_endpoint().address().to_string(); killer = new boost::thread(boost::bind(session::cancel_thread, this, cfg->conn_time())); - logger->lock(); - *logger << time_str() << ": New incomming connection from "<< remote_ip << " session " << this_sid << "\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str() << ": New incomming connection from "<< remote_ip << " session " << this_sid << "\n"; + logger->unlock(); + } std::list* blacklist = server_->get_blacklist(); std::list* list = server_->get_connections_list(); if(!blacklist->empty()) @@ -71,9 +77,12 @@ void session::start() { if(*i == remote_ip) { - logger->lock(); - *logger << time_str() << ": session " << this_sid << " ip " << remote_ip << " is in blacklist\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str() << ": session " << this_sid << " ip " << remote_ip << " is in blacklist\n"; + logger->unlock(); + } blacklisted = true; break; } @@ -172,14 +181,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved config request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": config request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": config request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -287,9 +302,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": config request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": config request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -307,14 +325,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved proxy list request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": proxy list request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": proxy list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -413,9 +437,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": proxy list request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": proxy list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -433,14 +460,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved static proxy list request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": static proxy list request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": static proxy list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -531,9 +564,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": static proxy list request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": static proxy list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -551,14 +587,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved firewall list request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": firewall list request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": firewall list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -576,9 +618,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": firewall list request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": firewall list request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -596,14 +641,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved existing files request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": existing files request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": existing files request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -633,9 +684,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": existing files request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": existing files request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -653,14 +707,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved files to del request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": files to del request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": files to del request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -678,9 +738,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": files to del request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": files to del request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -698,14 +761,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved client version request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": client version request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": client version request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -717,9 +786,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": client version from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": client version from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -737,14 +809,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved client binary request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": client binary request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": client binary request from "<unlock(); + } std::ifstream file; std::string source = boost::filesystem::initial_path().string(); source += "/client.exe"; @@ -773,9 +851,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": failed to open file "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": failed to open file "<unlock(); + } break; } @@ -789,9 +870,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": client binary request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": client binary request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -809,14 +893,20 @@ void session::proto_parser(std::vector& data) delete this; break; } - logger->lock(); - *logger<< time_str() << ": recieved file upload request from "<unlock(); - if(!blacklisted) + if(cfg->debug()) { logger->lock(); - *logger<< time_str() << ": file upload request from "<unlock(); + } + if(!blacklisted) + { + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": file upload request from "<unlock(); + } it++; std::string filename; for(;;++it) @@ -832,9 +922,12 @@ void session::proto_parser(std::vector& data) std::list::iterator uit = std::find(cfg->get_upload_list()->begin(), cfg->get_upload_list()->end(), config::s_i(filename, 1)); if(uit == cfg->get_upload_list()->end()) { - logger->lock(); - *logger<< time_str() << ": file "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": file "<unlock(); + } break; } std::ifstream file; @@ -863,9 +956,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": failed to open file "<source<<" , request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": failed to open file "<source<<" , request from "<unlock(); + } break; } @@ -879,9 +975,12 @@ void session::proto_parser(std::vector& data) } else { - logger->lock(); - *logger<< time_str() << ": file upload request from "<unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger<< time_str() << ": file upload request from "<unlock(); + } std::vector data; data.push_back(0x13); data.push_back(0x13); @@ -985,9 +1084,12 @@ void session::handle_read(const boost::system::error_code& error, size_t bytes_t } catch (std::exception& e) { - logger->lock(); - *logger << time_str() << ": read handler exception: " << e.what() << "\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str() << ": read handler exception: " << e.what() << "\n"; + logger->unlock(); + } } } //server @@ -1001,20 +1103,29 @@ server::server(boost::asio::io_service& io_service, unsigned short port) : io_se tmp_path = b_path; tmp_path.append("/ca.crt"); context_.load_verify_file(tmp_path, err); - logger->lock(); - *logger << time_str()<<": Openning verify cert: " << tmp_path << " " << err.message()<<"\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str()<<": Openning verify cert: " << tmp_path << " " << err.message()<<"\n"; + logger->unlock(); + } tmp_path = b_path; tmp_path.append("/server.crt"); context_.use_certificate_file(tmp_path, boost::asio::ssl::context::pem, err); - logger->lock(); - *logger << time_str()<<": Openning server cert file: " << tmp_path << " " << err.message()<<"\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str()<<": Openning server cert file: " << tmp_path << " " << err.message()<<"\n"; + logger->unlock(); + } tmp_path.replace(tmp_path.length() - 3, 3, "key"); context_.use_private_key_file(tmp_path, boost::asio::ssl::context::pem, err); - logger->lock(); - *logger << time_str()<<": Openning server key file: " << tmp_path << " " << err.message()<<"\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str()<<": Openning server key file: " << tmp_path << " " << err.message()<<"\n"; + logger->unlock(); + } flood_chek = new boost::thread(boost::bind(flood_check_thread, &conns, &blacklist)); blacklist_clean = new boost::thread(boost::bind(blacklist_clean_thread, &blacklist)); @@ -1239,9 +1350,12 @@ int main(int argc, char* argv[]) } catch (std::exception& e) { - logger->lock(); - *logger << time_str() << ": main thread exception: " << e.what() << " (this is bad)\n"; - logger->unlock(); + if(cfg->debug()) + { + logger->lock(); + *logger << time_str() << ": main thread exception: " << e.what() << " (this is bad)\n"; + logger->unlock(); + } } boost::this_thread::sleep(boost::posix_time::seconds(2)); } -- cgit v1.2.3 From d14df4141a0a881875ae5b36b481508612469fde Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Wed, 21 Mar 2012 19:39:05 +0200 Subject: send exactly content of cli_config without defaults, with less verification --- server/server/config.cpp | 66 +++++++++++++++------------------------- server/server/config.h | 23 ++------------ server/server/main.cpp | 79 ++++++------------------------------------------ 3 files changed, 36 insertions(+), 132 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index ac0f95e..ad5e3e0 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -75,18 +75,31 @@ 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(config)), std::istreambuf_iterator()); + config.close(); + if(!cfg_str.empty()) { - std::string cfg_str((std::istreambuf_iterator(config)), std::istreambuf_iterator()); - 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); + } } +/* 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.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); */ } config::config(const char *pth): cfg_reload_thr(NULL), speed_test_thr(NULL) @@ -551,40 +564,11 @@ bool config::ignore_ssl_errors() return vars.ignore_ssl_errors; } -const int config::c_cfg_upd_int() +std::list* config::cli_cfg() { - return cvars.config_update_interval; + return &cvars; } -const int config::c_cli_upd_int() -{ - return cvars.client_update_interval; -} - -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; diff --git a/server/server/config.h b/server/server/config.h index 5f2ea40..318831e 100755 --- a/server/server/config.h +++ b/server/server/config.h @@ -120,13 +120,7 @@ public: const int check_interval(); const int debug(); const int dos_conn_count(); - const int c_cfg_upd_int(); - const int c_cli_upd_int(); - bool c_speed_visibility(); - const std::string& c_welcome_msg(); - const std::string& c_cfg_download_msg(); - const std::string& c_top_text(); - const std::string& c_bottom_text(); + std::list* cli_cfg(); void load_vars(); void load_cvars(); void load_proxy_list(char* pth = NULL); @@ -167,26 +161,13 @@ private: speed_test_file_url = "http://localhost/speed.test"; } }; - struct cli_cfg_data - { - int config_update_interval, client_update_interval; - std::string welcome_msg, cfg_downloaded_msg, top_text, bottom_text; - bool speed_visibility; - cli_cfg_data() - { - config_update_interval = 300; - client_update_interval = 60000; - speed_visibility = false; - } - }; std::string config_path, cli_config_path; const int get_int(const std::string& data, const char* var, int default_); const std::string get_string(const std::string& data, const char* var, const std::string& default_); cfg_data vars; - cli_cfg_data cvars; std::list proxy_list; std::list static_proxy_list; - std::list firewall_list, deleted_list; + std::list firewall_list, deleted_list, cvars; std::list upload_list; std::list servers_list; boost::thread *cfg_reload_thr, *speed_test_thr; diff --git a/server/server/main.cpp b/server/server/main.cpp index 4ac3c83..96af597 100755 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -224,78 +224,17 @@ void session::proto_parser(std::vector& data) data.push_back('\n'); } } - std::string s = "config_update_interval="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - char buf[10]; - snprintf(buf, 9, "%d", cfg->c_cfg_upd_int()); - int len = strlen(buf); - for(int i = 0; i < len; ++i) - data.push_back(buf[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); - s = "client_update_interval="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - snprintf(buf, 9, "%d", cfg->c_cli_upd_int()); - len = strlen(buf); - for(int i = 0; i < len; ++i) - data.push_back(buf[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); - if(!cfg->c_welcome_msg().empty()) + if(!cfg->cli_cfg()->empty()) { - s = "welcome_msg="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - for(int i = 0; i < cfg->c_welcome_msg().size(); ++i) - data.push_back(cfg->c_welcome_msg()[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); - } - if(!cfg->c_cfg_download_msg().empty()) - { - s = "config_downloaded_msg="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - for(int i = 0; i < cfg->c_cfg_download_msg().size(); ++i) - data.push_back(cfg->c_cfg_download_msg()[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); - } - if(!cfg->c_top_text().empty()) - { - s = "top_panel_text="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - for(int i = 0; i < cfg->c_top_text().size(); ++i) - data.push_back(cfg->c_top_text()[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); - } - if(!cfg->c_bottom_text().empty()) - { - s = "bottom_panel_text="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - for(int i = 0; i < cfg->c_bottom_text().size(); ++i) - data.push_back(cfg->c_bottom_text()[i]); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); + for(std::list::iterator i = cfg->cli_cfg()->begin(), end = cfg->cli_cfg()->end(); i != end; ++i) + { + for(int ii = 0; ii < i->size(); ++ii) + data.push_back((*i)[ii]); + data.push_back(';'); + data.push_back('\r'); + data.push_back('\n'); + } } - s = "speed_visibility="; - for(int i = 0; i < s.size(); ++i) - data.push_back(s[i]); - data.push_back(cfg->c_speed_visibility()?'1':'0'); - data.push_back(';'); - data.push_back('\r'); - data.push_back('\n'); data.push_back(0x14); data.push_back(0x14); write_w_response(data); -- cgit v1.2.3 From 3c4dd23396553bb8cadb668ebf9624be335b3019 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 22 Mar 2012 10:12:23 +0200 Subject: fixed static_proxy_entry class --- server/server/config.cpp | 6 ------ server/server/config.h | 6 ++---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index ad5e3e0..cf218f4 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -94,12 +94,6 @@ void config::load_cvars() p2 = cfg_str.find(';', p1); } } -/* 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.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); */ } config::config(const char *pth): cfg_reload_thr(NULL), speed_test_thr(NULL) diff --git a/server/server/config.h b/server/server/config.h index 318831e..edf6d1c 100755 --- a/server/server/config.h +++ b/server/server/config.h @@ -37,9 +37,7 @@ public: struct static_proxy_entry : public proxy_entry_base { - int port, position; - size_t speed; - std::list speed_list; + int position; std::string label; static_proxy_entry(): position(0) {} @@ -158,7 +156,7 @@ private: debug = 0; dos_conn_count = 200; bind_ip = "0.0.0.0"; - speed_test_file_url = "http://localhost/speed.test"; + speed_test_file_url = "http://google.com"; } }; std::string config_path, cli_config_path; -- cgit v1.2.3 From 1e094bb1109bf1fa83d9feeb2f91b99be8a6839f Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 22 Mar 2012 17:12:55 +0200 Subject: used milliseconds instead of seconds for speed calculations dns via proxy (with rollback to system proxy) --- server/server/config.cpp | 2 +- server/server/speedtest.cpp | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index cf218f4..3c7a679 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -29,7 +29,7 @@ void speed_test_thread_func(int check_interval, std::list* for(std::list::iterator i = static_proxy_list->begin(), end = static_proxy_list->end(); i != end; ++i) { speedtest t(test_url); - //*l<host<<" "<<(int)t.test(&(*i))<<"\n"; +// *l<host<<" "<<(int)t.test(&(*i))<<"\n"; t.test(&(*i)); boost::this_thread::sleep(boost::posix_time::seconds(1)); } diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index 21fe21c..ecfec2e 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -40,10 +40,10 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY); //maybe required for https proxy ? break; case config::SOCKS4: - type = CURLPROXY_SOCKS4; + type = CURLPROXY_SOCKS4A; break; case config::SOCKS5: - type = CURLPROXY_SOCKS5; + type = CURLPROXY_SOCKS5_HOSTNAME; break; } curl_easy_setopt(curl, CURLOPT_PROXYTYPE, type); @@ -51,12 +51,23 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk); curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-speedtest/0.1"); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); + //curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1); //require latest curl (.25) - time_t start = time(0); + boost::posix_time::ptime _t = boost::posix_time::second_clock::local_time(); - CURLcode error = curl_easy_perform(curl); + CURLcode error = CURL_LAST; + for(int i = 0; error && (i < 3); i++) + { + if(type == CURLPROXY_SOCKS5_HOSTNAME && i > 1) + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + error = curl_easy_perform(curl); + } + + boost::posix_time::ptime _t2 = boost::posix_time::second_clock::local_time(); + + boost::posix_time::time_duration td = _t2 - _t; - double t = time(0) - start; + double t = td.total_milliseconds(); curl_easy_cleanup(curl); @@ -67,7 +78,7 @@ size_t speedtest::test(config::proxy_entry_base *p) if(chunk.size) { if(t) - speed = (double)chunk.size/t; + speed = (double)(chunk.size*1000)/t; else speed = chunk.size; } -- cgit v1.2.3 From bff6edc0e10cdf27dae170403f6a6badf9b8d1c0 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 22 Mar 2012 17:15:40 +0200 Subject: same as in previous commit workaround for socks4 --- server/server/speedtest.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index ecfec2e..8303afc 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -58,8 +58,13 @@ size_t speedtest::test(config::proxy_entry_base *p) CURLcode error = CURL_LAST; for(int i = 0; error && (i < 3); i++) { - if(type == CURLPROXY_SOCKS5_HOSTNAME && i > 1) - curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + if(i > 1) + { + if(type == CURLPROXY_SOCKS5_HOSTNAME) + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + if(type == CURLPROXY_SOCKS4A) + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A); + } error = curl_easy_perform(curl); } -- cgit v1.2.3 From a85d44e189833c5b644cbd174036b3041dfe2a72 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Thu, 22 Mar 2012 19:42:45 +0200 Subject: more tghread safety proxy speed in log --- server/server/config.cpp | 24 +++++++++++++++++------- server/server/config.h | 4 ++++ server/server/main.cpp | 34 ++++++++++++++++++++++------------ server/server/main.h | 20 ++++++++++++++++---- 4 files changed, 59 insertions(+), 23 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index 3c7a679..890c369 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* proxy_list, std::list *static_proxy_list, const std::string& test_url, boost::mutex *m) +void speed_test_thread_func(config *cfg, int check_interval, std::list* proxy_list, std::list *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::iterator i = static_proxy_list->begin(), end = static_proxy_list->end(); i != end; ++i) { speedtest t(test_url); -// *l<host<<" "<<(int)t.test(&(*i))<<"\n"; - t.test(&(*i)); + int sp = (int)t.test(&(*i)); + if(cfg->debug()) + { + 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() << ": "<host<<":"<unlock(); + } boost::this_thread::sleep(boost::posix_time::seconds(1)); } /* for(std::list::iterator i = proxy_list->begin(), end = proxy_list->end(); i != end; ++i) @@ -120,7 +130,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_) { diff --git a/server/server/config.h b/server/server/config.h index edf6d1c..f19cae1 100755 --- a/server/server/config.h +++ b/server/server/config.h @@ -139,6 +139,10 @@ public: std::list *get_deleted_list(); std::list *get_upload_list(); std::list *get_server_list(); + boost::mutex &get_lists_mutex() + { + return lists_mutex; + } private: struct cfg_data { diff --git a/server/server/main.cpp b/server/server/main.cpp index 96af597..38ee904 100755 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -4,14 +4,11 @@ -logtofile *logger, *dos_logger; -config *cfg; - - +logtofile *logger = NULL, *dos_logger = NULL; //session -session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& context, server *serv) : socket_(io_service, context), io_service_(io_service) +session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& context, server *serv) : socket_(io_service, context), io_service_(io_service), lists_mutex(serv->get_lists_mutex()), cfg(serv->get_config()) { this_sid = get_random(8); server_ = serv; @@ -199,6 +196,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x01); + lists_mutex.lock(); if(!cfg->get_server_list()->empty()) { for(std::list::iterator i = cfg->get_server_list()->begin(), end = cfg->get_server_list()->end(); i != end; ++i) @@ -235,6 +233,7 @@ void session::proto_parser(std::vector& data) data.push_back('\n'); } } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -282,6 +281,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x02); + lists_mutex.lock(); for(std::list::iterator it = cfg->get_proxy_list()->begin(), end = cfg->get_proxy_list()->end(); it != end; ++it) { switch(it->type) @@ -370,6 +370,7 @@ void session::proto_parser(std::vector& data) data.push_back('"'); data.push_back(';'); } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -417,6 +418,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x03); + lists_mutex.lock(); for(std::list::iterator it = cfg->get_static_proxy_list()->begin(), end = cfg->get_static_proxy_list()->end(); it != end; ++it) { switch(it->type) @@ -497,6 +499,7 @@ void session::proto_parser(std::vector& data) //data.push_back('0'); //add speed here data.push_back(';'); } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -544,6 +547,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x04); + lists_mutex.lock(); for(std::list::iterator it = cfg->get_firewall_list()->begin(), end = cfg->get_firewall_list()->end(); it != end; ++it) { if(!(it->empty())) @@ -551,6 +555,7 @@ void session::proto_parser(std::vector& data) data.push_back((*it)[i]); data.push_back(';'); } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -598,6 +603,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x05); + lists_mutex.lock(); for(std::list::iterator it = cfg->get_upload_list()->begin(), end = cfg->get_upload_list()->end(); it != end; ++it) { /*if(!(it->source.empty())) @@ -617,6 +623,7 @@ void session::proto_parser(std::vector& data) data.push_back('0'); data.push_back(';'); } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -664,6 +671,7 @@ void session::proto_parser(std::vector& data) data.push_back(0x13); data.push_back(0x13); data.push_back(0x06); + lists_mutex.lock(); for(std::list::iterator it = cfg->get_deleted_list()->begin(), end = cfg->get_deleted_list()->end(); it != end; ++it) { if(!(it->empty())) @@ -671,6 +679,7 @@ void session::proto_parser(std::vector& data) data.push_back((*it)[i]); data.push_back(';'); } + lists_mutex.unlock(); data.push_back(0x14); data.push_back(0x14); write_w_response(data); @@ -934,7 +943,6 @@ void session::proto_parser(std::vector& data) break; } } - //ok, our data found } } } @@ -1033,7 +1041,8 @@ void session::handle_read(const boost::system::error_code& error, size_t bytes_t } //server -server::server(boost::asio::io_service& io_service, unsigned short port) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(cfg->bind_ip()), port)), context_(io_service, boost::asio::ssl::context::sslv3_server) +server::server(boost::asio::io_service& io_service, unsigned short port, config *c) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(c->bind_ip()), port)), +context_(io_service, boost::asio::ssl::context::sslv3_server), lists_mutex(c->get_lists_mutex()), cfg(c) { boost::system::error_code err; std::string b_path = boost::filesystem::initial_path().string(), tmp_path; @@ -1065,8 +1074,8 @@ server::server(boost::asio::io_service& io_service, unsigned short port) : io_se *logger << time_str()<<": Openning server key file: " << tmp_path << " " << err.message()<<"\n"; logger->unlock(); } - flood_chek = new boost::thread(boost::bind(flood_check_thread, &conns, &blacklist)); - blacklist_clean = new boost::thread(boost::bind(blacklist_clean_thread, &blacklist)); + flood_chek = new boost::thread(boost::bind(flood_check_thread, &conns, &blacklist, cfg)); + blacklist_clean = new boost::thread(boost::bind(blacklist_clean_thread, &blacklist, cfg)); session* new_session = new session(io_service_, context_, this); acceptor_.async_accept(new_session->socket(), @@ -1107,7 +1116,7 @@ void server::connections_increment(std::string ip, const std::string& l_sid) } } } -void server::flood_check_thread(std::list *list, std::list *blacklist) //sort and clean blacklist ? +void server::flood_check_thread(std::list *list, std::list *blacklist, config *cfg) //sort and clean blacklist ? { if(cfg->debug()) { @@ -1162,7 +1171,7 @@ void server::flood_check_thread(std::list *list, std::list *list) +void server::blacklist_clean_thread(std::list *list, config *cfg) { if(cfg->debug()) { @@ -1260,6 +1269,7 @@ int main(int argc, char* argv[]) std::cout<<"succesfully started\n"; #endif + config *cfg = NULL; if (!cfg_path.empty()) cfg = new config(cfg_path.c_str()); else @@ -1283,7 +1293,7 @@ int main(int argc, char* argv[]) boost::asio::io_service io_service; - server s(io_service, 13666); + server s(io_service, 13666, cfg); io_service.run(); } diff --git a/server/server/main.h b/server/server/main.h index 1ee3aca..0ebd349 100644 --- a/server/server/main.h +++ b/server/server/main.h @@ -15,6 +15,7 @@ const byte data_end [] = {0x14, 0x14}; class session; class server; +class config; class session { @@ -58,7 +59,8 @@ private: server *server_; bool blacklisted, canceled; boost::thread *killer; - boost::mutex critical_mutex; + boost::mutex critical_mutex, &lists_mutex; + config *cfg; }; struct conn_count { @@ -89,15 +91,23 @@ struct conn_count class server { public: - server(boost::asio::io_service& io_service, unsigned short port); + server(boost::asio::io_service& io_service, unsigned short port, config *cfg); ~server(); std::string get_password() const; void handle_accept(session* new_session, const boost::system::error_code& error); void connections_increment(std::string ip, const std::string& l_sid); - static void flood_check_thread(std::list *list, std::list *blacklist); - static void blacklist_clean_thread(std::list *list); + static void flood_check_thread(std::list *list, std::list *blacklist, config *cfg); + static void blacklist_clean_thread(std::list *list, config *cfg); std::list* get_blacklist(); std::list* get_connections_list(); + boost::mutex &get_lists_mutex() + { + return lists_mutex; + } + config *get_config() + { + return cfg; + } private: boost::asio::io_service& io_service_; boost::asio::ip::tcp::acceptor acceptor_; @@ -105,6 +115,8 @@ private: std::list conns; std::list blacklist; boost::thread *flood_chek, *blacklist_clean; + boost::mutex &lists_mutex; + config *cfg; }; #endif -- cgit v1.2.3 From 8b0b635491dd318baab5d93575eed9cda2b3c9fd Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Fri, 23 Mar 2012 16:27:25 +0200 Subject: "LogSpeed=" option --- server/server/config.cpp | 8 +++++++- server/server/config.h | 21 ++++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/server/server/config.cpp b/server/server/config.cpp index 890c369..6d945d3 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -31,7 +31,7 @@ void speed_test_thread_func(config *cfg, int check_interval, std::listdebug()) + if(cfg->log_speed()) { char port[10]; snprintf(port, 9, "%d", i->port); @@ -71,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=", ""); @@ -568,6 +569,11 @@ bool config::ignore_ssl_errors() return vars.ignore_ssl_errors; } +bool config::log_speed() +{ + return vars.log_speed; +} + std::list* config::cli_cfg() { return &cvars; diff --git a/server/server/config.h b/server/server/config.h index f19cae1..4afa63d 100755 --- a/server/server/config.h +++ b/server/server/config.h @@ -128,6 +128,7 @@ public: void load_deleted_list(char* pth = NULL); void load_servers_list(char* pth = NULL); bool ignore_ssl_errors(); + bool log_speed(); const std::string& bind_ip(); const std::string& log_path(); const std::string& proxifier_path(); @@ -146,22 +147,12 @@ public: private: struct cfg_data { - int ban_time, conn_count, check_interval, debug, dos_conn_count, conn_time, config_reload_interval, proxy_check_interval; - bool ignore_ssl_errors; + int ban_time, conn_count, check_interval, dos_conn_count, conn_time, config_reload_interval, proxy_check_interval; + bool ignore_ssl_errors, log_speed, debug; std::string log_path, bind_ip, dos_log_path, speed_test_file_url; - cfg_data() - { - ignore_ssl_errors = false; - ban_time = conn_time = 60; - config_reload_interval = 600; - proxy_check_interval = 3600; - conn_count = 30; - check_interval = 30; - debug = 0; - dos_conn_count = 200; - bind_ip = "0.0.0.0"; - speed_test_file_url = "http://google.com"; - } + cfg_data(): ban_time(60), check_interval(30), dos_conn_count(200), conn_time(60), config_reload_interval(600), proxy_check_interval(3600), + ignore_ssl_errors(false), log_speed(false), debug(false) + {} }; std::string config_path, cli_config_path; const int get_int(const std::string& data, const char* var, int default_); -- cgit v1.2.3