diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2011-10-17 16:23:42 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2011-10-17 16:23:42 +0300 |
commit | fceb029308381602d1f73f4a76b436ff436b935a (patch) | |
tree | 19c1a5cb86471e5e3787af84f80d1232f34fd0a2 | |
parent | 66824fc9824d557c14a1beb7291ac84e43338145 (diff) |
почистил немного, осталось протокол придумать и готово )
-rw-r--r-- | server/server/main.cpp | 595 | ||||
-rw-r--r-- | server/server/main.h | 56 |
2 files changed, 4 insertions, 647 deletions
diff --git a/server/server/main.cpp b/server/server/main.cpp index ef6d475..62f7108 100644 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -5,414 +5,7 @@ logtofile *logger, *dos_logger; config *cfg; -http_client::http_client(boost::asio::io_service& io_service, const std::string& new_server, const std::string& path, session* sess_, int request_type, server* serv_) : resolver_(io_service), socket_(io_service), io_service_(io_service) - { - // Form the request. We specify the "Connection: close" header so that the - // server will close the socket after transmitting the response. This will - // allow us to treat all data up until the EOF as the content. - session_ = sess_; - server_ = new_server; - serv = serv_; - std::ostream request_stream(&request_); - if(cfg->debug()) - { - logger->lock(); - *logger<< time_str() << ": Requesting: " << path << "for client " << session_->get_ip() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - request_stream << "GET " << path << " HTTP/1.0\r\n"; - request_stream << "Host: " << new_server << "\r\n"; - request_stream << "User-Agent: Internal Auth Client v0.0.0.1\r\n"; - request_stream << "Accept: */*\r\n"; - request_stream << "Connection: close\r\n\r\n"; - - // Start an asynchronous resolve to translate the server and service names - // into a list of endpoints. - tcp::resolver::query query(new_server, "http"); - resolver_.async_resolve(query, - boost::bind(&http_client::handle_resolve, this, - boost::asio::placeholders::error, - boost::asio::placeholders::iterator, request_type)); - } - - - -void http_client::request(const std::string& path, int request_type) - { - - std::ostream request_stream(&request_); - if(cfg->debug()) - { - logger->lock(); - *logger<< time_str()<< ": Requesting: " << path << "for client " << session_->get_ip() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - request_stream << "GET " << path << " HTTP/1.0\r\n"; - request_stream << "Host: " << server_ << "\r\n"; - request_stream << "User-Agent: Internal Auth Client v0.0.0.1\r\n"; - request_stream << "Accept: */*\r\n"; - request_stream << "Connection: close\r\n\r\n"; - - // Start an asynchronous resolve to translate the server and service names - // into a list of endpoints. - tcp::resolver::query query(server_, "http"); - resolver_.async_resolve(query, - boost::bind(&http_client::handle_resolve, this, - boost::asio::placeholders::error, - boost::asio::placeholders::iterator, request_type)); - } - - -void http_client::handle_resolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator, int request_type) - { - if (!err) - { - // Attempt a connection to the first endpoint in the list. Each endpoint - // will be tried until we successfully establish a connection. - tcp::endpoint endpoint = *endpoint_iterator; - endpoint.port(cfg->ls_port()); - socket_.async_connect(endpoint, - boost::bind(&http_client::handle_connect, this, - boost::asio::placeholders::error, ++endpoint_iterator, request_type)); - } - else - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client " << session_->get_ip() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } - -void http_client::handle_connect(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator, int request_type) - { - if (!err) - { - // The connection was successful. Send the request. - boost::asio::async_write(socket_, request_, - boost::bind(&http_client::handle_write_request, this, - boost::asio::placeholders::error, request_type)); - } - else if (endpoint_iterator != tcp::resolver::iterator()) - { - // The connection failed. Try the next endpoint in the list. - socket_.close(); - tcp::endpoint endpoint = *endpoint_iterator; - socket_.async_connect(endpoint, - boost::bind(&http_client::handle_connect, this, - boost::asio::placeholders::error, ++endpoint_iterator, request_type)); - } - else - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client " << session_->get_ip() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } - -void http_client::handle_write_request(const boost::system::error_code& err, int request_type) - { - if (!err) - { - // Read the response status line. The response_ streambuf will - // automatically grow to accommodate the entire line. The growth may be - // limited by passing a maximum size to the streambuf constructor. - if(socket_.is_open()) - boost::asio::async_read_until(socket_, response_, "\r\n", - boost::bind(&http_client::handle_read_status_line, this, - boost::asio::placeholders::error, request_type)); - } - else - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client " << session_->get_ip() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } - -void http_client::handle_read_status_line(const boost::system::error_code& err, int request_type) - { - if (!err) - { - // Check that response is OK. - std::istream response_stream(&response_); - std::string http_version; - response_stream >> http_version; - unsigned int status_code; - response_stream >> status_code; - std::string status_message; - std::getline(response_stream, status_message); - if (!response_stream || http_version.substr(0, 5) != "HTTP/") - { - logger->lock(); - *logger << time_str() << ": Invalid response from LS" << "for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - return; - } - if (status_code != 200) - { - logger->lock(); - *logger << time_str() << ": Response returned with status code " << status_code << " for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - return; - } - - // Read the response headers, which are terminated by a blank line. - if(socket_.is_open()) - boost::asio::async_read_until(socket_, response_, "\r\n\r\n", - boost::bind(&http_client::handle_read_headers, this, - boost::asio::placeholders::error, request_type)); - } - else - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } - -void http_client::handle_read_headers(const boost::system::error_code& err, int request_type) - { - if (!err) - { - // Process the response headers. - std::istream response_stream(&response_); - std::string header; - while (std::getline(response_stream, header) && header != "\r") - { - if(cfg->debug()) - { - logger->lock(); - *logger << header << "\n"; - logger->unlock(); - } - } - if(cfg->debug()) - { - logger->lock(); - *logger << "\nfor client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - - // Write whatever content we already have to output. - if (response_.size() > 0) - { -// response += boost::asio::buffer_cast<const char*>(response_.data()); - response_stream >> response; - if(cfg->debug()) - { - logger->lock(); - *logger << time_str() << ": have while processing headers: "<< response << " client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id()<< " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } - - // Start reading remaining data until EOF. - if(socket_.is_open()) - boost::asio::async_read(socket_, response_, - boost::asio::transfer_at_least(1), - boost::bind(&http_client::handle_read_content, this, - boost::asio::placeholders::error, request_type)); - } - else - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - } -void http_client::proto_parser(int request_type) - { - if(!request_type) - { - std::string::size_type p1 = 0, p2 = 0; - p1 = response.find("0:"); - if(p1 != std::string::npos) - { // error - p1 += strlen("0:"); - const byte buf [] = {0x83, 0x83, 0xda, 0xb1, 0xdb, 0xaa, 0xab, 0x66, 0x66, 0xac, 0x84, 0x84}; //return failure to client - std::vector<byte> vec(buf, buf+sizeof(buf)); - session_->write_w_close(vec); - socket_.close(); - response.clear(); - logger->lock(); - *logger << time_str() << ": Master account auth fail for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - serv->auth_fail_increment(session_->get_ip(), session_->get_this_sid()); - return; - } - p1 = response.find("1:"); - if(p1 != std::string::npos) - { - //login success, send sid before account list - const byte buf [] = {0x83, 0x83, 0xda, 0xb1, 0xdb, 0xaa, 0xab, 0x13, 0x13, 0xad}; - std::vector<byte> vec(buf, buf+sizeof(buf)); - std::string sid = get_random(12); - session_->set_sid(sid); - for(int i = 0; i < sid.length(); ++i) - vec.push_back(sid[i]); - vec.push_back(0xad); - p1 += 2; - std::list<account> local_accs; - std::string acc_str; - for(p2 = response.find("|", p1); p2 != std::string::npos;) - { - for(int i = 0; i < response.substr(p1, p2-p1).length(); ++i) - { - vec.push_back(response.substr(p1, p2-p1)[i]); - acc_str.push_back(response.substr(p1, p2-p1)[i]); - } - { - int access_level =0, ban_time = 0; - std::string name; - std::string::size_type p1 =0, p2 = 0; - p2 = acc_str.find(","); - if(p2 != std::string::npos) - name.append(acc_str.substr(0, p2)); - p1 = p2 + 1; - p2 = acc_str.find(",", p1); - if(p2 != std::string::npos) - access_level = atoi(acc_str.substr(p1, p2).c_str()); - p1 = p2 + 1; - p2 = acc_str.length(); - ban_time = atoi(acc_str.substr(p1, p2).c_str()); - local_accs.push_back(account(name, access_level, ban_time)); - } - acc_str.clear(); - vec.push_back(0xad); - p1 = p2+1; - p2 = response.find("|", p1); - } - p2 = response.length(); - for(int i = 0; i < response.substr(p1, p2-p1).length(); ++i) - { - vec.push_back(response.substr(p1, p2-p1)[i]); - acc_str.push_back(response.substr(p1, p2-p1)[i]); - } - { - int access_level =0, ban_time = 0; - std::string name; - std::string::size_type p1 =0, p2 = 0; - p2 = acc_str.find(","); - if(p2 != std::string::npos) - name.append(acc_str.substr(0, p2)); - p1 = p2 + 1; - p2 = acc_str.find(",", p1); - if(p2 != std::string::npos) - access_level = atoi(acc_str.substr(p1, p2).c_str()); - p1 = p2 + 1; - p2 = acc_str.length(); - ban_time = atoi(acc_str.substr(p1, p2).c_str()); - local_accs.push_back(account(name, access_level, ban_time)); - } - session_->set_accounts(local_accs); - const byte end [] = {0xac, 0x84, 0x84}; - for(int i = 0; i < sizeof(end); ++i) - vec.push_back(end[i]); - session_->write_w_response(vec); //send success notification, sid and account list - logger->lock(); - *logger << time_str() << ": Master account auth success for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - socket_.close(); - response.clear(); - return; - } - } - if(request_type == 1) //subacc - { - std::string::size_type p1 = 0, p2 = 0; - p1 = response.find("0:"); - if(p1 != std::string::npos) - { // error -// p1 += strlen("0:"); - const byte buf [] = {0x83, 0x83, 0xda, 0xb2, 0xdb, 0xaa, 0xab, 0x66, 0x66, 0xac, 0x84, 0x84}; //return failure to client - std::vector<byte> vec(buf, buf+sizeof(buf)); - if(session_->get_fail_count() < cfg->invalid_sub_count()) - session_->write_w_response(vec); - else - session_->write_w_close(vec); - socket_.close(); - response.clear(); - logger->lock(); - *logger << time_str() << ": sub account auth fail for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - session_->fail_count_increment(); - return; - } - p1 = response.find("1:"); - if(p1 != std::string::npos) - { - p1 +=2; - const byte buf [] = {0x83, 0x83, 0xda, 0xb2, 0xdb, 0xaa, 0xab, 0x13, 0x13, 0xad}; - std::vector<byte> vec(buf, buf+sizeof(buf)); - p2 = response.length(); - for(int i = 0; i < response.substr(p1, p2-p1).length(); ++i) - vec.push_back(response.substr(p1, p2-p1)[i]); - const byte end [] = {0xac, 0x84, 0x84}; - for(int i = 0; i < sizeof(end); ++i) - vec.push_back(end[i]); - logger->lock(); - *logger << time_str() << ": sub account auth success for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - session_->write_w_response(vec); //send subacc access sid - socket_.close(); - response.clear(); - return; - } - } - } - -void http_client::handle_read_content(const boost::system::error_code& err, int request_type) - { - if (!err) - { - // Write all of the data that has been read so far. - if(cfg->debug()) - { - logger->lock(); - *logger << time_str() << ": Appending remain data... for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - std::istream response_stream(&response_); - response_stream >> response; -// response += boost::asio::buffer_cast<const char*>(response_.data()); - - // Continue reading remaining data until EOF. - boost::asio::async_read(socket_, response_, - boost::asio::transfer_at_least(1), - boost::bind(&http_client::handle_read_content, this, - boost::asio::placeholders::error, request_type)); - } - else if (err != boost::asio::error::eof) - { - logger->lock(); - *logger << time_str() << ": Error: " << err.message() << " for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() << "\n"; - logger->unlock(); - } - else - { - if(cfg->debug()) - { - logger->lock(); - *logger << "\n" << time_str()<< ": for client ip " << session_->get_ip()<< " login hash " << session_->get_lhash() << " Hardware ID " << session_->get_hardware_id() << " session " << session_->get_this_sid() <<": End of data.\n"; - logger->unlock(); - } - proto_parser(request_type); - } - } -/*http_client::~http_client() -{ - try - { - socket_.close(); - } - catch (std::exception& e) - { - logger->lock(); - *logger << time_str() << ": session delete exception: " << e.what() << "\n"; - logger->unlock(); - } -}*/ //session @@ -422,10 +15,8 @@ session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& recv_data_[0] = 0; snd_data_[0] = 0; fail_count = 0; - http_client_ = NULL; server_ = serv; blacklisted = canceled = false; - hardware_id = "Not received yet"; } void session::cancel_thread(session *s, int minutes) { @@ -443,8 +34,6 @@ ssl_socket::lowest_layer_type& session::socket() } session::~session() { - if(http_client_) - delete http_client_; if(killer) { killer->interrupt(); @@ -637,58 +226,7 @@ void session::proto_parser(std::vector<byte>& data) logger->lock(); *logger<< time_str() << ": recieved main account login info from " << remote_ip <<" session " << this_sid << "\n"; logger->unlock(); - std::vector<byte>::iterator p1 = std::search(local_data.begin(), local_data.end(), delim, delim + 2); - if(p1 != local_data.end()) - { - std::vector<byte>::iterator p2 = std::find(local_data.begin(), local_data.end(),data_c_delim); - if(p2 != local_data.end()) - { - p1 +=2; - std::vector<byte> tmp_vec(p1, p2); - std::string request = "/index.php?/8870ebc1484f13c87ce89f19a8cd1605/get_ga_list/lhash:"; - lhash.clear(); - for(int i = 0; i < tmp_vec.size(); i++) - { - request.push_back(tmp_vec[i]); - lhash.push_back(tmp_vec[i]); - } - request.append(",phash:"); - ++p2; - p1 = std::find(p2, local_data.end(),data_c_delim); - if(p1 == local_data.end()) - { - p1 = std::find(p2, local_data.end(),data_c_end); - if(p1 == local_data.end()) - delete this; - else - { - logger->lock(); - *logger<< time_str() << ": WARNING old client version, allowed old clients for now " << remote_ip <<" session " << this_sid << "\n"; - logger->unlock(); - } - } - tmp_vec.assign(p2, p1); - for(int i = 0; i < tmp_vec.size(); i++) - request.push_back(tmp_vec[i]); - hardware_id.clear(); - ++p1; - p2 = std::find(p1, local_data.end(),data_c_end); - if(p2 != local_data.end()) - { - tmp_vec.assign(p1, p2); - for(int i = 0; i < tmp_vec.size(); i++) - hardware_id.push_back(tmp_vec[i]); - } - request.append(",hwid:"); - request.append(hardware_id); - request.push_back('/'); - if(http_client_) - delete http_client_; - http_client_ = new http_client(io_service_, cfg->ls_host(), request, this, 0, server_); - } - } - else - delete this; + delete this; } break; case 0xa2: //subacc login request @@ -698,77 +236,7 @@ void session::proto_parser(std::vector<byte>& data) delete this; break; } - std::vector<byte>::iterator p1 = std::find(local_data.begin(), local_data.end(), sid_begin); - if(p1 != local_data.end()) - { - ++p1; - if(accounts.empty()) - { - delete this; - break; - } - ///index.php?/[key]/get_ls_sid/mname:[mname],lname:[lname],pass:[sha1(pass)] - std::string request = "/index.php?/8870ebc1484f13c87ce89f19a8cd1605/get_ga_sid/mname:", response_sid; - for(; *p1 != sid_end; ++p1) - response_sid.push_back(*p1); - if(response_sid != sid) - { - logger->lock(); - *logger<<time_str()<<": Invalid sid from ip "<<remote_ip << " login hash " << lhash << " Hardware ID " << hardware_id << " session " << this_sid <<"\n"; - logger->unlock(); - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB2, 0xDB, 0xAA, 0xAB, 0x66, 0x66, 0xAC, 0x84, 0x84}; //login denied - memset(snd_data_, 0, 1024); - for(int i = 0; i < sizeof(buf); i++) - snd_data_[i] = buf[i]; - socket_.async_write_some(boost::asio::buffer(snd_data_, max_length), boost::bind(&session::handle_write_close, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); - } - p1 = std::search(local_data.begin(), local_data.end(), delim, delim +2); - if(p1 == local_data.end()) - { - logger->lock(); - *logger<<time_str()<<": Data not found in request from ip "<<remote_ip << " login hash " << lhash << " Hardware ID " << hardware_id << " session " << this_sid<<"\n"; - logger->unlock(); - delete this; - break; - } - p1 +=2; - for(; *p1 != data_c_delim; ++p1) - request.push_back(*p1); - ++p1; - request += ",lname:"; - std::string recvd_acc; - for(; *p1 != data_c_delim; ++p1) - { - request.push_back(*p1); - recvd_acc.push_back(*p1); - } - logger->lock(); - *logger<< time_str() << ": recieved subacc login info from ip "<<remote_ip << " login hash " << lhash << " Hardware ID " << hardware_id << " game account " << recvd_acc << " session " << this_sid <<"\n"; - logger->unlock(); - std::list<account>::iterator t_acc = std::find(accounts.begin(), accounts.end(), recvd_acc); - if(t_acc == accounts.end() || t_acc->ban_time == -1) - { - logger->lock(); - *logger<<time_str()<<": account "<< recvd_acc << " not exist for ip " << remote_ip << " login hash " << lhash << " Hardware ID " << hardware_id << " session " << this_sid << "\n"; - logger->unlock(); - const byte buf [] = {0x83, 0x83, 0xda, 0xb2, 0xdb, 0xaa, 0xab, 0x66, 0x66, 0xac, 0x84, 0x84}; //return failure to client - std::vector<byte> vec(buf, buf+sizeof(buf)); - write_w_close(vec); - break; - } - ++p1; - request += ",pass:"; - for(; *p1 != data_c_end; ++p1) - request.push_back(*p1); - request += ",ip:"; - request += remote_ip; - request += ",hwid:"; - request += hardware_id; - request.push_back('/'); - http_client_->request(request, 1); //request subacc sid - } - else - delete this; + delete this; } break; case 0xa3: @@ -778,33 +246,7 @@ void session::proto_parser(std::vector<byte>& data) delete this; break; } - if(cfg->debug()) - { - logger->lock(); - *logger<<time_str() << ": recieved ping request from ip "<<remote_ip << " login hash " << lhash << " Hardware ID " << hardware_id << " session " << this_sid<<"\n"; - logger->unlock(); - } - std::vector<byte>::iterator p1 = std::search(local_data.begin(), local_data.end(), delim, delim + 2); - if(p1 != local_data.end()) - { - p1 +=2; - if(*p1 == 0x14) - { - ++p1; - if(*p1 == 0x14) - { - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB3, 0xDB, 0xAA, 0xAB, 0x15, 0x15, 0xAC, 0x84, 0x84}; - memset(snd_data_, 0, 1024); - for(int i = 0; i < sizeof(buf); i++) - snd_data_[i] = buf[i]; - socket_.async_write_some(boost::asio::buffer(snd_data_, max_length), boost::bind(&session::handle_write, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); - } - } - else - delete this; - } - else - delete this; + delete this; } break; default: @@ -817,10 +259,6 @@ void session::proto_parser(std::vector<byte>& data) } } } -void session::set_accounts(std::list<account>& accs) - { - accounts.assign(accs.begin(), accs.end()); - } void session::set_sid(std::string _sid) { sid = _sid; @@ -972,33 +410,6 @@ void server::connections_increment(std::string ip, const std::string& l_sid) } } } -void server::auth_fail_increment(std::string ip, const std::string& l_sid) -{ - if(!conns.empty()) - { - std::list<conn_count>::iterator p = std::find(conns.begin(), conns.end(), ip); - if(p != conns.end()) - { - p->fail_count++; - if(cfg->debug()) - { - logger->lock(); - *logger<< time_str() << ": auth fail count from " << ip << " incremented, current value " << p->fail_count << " session "<< l_sid << "\n"; - logger->unlock(); - } - } - } - else - { - conns.push_back(conn_count(ip, 1, 1)); - if(cfg->debug()) - { - logger->lock(); - *logger<< time_str() << ": auth fail count from " << ip << " session "<< l_sid << " incremented, current value 1\n"; - logger->unlock(); - } - } -} void server::flood_check_thread(std::list<conn_count> *list, std::list<std::string> *blacklist) //sort and clean blacklist ? { if(cfg->debug()) diff --git a/server/server/main.h b/server/server/main.h index dbcb178..6ecc9d4 100644 --- a/server/server/main.h +++ b/server/server/main.h @@ -26,48 +26,6 @@ const byte reply_failure [] = {0x66, 0x66}; class session; class server; - -class http_client -{ -public: - http_client(boost::asio::io_service& io_service, const std::string& new_server, const std::string& path, session* sess_, int request_type, server *serv); -// ~http_client(); - void request(const std::string& path, int request_type); -private: - void handle_resolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator, int request_type); - void handle_connect(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator, int request_type); - void handle_write_request(const boost::system::error_code& err, int request_type); - void handle_read_status_line(const boost::system::error_code& err, int request_type); - void handle_read_headers(const boost::system::error_code& err, int request_type); - void proto_parser(int request_type); - void handle_read_content(const boost::system::error_code& err, int request_type); - - tcp::resolver resolver_; - tcp::socket socket_; - boost::asio::streambuf request_; - boost::asio::streambuf response_; - boost::asio::io_service& io_service_; - session *session_; - server *serv; - std::string response, server_; -}; -struct account -{ - std::string name; - int access_level, ban_time; - account(const std::string& n, int lvl, int bt) - { - name = n; - access_level = lvl; - ban_time = bt; - } - const bool operator==(const std::string& n) - { - return this->name == n; - } -}; - - class session { public: @@ -80,7 +38,6 @@ public: void handle_write_close(const boost::system::error_code& error, size_t bytes_transferred); void handle_auth_server_reply(const boost::system::error_code& error, size_t bytes_transferred); void proto_parser(std::vector<byte>& data); - void set_accounts(std::list<account>& accs); void set_sid(std::string _sid); void write_w_close(std::vector<byte>& data); void write_w_response(std::vector<byte>& data); @@ -89,18 +46,10 @@ public: void set_cancel(); const int get_fail_count(); const std::string& get_ip(); - const std::string& get_lhash() - { - return lhash; - } const std::string& get_this_sid() { return this_sid; } - const std::string& get_hardware_id() - { - return hardware_id; - } void fail_count_increment(); void handle_operation(const boost::system::error_code& error, size_t bytes_transferred); void handle_read(const boost::system::error_code& error, size_t bytes_transferred); @@ -110,9 +59,7 @@ private: unsigned char recv_data_[max_length]; unsigned char snd_data_[max_length]; boost::asio::io_service& io_service_; - http_client *http_client_; - std::string sid, remote_ip, lhash, hardware_id, this_sid; - std::list<account> accounts; + std::string sid, remote_ip, this_sid; server *server_; bool blacklisted, canceled; int fail_count; @@ -152,7 +99,6 @@ public: 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); - void auth_fail_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); std::list<std::string>* get_blacklist(); |