diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/server/main.cpp | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/server/server/main.cpp b/server/server/main.cpp index 2c171ce..0c89281 100644 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -162,12 +162,12 @@ void session::proto_parser(std::vector<byte>& data) break; } logger->lock(); - *logger<< time_str() << ": recieved request type 1 "<<remote_ip << " session " << this_sid <<"\n"; + *logger<< time_str() << ": recieved config request from "<<remote_ip << " session " << this_sid <<"\n"; logger->unlock(); if(!blacklisted) { logger->lock(); - *logger<< time_str() << ": request type 1 from "<<remote_ip<< " session " << this_sid << " are permited \n"; + *logger<< time_str() << ": config request from "<<remote_ip<< " session " << this_sid << " are permited \n"; logger->unlock(); std::vector<byte> data; data.push_back(0x13); @@ -181,7 +181,7 @@ void session::proto_parser(std::vector<byte>& data) else { logger->lock(); - *logger<< time_str() << ": request type 1 from "<<remote_ip << " session " << this_sid <<" are denied \n"; + *logger<< time_str() << ": config request from "<<remote_ip << " session " << this_sid <<" are denied \n"; logger->unlock(); std::vector<byte> data; data.push_back(0x13); @@ -201,12 +201,12 @@ void session::proto_parser(std::vector<byte>& data) break; } logger->lock(); - *logger<< time_str() << ": recieved request type 1 "<<remote_ip << " session " << this_sid <<"\n"; + *logger<< time_str() << ": recieved proxy list request from "<<remote_ip << " session " << this_sid <<"\n"; logger->unlock(); if(!blacklisted) { logger->lock(); - *logger<< time_str() << ": request type 1 from "<<remote_ip<< " session " << this_sid << " are permited \n"; + *logger<< time_str() << ": proxy list request from "<<remote_ip<< " session " << this_sid << " are permited \n"; logger->unlock(); std::vector<byte> data; data.push_back(0x13); @@ -262,7 +262,83 @@ void session::proto_parser(std::vector<byte>& data) else { logger->lock(); - *logger<< time_str() << ": request type 1 from "<<remote_ip << " session " << this_sid <<" are denied \n"; + *logger<< time_str() << ": proxy list request from "<<remote_ip << " session " << this_sid <<" are denied \n"; + logger->unlock(); + std::vector<byte> 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; + case 0x04: // static proxy list request + { + if(canceled) + { + delete this; + break; + } + logger->lock(); + *logger<< time_str() << ": recieved static proxy list request from "<<remote_ip << " session " << this_sid <<"\n"; + logger->unlock(); + if(!blacklisted) + { + logger->lock(); + *logger<< time_str() << ": static proxy list request from "<<remote_ip<< " session " << this_sid << " are permited \n"; + logger->unlock(); + std::vector<byte> data; + data.push_back(0x13); + data.push_back(0x13); + data.push_back(0x04); + for(std::list<static_proxy_entry>::iterator it = cfg->get_static_proxy_list()->begin(), end = cfg->get_static_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]; + snprintf(port, 8, "%d", it->port); + int len = strlen(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->label.size(); ++ i) + data.push_back(it->label[i]); + data.push_back('"'); + data.push_back(' '); + { + char pos[4]; + snprintf(pos, 4, "%d", it->position); + int len = strlen(pos); + for(int i = 0; i < len; ++i) + data.push_back(pos[i]); + } + data.push_back(' '); + data.push_back('0'); //add speed here + data.push_back(';'); + } + data.push_back(0x14); + data.push_back(0x14); + write_w_close(data); + } + else + { + logger->lock(); + *logger<< time_str() << ": static proxy list request from "<<remote_ip << " session " << this_sid <<" are denied \n"; logger->unlock(); std::vector<byte> data; data.push_back(0x13); |