summaryrefslogtreecommitdiff
path: root/server/server/speedtest.cpp
diff options
context:
space:
mode:
authorAlex Borisov <b0ric.alex@gmail.com>2012-03-24 00:29:12 +0200
committerAlex Borisov <b0ric.alex@gmail.com>2012-03-24 00:29:12 +0200
commitb606632400d491b864eeb36464eb9fab63136ac8 (patch)
tree9db3a581073d7bae82c6b87ce40d47c8aee4af89 /server/server/speedtest.cpp
parentdb10b50c84a4aaf5014e0f164b3f4f79ca222429 (diff)
parent8b0b635491dd318baab5d93575eed9cda2b3c9fd (diff)
Merge branch 'master' of ssh://sss.chaoslab.ru/home/private_git/proxy_ui
Diffstat (limited to 'server/server/speedtest.cpp')
-rw-r--r--server/server/speedtest.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp
index 21fe21c..8303afc 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,28 @@ 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(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);
+ }
+
+ 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 +83,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;
}