summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xserver/server/config.cpp9
-rw-r--r--server/server/speedtest.cpp53
-rw-r--r--server/server/speedtest.h10
3 files changed, 48 insertions, 24 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp
index 98db729..40ff3fb 100755
--- a/server/server/config.cpp
+++ b/server/server/config.cpp
@@ -4,11 +4,9 @@ extern logtofile *logger;
void reload_config_thread_func(config *cfg, boost::mutex *lists_mutex)
{
+ boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval()));
while(!boost::this_thread::interruption_requested())
{
- boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval()));
- if(boost::this_thread::interruption_requested())
- return;
lists_mutex->lock();
cfg->load_vars();
cfg->load_cvars();
@@ -19,6 +17,7 @@ void reload_config_thread_func(config *cfg, boost::mutex *lists_mutex)
cfg->load_upload_list();
cfg->load_servers_list();
lists_mutex->unlock();
+ boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval()));
}
}
@@ -29,7 +28,7 @@ void speed_test_thread_func(config *cfg, int check_interval, std::list<config::p
std::list<config::static_proxy_entry> tmp_list = *static_proxy_list;
for(std::list<config::static_proxy_entry>::iterator i = tmp_list.begin(), end = tmp_list.end(); i != end; ++i)
{
- speedtest t(test_url);
+ speedtest t(test_url, *cfg);
size_t sp = t.test(&(*i));
lists_mutex->lock();
std::list<config::static_proxy_entry>::iterator it = std::find(static_proxy_list->begin(), static_proxy_list->end(), *i);
@@ -48,7 +47,7 @@ void speed_test_thread_func(config *cfg, int check_interval, std::list<config::p
while(!logger)
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
logger->lock();
- *logger << time_str() << ": "<<i->host<<":"<<i->port<<"\t"<<sp<<"\n";
+ *logger << time_str() << ": proxy "<<i->host<<":"<<i->port<<"\t speed "<<sp<<" (in speed_test_thread)\n";
logger->unlock();
}
lists_mutex->unlock();
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;
}
diff --git a/server/server/speedtest.h b/server/server/speedtest.h
index 95e9b89..1e976e2 100644
--- a/server/server/speedtest.h
+++ b/server/server/speedtest.h
@@ -1,17 +1,14 @@
#ifndef SPEEDTEST_H
#define SPEEDTEST_H
-
+#include "headers.h"
class speedtest
{
public:
size_t test(config::proxy_entry_base*);
- speedtest() : curl(NULL){}
- speedtest(const std::string& url) : curl(NULL)
- {
- test_url = url;
- }
+ speedtest(const std::string& url, config &c) : test_url(url), curl(NULL), cfg(c)
+ {}
private:
struct memory_struct {
char *memory;
@@ -20,6 +17,7 @@ private:
static size_t curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp);
std::string test_url;
CURL *curl;
+ config &cfg;
};