diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2012-03-24 20:39:49 +0200 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2012-03-24 20:39:49 +0200 |
commit | 7253d2141c17643f4805f26970e2824163dbc95b (patch) | |
tree | 6bbcbb149764d097d44def6dfaf9c31ba9f58d84 /server/server/speedtest.cpp | |
parent | 3faa907f6e8597ffae5b9f7db8567fe5fab8c9f6 (diff) |
some log in speedtest
some curl code optimisation (b0ris suggestion)
Diffstat (limited to 'server/server/speedtest.cpp')
-rw-r--r-- | server/server/speedtest.cpp | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index 8a2c289..4d17f66 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -1,18 +1,19 @@ #include "headers.h" +extern logtofile *logger; + size_t speedtest::curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp) //code from curl usage examples, may be slow { size_t realsize = size * nmemb; struct memory_struct *mem = (struct memory_struct *)userp; - mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); +/* mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory == NULL) { - /* out of memory! */ - } + } */ - memcpy(&(mem->memory[mem->size]), contents, realsize); +// memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; - mem->memory[mem->size] = 0; +// mem->memory[mem->size] = 0; return realsize; } @@ -57,14 +58,14 @@ size_t speedtest::test(config::proxy_entry_base *p) boost::posix_time::ptime _t = boost::posix_time::second_clock::local_time(); CURLcode error = CURL_LAST; - for(int i = 0; error && (i < 3); i++) + for(int i = 0; error && (i < 4); i++) { 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); + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); } error = curl_easy_perform(curl); } @@ -77,7 +78,12 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_cleanup(curl); - free(chunk.memory); + //free(chunk.memory); + if(cfg.debug()) + { + while(!logger) + boost::this_thread::sleep(boost::posix_time::milliseconds(200)); + } size_t speed = 0; if(!error) { @@ -93,16 +99,37 @@ size_t speedtest::test(config::proxy_entry_base *p) p->speed_list.push_back(speed); while(p->speed_list.size() > 10) p->speed_list.pop_front(); - if(!p->speed_list.empty()) + size_t speed_sum = 0; + for(std::list<size_t>::iterator i = p->speed_list.begin(), end = p->speed_list.end(); i != end; ++i) + speed_sum += *i; + speed = speed_sum/p->speed_list.size(); + if(cfg.debug()) { - size_t speed_sum = 0; - for(std::list<size_t>::iterator i = p->speed_list.begin(), end = p->speed_list.end(); i != end; ++i) - speed_sum += *i; - speed = speed_sum/p->speed_list.size(); + logger->lock(); + *logger << time_str() << ": computed "<<speed<<" speed from "<<p->speed_list.size()<<" entries for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); } } + else if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": get 0 speed for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); + } + } + else if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": proxy check error ocured for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); } p->speed = speed; + if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": set speed "<<p->speed<<" for proxy "<<p->host<<":"<<p->port<<" (this should be sent and seen in client ui)\n"; + logger->unlock(); + } return speed; } |