From b95963f3fb9a3da39312898d836d71481e917d51 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sun, 6 Nov 2011 22:48:26 +0200 Subject: modified: server/server/config.cpp modified: server/server/config.h modified: server/server/main.cpp --- server/server/config.cpp | 9 ++++++ server/server/config.h | 2 ++ server/server/main.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 93 insertions(+), 1 deletion(-) (limited to 'server') diff --git a/server/server/config.cpp b/server/server/config.cpp index 7c85daf..3ee15a8 100644 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -216,3 +216,12 @@ const std::string& config::dos_log_path() { return vars.dos_log_path; } +std::list *config::get_proxy_list() +{ + return &proxy_list; +} +std::list *config::get_static_proxy_list() +{ + return &static_proxy_list; +} + diff --git a/server/server/config.h b/server/server/config.h index 8886239..62a75af 100644 --- a/server/server/config.h +++ b/server/server/config.h @@ -52,6 +52,8 @@ public: const std::string& bind_ip(); const std::string& log_path(); const std::string& dos_log_path(); + std::list *get_proxy_list(); + std::list *get_static_proxy_list(); private: struct cfg_data { diff --git a/server/server/main.cpp b/server/server/main.cpp index a85efd6..2c171ce 100644 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -154,7 +154,7 @@ void session::proto_parser(std::vector& data) ++it; switch(*it) { - case 0x01: //request type 1 + case 0x01: //config request { if(canceled) { @@ -193,6 +193,87 @@ void session::proto_parser(std::vector& data) } } break; + case 0x02: //proxy list request + { + if(canceled) + { + delete this; + break; + } + logger->lock(); + *logger<< time_str() << ": recieved request type 1 "<unlock(); + if(!blacklisted) + { + logger->lock(); + *logger<< time_str() << ": request type 1 from "<unlock(); + std::vector data; + data.push_back(0x13); + data.push_back(0x13); + data.push_back(0x02); + for(std::list::iterator it = cfg->get_proxy_list()->begin(), end = cfg->get_proxy_list()->end(); it != end; ++it) + { + if(!it->login.empty() && !it->password.empty()) + { + for(int i = 0; i < it->login.size(); ++ i) + data.push_back(it->login[i]); + data.push_back(':'); + for(int i = 0; i < it->password.size(); ++ i) + data.push_back(it->password[i]); + data.push_back('@'); + } + for(int i = 0; i < it->host.size(); ++ i) + data.push_back(it->host[i]); + data.push_back(':'); + { + char port[8]; + int len = strlen(port); + snprintf(port, 8, "%d", it->port); + for(int i = 0; i < len; ++i) + data.push_back(port[i]); + } + data.push_back(' '); + data.push_back('"'); + for(int i = 0; i < it->country.size(); ++ i) + data.push_back(it->country[i]); + data.push_back('"'); + data.push_back(' '); + data.push_back('"'); + if(!it->state.empty()) + { + for(int i = 0; i < it->state.size(); ++ i) + data.push_back(it->state[i]); + } + else + data.push_back('-'); + data.push_back('"'); + data.push_back(' '); + data.push_back('"'); + for(int i = 0; i < it->city.size(); ++ i) + data.push_back(it->city[i]); + data.push_back('"'); + data.push_back(';'); + } + data.push_back(0x14); + data.push_back(0x14); + write_w_close(data); + } + else + { + logger->lock(); + *logger<< time_str() << ": request type 1 from "<unlock(); + std::vector data; + data.push_back(0x13); + data.push_back(0x13); + data.push_back(0x66); + data.push_back(0x14); + data.push_back(0x14); + write_w_close(data); + } + } + break; default: break; } -- cgit v1.2.3