summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rwxr-xr-xserver/server/config.cpp24
-rwxr-xr-xserver/server/config.h4
-rwxr-xr-xserver/server/main.cpp34
-rw-r--r--server/server/main.h20
4 files changed, 59 insertions, 23 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp
index 3c7a679..890c369 100755
--- a/server/server/config.cpp
+++ b/server/server/config.cpp
@@ -1,5 +1,7 @@
#include "headers.h"
+extern logtofile *logger;
+
void reload_config_thread_func(config *cfg, boost::mutex *m)
{
while(!boost::this_thread::interruption_requested())
@@ -7,30 +9,38 @@ void reload_config_thread_func(config *cfg, boost::mutex *m)
boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval()));
if(boost::this_thread::interruption_requested())
return;
+ m->lock();
cfg->load_vars();
cfg->load_cvars();
- m->lock();
cfg->load_proxy_list();
cfg->load_static_proxy_list();
- m->unlock();
cfg->load_firewall_list();
cfg->load_deleted_list();
cfg->load_upload_list();
cfg->load_servers_list();
+ m->unlock();
}
}
-void speed_test_thread_func(int check_interval, std::list<config::proxy_entry>* proxy_list, std::list<config::static_proxy_entry> *static_proxy_list, const std::string& test_url, boost::mutex *m)
+void speed_test_thread_func(config *cfg, int check_interval, std::list<config::proxy_entry>* proxy_list, std::list<config::static_proxy_entry> *static_proxy_list, const std::string& test_url, boost::mutex *m)
{
while(!boost::this_thread::interruption_requested())
{
m->lock();
-// logtofile *l = new logtofile(std::string(boost::filesystem::initial_path().string() + "/proxy_test_info").c_str());
for(std::list<config::static_proxy_entry>::iterator i = static_proxy_list->begin(), end = static_proxy_list->end(); i != end; ++i)
{
speedtest t(test_url);
-// *l<<i->host<<" "<<(int)t.test(&(*i))<<"\n";
- t.test(&(*i));
+ int sp = (int)t.test(&(*i));
+ if(cfg->debug())
+ {
+ char port[10];
+ snprintf(port, 9, "%d", i->port);
+ while(!logger)
+ boost::this_thread::sleep(boost::posix_time::milliseconds(200));
+ logger->lock();
+ *logger << time_str() << ": "<<i->host<<":"<<port<<"\tspeed: "<<sp<<"b/s\n";
+ logger->unlock();
+ }
boost::this_thread::sleep(boost::posix_time::seconds(1));
}
/* for(std::list<config::proxy_entry>::iterator i = proxy_list->begin(), end = proxy_list->end(); i != end; ++i)
@@ -120,7 +130,7 @@ config::config(const char *pth): cfg_reload_thr(NULL), speed_test_thr(NULL)
load_upload_list();
load_servers_list();
cfg_reload_thr = new boost::thread(boost::bind(reload_config_thread_func, this, &lists_mutex));
- speed_test_thr = new boost::thread(boost::bind(speed_test_thread_func, vars.proxy_check_interval, &proxy_list, &static_proxy_list, vars.speed_test_file_url, &lists_mutex));
+ speed_test_thr = new boost::thread(boost::bind(speed_test_thread_func, this, vars.proxy_check_interval, &proxy_list, &static_proxy_list, vars.speed_test_file_url, &lists_mutex));
}
const int config::get_int(const std::string& data, const char* var, int default_)
{
diff --git a/server/server/config.h b/server/server/config.h
index edf6d1c..f19cae1 100755
--- a/server/server/config.h
+++ b/server/server/config.h
@@ -139,6 +139,10 @@ public:
std::list<std::string> *get_deleted_list();
std::list<upload_entry> *get_upload_list();
std::list<conn_server> *get_server_list();
+ boost::mutex &get_lists_mutex()
+ {
+ return lists_mutex;
+ }
private:
struct cfg_data
{
diff --git a/server/server/main.cpp b/server/server/main.cpp
index 96af597..38ee904 100755
--- a/server/server/main.cpp
+++ b/server/server/main.cpp
@@ -4,14 +4,11 @@
-logtofile *logger, *dos_logger;
-config *cfg;
-
-
+logtofile *logger = NULL, *dos_logger = NULL;
//session
-session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& context, server *serv) : socket_(io_service, context), io_service_(io_service)
+session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& context, server *serv) : socket_(io_service, context), io_service_(io_service), lists_mutex(serv->get_lists_mutex()), cfg(serv->get_config())
{
this_sid = get_random(8);
server_ = serv;
@@ -199,6 +196,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x01);
+ lists_mutex.lock();
if(!cfg->get_server_list()->empty())
{
for(std::list<config::conn_server>::iterator i = cfg->get_server_list()->begin(), end = cfg->get_server_list()->end(); i != end; ++i)
@@ -235,6 +233,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back('\n');
}
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -282,6 +281,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x02);
+ lists_mutex.lock();
for(std::list<config::proxy_entry>::iterator it = cfg->get_proxy_list()->begin(), end = cfg->get_proxy_list()->end(); it != end; ++it)
{
switch(it->type)
@@ -370,6 +370,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back('"');
data.push_back(';');
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -417,6 +418,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x03);
+ lists_mutex.lock();
for(std::list<config::static_proxy_entry>::iterator it = cfg->get_static_proxy_list()->begin(), end = cfg->get_static_proxy_list()->end(); it != end; ++it)
{
switch(it->type)
@@ -497,6 +499,7 @@ void session::proto_parser(std::vector<byte>& data)
//data.push_back('0'); //add speed here
data.push_back(';');
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -544,6 +547,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x04);
+ lists_mutex.lock();
for(std::list<std::string>::iterator it = cfg->get_firewall_list()->begin(), end = cfg->get_firewall_list()->end(); it != end; ++it)
{
if(!(it->empty()))
@@ -551,6 +555,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back((*it)[i]);
data.push_back(';');
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -598,6 +603,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x05);
+ lists_mutex.lock();
for(std::list<config::upload_entry>::iterator it = cfg->get_upload_list()->begin(), end = cfg->get_upload_list()->end(); it != end; ++it)
{
/*if(!(it->source.empty()))
@@ -617,6 +623,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back('0');
data.push_back(';');
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -664,6 +671,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back(0x13);
data.push_back(0x13);
data.push_back(0x06);
+ lists_mutex.lock();
for(std::list<std::string>::iterator it = cfg->get_deleted_list()->begin(), end = cfg->get_deleted_list()->end(); it != end; ++it)
{
if(!(it->empty()))
@@ -671,6 +679,7 @@ void session::proto_parser(std::vector<byte>& data)
data.push_back((*it)[i]);
data.push_back(';');
}
+ lists_mutex.unlock();
data.push_back(0x14);
data.push_back(0x14);
write_w_response(data);
@@ -934,7 +943,6 @@ void session::proto_parser(std::vector<byte>& data)
break;
}
}
- //ok, our data found
}
}
}
@@ -1033,7 +1041,8 @@ void session::handle_read(const boost::system::error_code& error, size_t bytes_t
}
//server
-server::server(boost::asio::io_service& io_service, unsigned short port) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(cfg->bind_ip()), port)), context_(io_service, boost::asio::ssl::context::sslv3_server)
+server::server(boost::asio::io_service& io_service, unsigned short port, config *c) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(c->bind_ip()), port)),
+context_(io_service, boost::asio::ssl::context::sslv3_server), lists_mutex(c->get_lists_mutex()), cfg(c)
{
boost::system::error_code err;
std::string b_path = boost::filesystem::initial_path().string(), tmp_path;
@@ -1065,8 +1074,8 @@ server::server(boost::asio::io_service& io_service, unsigned short port) : io_se
*logger << time_str()<<": Openning server key file: " << tmp_path << " " << err.message()<<"\n";
logger->unlock();
}
- flood_chek = new boost::thread(boost::bind(flood_check_thread, &conns, &blacklist));
- blacklist_clean = new boost::thread(boost::bind(blacklist_clean_thread, &blacklist));
+ flood_chek = new boost::thread(boost::bind(flood_check_thread, &conns, &blacklist, cfg));
+ blacklist_clean = new boost::thread(boost::bind(blacklist_clean_thread, &blacklist, cfg));
session* new_session = new session(io_service_, context_, this);
acceptor_.async_accept(new_session->socket(),
@@ -1107,7 +1116,7 @@ void server::connections_increment(std::string ip, const std::string& l_sid)
}
}
}
-void server::flood_check_thread(std::list<conn_count> *list, std::list<std::string> *blacklist) //sort and clean blacklist ?
+void server::flood_check_thread(std::list<conn_count> *list, std::list<std::string> *blacklist, config *cfg) //sort and clean blacklist ?
{
if(cfg->debug())
{
@@ -1162,7 +1171,7 @@ void server::flood_check_thread(std::list<conn_count> *list, std::list<std::stri
}
}
}
-void server::blacklist_clean_thread(std::list<std::string> *list)
+void server::blacklist_clean_thread(std::list<std::string> *list, config *cfg)
{
if(cfg->debug())
{
@@ -1260,6 +1269,7 @@ int main(int argc, char* argv[])
std::cout<<"succesfully started\n";
#endif
+ config *cfg = NULL;
if (!cfg_path.empty())
cfg = new config(cfg_path.c_str());
else
@@ -1283,7 +1293,7 @@ int main(int argc, char* argv[])
boost::asio::io_service io_service;
- server s(io_service, 13666);
+ server s(io_service, 13666, cfg);
io_service.run();
}
diff --git a/server/server/main.h b/server/server/main.h
index 1ee3aca..0ebd349 100644
--- a/server/server/main.h
+++ b/server/server/main.h
@@ -15,6 +15,7 @@ const byte data_end [] = {0x14, 0x14};
class session;
class server;
+class config;
class session
{
@@ -58,7 +59,8 @@ private:
server *server_;
bool blacklisted, canceled;
boost::thread *killer;
- boost::mutex critical_mutex;
+ boost::mutex critical_mutex, &lists_mutex;
+ config *cfg;
};
struct conn_count
{
@@ -89,15 +91,23 @@ struct conn_count
class server
{
public:
- server(boost::asio::io_service& io_service, unsigned short port);
+ server(boost::asio::io_service& io_service, unsigned short port, config *cfg);
~server();
std::string get_password() const;
void handle_accept(session* new_session, const boost::system::error_code& error);
void connections_increment(std::string ip, const std::string& l_sid);
- static void flood_check_thread(std::list<conn_count> *list, std::list<std::string> *blacklist);
- static void blacklist_clean_thread(std::list<std::string> *list);
+ static void flood_check_thread(std::list<conn_count> *list, std::list<std::string> *blacklist, config *cfg);
+ static void blacklist_clean_thread(std::list<std::string> *list, config *cfg);
std::list<std::string>* get_blacklist();
std::list<conn_count>* get_connections_list();
+ boost::mutex &get_lists_mutex()
+ {
+ return lists_mutex;
+ }
+ config *get_config()
+ {
+ return cfg;
+ }
private:
boost::asio::io_service& io_service_;
boost::asio::ip::tcp::acceptor acceptor_;
@@ -105,6 +115,8 @@ private:
std::list<conn_count> conns;
std::list<std::string> blacklist;
boost::thread *flood_chek, *blacklist_clean;
+ boost::mutex &lists_mutex;
+ config *cfg;
};
#endif