summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-03-24 22:56:21 +0200
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-03-24 22:56:21 +0200
commitfc68a17bda76f7ffe8493bb8f9593631b9d05ba1 (patch)
tree000a28d9f53de0949c263c6d90ac054b4271fda1
parent044bcea69275ccdeca2a7e022a2203c9559e3aa9 (diff)
fixed ? speed problem
-rwxr-xr-xserver/server/config.cpp31
-rwxr-xr-xserver/server/config.h2
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
{