summaryrefslogtreecommitdiff
path: root/server/server/speedtest.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-03-24 20:39:49 +0200
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2012-03-24 20:39:49 +0200
commit7253d2141c17643f4805f26970e2824163dbc95b (patch)
tree6bbcbb149764d097d44def6dfaf9c31ba9f58d84 /server/server/speedtest.cpp
parent3faa907f6e8597ffae5b9f7db8567fe5fab8c9f6 (diff)
some log in speedtest
some curl code optimisation (b0ris suggestion)
Diffstat (limited to 'server/server/speedtest.cpp')
-rw-r--r--server/server/speedtest.cpp53
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;
}