diff options
-rwxr-xr-x | server/server/config.cpp | 31 | ||||
-rwxr-xr-x | server/server/config.h | 2 |
2 files changed, 29 insertions, 4 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp index b3e494a..0114c6f 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -379,12 +379,11 @@ void config::load_static_proxy_list(char *pth) 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()) { + std::list<static_proxy_entry> tmp_list; std::string::size_type p1 = 0, p2 = 0, l = 1; if(cfg_str.rfind("\r\n") != std::string::npos) l = 2; @@ -442,10 +441,36 @@ void config::load_static_proxy_list(char *pth) position = atoi(line.substr(lp1, lp2-lp1).c_str()); } if(type != HTTP) - static_proxy_list.push_back(static_proxy_entry(login, password, host, port, label, position, type)); + tmp_list.push_back(static_proxy_entry(login, password, host, port, label, position, type)); p2 = cfg_str.find(';', p1); } + if(!tmp_list.empty()) + { + if(!static_proxy_list.empty()) + { + std::list<static_proxy_entry> clean_list; + for(std::list<static_proxy_entry>::iterator it = static_proxy_list.begin(), end = static_proxy_list.end(); it != end; ++it) + { + if(std::find(tmp_list.begin(), tmp_list.end(), *it) == tmp_list.end()) + clean_list.push_back(*it); + } + if(!clean_list.empty()) + { + for(std::list<static_proxy_entry>::iterator it = clean_list.begin(), end = clean_list.end(); it != end; ++it) + static_proxy_list.remove(*it); + } + for(std::list<static_proxy_entry>::iterator it = tmp_list.begin(), end = tmp_list.end(); it != end; ++it) + { + if(std::find(static_proxy_list.begin(), static_proxy_list.end(), *it) == static_proxy_list.end()) + static_proxy_list.push_back(*it); + } + } + else + static_proxy_list = tmp_list; + } } + else if(!static_proxy_list.empty()) + static_proxy_list.clear(); } void config::load_firewall_list(char* pth) { diff --git a/server/server/config.h b/server/server/config.h index 1069bd1..1170710 100755 --- a/server/server/config.h +++ b/server/server/config.h @@ -3,7 +3,7 @@ #include "headers.h" - +extern logtofile *logger; class config { |