diff options
-rw-r--r-- | certs/ca.crt | 19 | ||||
-rw-r--r-- | certs/ca.key | 10 | ||||
-rw-r--r-- | certs/client.crt | 61 | ||||
-rw-r--r-- | certs/client.csr | 9 | ||||
-rw-r--r-- | certs/client.key | 10 | ||||
-rw-r--r-- | client/config_example | 17 | ||||
-rw-r--r-- | server/server/config_example | 17 | ||||
-rw-r--r-- | server/server/main.cpp | 139 | ||||
-rw-r--r-- | server/server/main.h | 26 |
9 files changed, 165 insertions, 143 deletions
diff --git a/certs/ca.crt b/certs/ca.crt new file mode 100644 index 0000000..76149b8 --- /dev/null +++ b/certs/ca.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDDjCCArigAwIBAgIJAPSfJ9qOPnNBMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYD +VQQGEwJVQTELMAkGA1UECBMCQ1IxEDAOBgNVBAcTB0FsdXNodGExHDAaBgNVBAoT +E1NTUyBSZXNlYXJjaCBTZXJ2ZXIxHzAdBgNVBAMTFlNTUyBSZXNlYXJjaCBTZXJ2 +ZXIgQ0ExITAfBgkqhkiG9w0BCQEWEnNzczEyM25leHRAbGlzdC5ydTAeFw0xMTEw +MjAyMjA3MTRaFw0zMTEwMTUyMjA3MTRaMIGOMQswCQYDVQQGEwJVQTELMAkGA1UE +CBMCQ1IxEDAOBgNVBAcTB0FsdXNodGExHDAaBgNVBAoTE1NTUyBSZXNlYXJjaCBT +ZXJ2ZXIxHzAdBgNVBAMTFlNTUyBSZXNlYXJjaCBTZXJ2ZXIgQ0ExITAfBgkqhkiG +9w0BCQEWEnNzczEyM25leHRAbGlzdC5ydTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgC +QQDIZEITstIahci+CCOIw7aR2ih4QfUc27QZIIw3KjD/mFzYj0kM24+BqH/DW/qj +WPfs2+v+YIIdhQ4seVCnbMobAgMBAAGjgfYwgfMwHQYDVR0OBBYEFOLIb7hdxWw7 +B7zKX8nwYzbB4Mc+MIHDBgNVHSMEgbswgbiAFOLIb7hdxWw7B7zKX8nwYzbB4Mc+ +oYGUpIGRMIGOMQswCQYDVQQGEwJVQTELMAkGA1UECBMCQ1IxEDAOBgNVBAcTB0Fs +dXNodGExHDAaBgNVBAoTE1NTUyBSZXNlYXJjaCBTZXJ2ZXIxHzAdBgNVBAMTFlNT +UyBSZXNlYXJjaCBTZXJ2ZXIgQ0ExITAfBgkqhkiG9w0BCQEWEnNzczEyM25leHRA +bGlzdC5ydYIJAPSfJ9qOPnNBMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +QQCZfuv/6X9ZErhTJxZh2AQXM54DWfLOJntH8QWqeYXBVHaLMx91hTEe9w6FDhxt +Az5fvuCCmTgQtrL2W7sCXMyp +-----END CERTIFICATE----- diff --git a/certs/ca.key b/certs/ca.key new file mode 100644 index 0000000..0aba734 --- /dev/null +++ b/certs/ca.key @@ -0,0 +1,10 @@ +-----BEGIN PRIVATE KEY----- +MIIBVwIBADANBgkqhkiG9w0BAQEFAASCAUEwggE9AgEAAkEAyGRCE7LSGoXIvggj +iMO2kdooeEH1HNu0GSCMNyow/5hc2I9JDNuPgah/w1v6o1j37Nvr/mCCHYUOLHlQ +p2zKGwIDAQABAkEAwRiS74ZdnL8Tm8Id85iboVm1q4PrHF684YWSd0nJo0/KSwUn +FAX9/B3zvYAU+4vC4cfN8IDsNtm6biCEJtJx6QIhAOp92go3pQF1szZkE3bAEWJN +S/QoW0vtKXemIJOU/ZUVAiEA2sWyjrEIai2vkgKNycfM1JFwtvIrmytcFNdOCAqK +Dm8CIQCwM82J6/JDvIvkDSNLElx9v5OZblHcJeQJEn5cJ5K9WQIhAJUPyz/qY99k +zZHg55cq6eeUSYZ9rzSE8LLKmMJl2/dFAiEA2QvbeA71j1CBpWdAH9HGznCAVfUO +PzrMyB86MHpCx5g= +-----END PRIVATE KEY----- diff --git a/certs/client.crt b/certs/client.crt new file mode 100644 index 0000000..7ec41c9 --- /dev/null +++ b/certs/client.crt @@ -0,0 +1,61 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 1 (0x1) + Signature Algorithm: sha1WithRSAEncryption + Issuer: C=UA, ST=CR, L=Alushta, O=SSS Research Server, CN=SSS Research Server CA/emailAddress=sss123next@list.ru + Validity + Not Before: Oct 20 22:09:31 2011 GMT + Not After : Oct 15 22:09:31 2031 GMT + Subject: C=UA, ST=CR, L=Alushta, O=SSS Research Server, CN=client/emailAddress=sss123next@list.ru + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (512 bit) + Modulus: + 00:f6:a0:c5:b2:bd:5b:3d:12:55:10:41:4e:cc:ab: + e6:5e:96:65:bd:4a:10:05:b9:5f:15:f6:41:a5:fb: + 3d:6d:0c:6a:e6:44:af:49:ad:44:d6:ba:27:f2:dc: + 5a:f3:56:83:95:b0:8d:98:e2:3b:ec:32:00:84:ce: + 75:e6:65:46:61 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Netscape Comment: + Easy-RSA Generated Certificate + X509v3 Subject Key Identifier: + 8D:53:5A:0B:BF:23:0C:A9:BB:73:90:28:6C:4B:D9:0A:B5:5B:B9:EF + X509v3 Authority Key Identifier: + keyid:E2:C8:6F:B8:5D:C5:6C:3B:07:BC:CA:5F:C9:F0:63:36:C1:E0:C7:3E + DirName:/C=UA/ST=CR/L=Alushta/O=SSS Research Server/CN=SSS Research Server CA/emailAddress=sss123next@list.ru + serial:F4:9F:27:DA:8E:3E:73:41 + + X509v3 Extended Key Usage: + TLS Web Client Authentication + X509v3 Key Usage: + Digital Signature + Signature Algorithm: sha1WithRSAEncryption + 67:e1:91:1c:32:b5:2d:7a:36:80:94:54:86:ae:dc:13:71:4c: + 1e:b1:3e:c6:95:d0:c9:21:ae:90:c6:6b:45:f0:51:fb:5d:9e: + 56:6d:fb:d6:22:26:0c:35:c0:e0:64:94:ea:4a:b5:c0:5d:d1: + 66:27:2b:5f:cf:29:f5:76:a0:cd +-----BEGIN CERTIFICATE----- +MIIDRTCCAu+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBjjELMAkGA1UEBhMCVUEx +CzAJBgNVBAgTAkNSMRAwDgYDVQQHEwdBbHVzaHRhMRwwGgYDVQQKExNTU1MgUmVz +ZWFyY2ggU2VydmVyMR8wHQYDVQQDExZTU1MgUmVzZWFyY2ggU2VydmVyIENBMSEw +HwYJKoZIhvcNAQkBFhJzc3MxMjNuZXh0QGxpc3QucnUwHhcNMTExMDIwMjIwOTMx +WhcNMzExMDE1MjIwOTMxWjB+MQswCQYDVQQGEwJVQTELMAkGA1UECBMCQ1IxEDAO +BgNVBAcTB0FsdXNodGExHDAaBgNVBAoTE1NTUyBSZXNlYXJjaCBTZXJ2ZXIxDzAN +BgNVBAMTBmNsaWVudDEhMB8GCSqGSIb3DQEJARYSc3NzMTIzbmV4dEBsaXN0LnJ1 +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPagxbK9Wz0SVRBBTsyr5l6WZb1KEAW5 +XxX2QaX7PW0MauZEr0mtRNa6J/LcWvNWg5WwjZjiO+wyAITOdeZlRmECAwEAAaOC +AUUwggFBMAkGA1UdEwQCMAAwLQYJYIZIAYb4QgENBCAWHkVhc3ktUlNBIEdlbmVy +YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUjVNaC78jDKm7c5AobEvZCrVbue8w +gcMGA1UdIwSBuzCBuIAU4shvuF3FbDsHvMpfyfBjNsHgxz6hgZSkgZEwgY4xCzAJ +BgNVBAYTAlVBMQswCQYDVQQIEwJDUjEQMA4GA1UEBxMHQWx1c2h0YTEcMBoGA1UE +ChMTU1NTIFJlc2VhcmNoIFNlcnZlcjEfMB0GA1UEAxMWU1NTIFJlc2VhcmNoIFNl +cnZlciBDQTEhMB8GCSqGSIb3DQEJARYSc3NzMTIzbmV4dEBsaXN0LnJ1ggkA9J8n +2o4+c0EwEwYDVR0lBAwwCgYIKwYBBQUHAwIwCwYDVR0PBAQDAgeAMA0GCSqGSIb3 +DQEBBQUAA0EAZ+GRHDK1LXo2gJRUhq7cE3FMHrE+xpXQySGukMZrRfBR+12eVm37 +1iImDDXA4GSU6kq1wF3RZicrX88p9XagzQ== +-----END CERTIFICATE----- diff --git a/certs/client.csr b/certs/client.csr new file mode 100644 index 0000000..4b46b57 --- /dev/null +++ b/certs/client.csr @@ -0,0 +1,9 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBODCB4wIBADB+MQswCQYDVQQGEwJVQTELMAkGA1UECBMCQ1IxEDAOBgNVBAcT +B0FsdXNodGExHDAaBgNVBAoTE1NTUyBSZXNlYXJjaCBTZXJ2ZXIxDzANBgNVBAMT +BmNsaWVudDEhMB8GCSqGSIb3DQEJARYSc3NzMTIzbmV4dEBsaXN0LnJ1MFwwDQYJ +KoZIhvcNAQEBBQADSwAwSAJBAPagxbK9Wz0SVRBBTsyr5l6WZb1KEAW5XxX2QaX7 +PW0MauZEr0mtRNa6J/LcWvNWg5WwjZjiO+wyAITOdeZlRmECAwEAAaAAMA0GCSqG +SIb3DQEBBQUAA0EAckE/7aUJKxKkP3FtEiljXqBpAbTFFvOQBNbD80U3bjHvnNnS +5yzQCmKENhf76LZZYi/cIFx0/c0tNn974wuyig== +-----END CERTIFICATE REQUEST----- diff --git a/certs/client.key b/certs/client.key new file mode 100644 index 0000000..577e170 --- /dev/null +++ b/certs/client.key @@ -0,0 +1,10 @@ +-----BEGIN PRIVATE KEY----- +MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA9qDFsr1bPRJVEEFO +zKvmXpZlvUoQBblfFfZBpfs9bQxq5kSvSa1E1ron8txa81aDlbCNmOI77DIAhM51 +5mVGYQIDAQABAkAPUPC2JvhRlJ/fwI6KO2q1GRX8aWsRT+/Nx1tQWYf5C5sqQZDS +hNivyZ0R14zcSWPIJxTjmlDX/Mzhe4H/QBSBAiEA/EJ9RLQBFXpqwGjIdOUQOSwS +oMSPSbKDrZt5g9u55JkCIQD6SOgOXnfG6G5MBhN6IYGJl5rXJiSfzuaATpM/nJdF +CQIhAO8cczMxUKm0PQYfDIvJKMSYoxui1ZNs0+Y2rksvdphZAiAS6GUXiM11qmOC +vMbF6DgYA+r/q/MCW6gQM19uY88NuQIhAI8a+eOwQrKJ2jpzFt/2bA8HdVSynlDx +Tus4vEhIxAG/ +-----END PRIVATE KEY----- diff --git a/client/config_example b/client/config_example deleted file mode 100644 index 712ef6b..0000000 --- a/client/config_example +++ /dev/null @@ -1,17 +0,0 @@ -BanTime=60; //minutes -ConnListCheckInterval=30; //seconds -ConnectionCount=30; //conection limit for ban -ConnectionTimeOut=60; //conection limit for ban -DosConnectionCount=200; //conections before adding to dos list -MainAccountInvalidLoginCount=10; //invalid logins to ban -SubAccountInvalidLoginCount=3; //subaccount invalid logins to disconnect -LSServerPort=80; //port for ls server http connection -LSServerHost=chat1.aionlegend.ru; //ls server host -BindAddress=0.0.0.0; //ip address to listen on, 0.0.0.0 - any -LogPath=/var/aion_otp; //auth system log file path, use /dev/null for disable -DosLogPath=/var/log/aion_otp_dos; // log path for dos ip list -Debug=0; //debug log - -//options name are case sensitive -//no spaces allowed in options -//; - end line character
\ No newline at end of file diff --git a/server/server/config_example b/server/server/config_example deleted file mode 100644 index 712ef6b..0000000 --- a/server/server/config_example +++ /dev/null @@ -1,17 +0,0 @@ -BanTime=60; //minutes -ConnListCheckInterval=30; //seconds -ConnectionCount=30; //conection limit for ban -ConnectionTimeOut=60; //conection limit for ban -DosConnectionCount=200; //conections before adding to dos list -MainAccountInvalidLoginCount=10; //invalid logins to ban -SubAccountInvalidLoginCount=3; //subaccount invalid logins to disconnect -LSServerPort=80; //port for ls server http connection -LSServerHost=chat1.aionlegend.ru; //ls server host -BindAddress=0.0.0.0; //ip address to listen on, 0.0.0.0 - any -LogPath=/var/aion_otp; //auth system log file path, use /dev/null for disable -DosLogPath=/var/log/aion_otp_dos; // log path for dos ip list -Debug=0; //debug log - -//options name are case sensitive -//no spaces allowed in options -//; - end line character
\ No newline at end of file diff --git a/server/server/main.cpp b/server/server/main.cpp index c7e69f7..a85efd6 100644 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -12,8 +12,6 @@ config *cfg; session::session(boost::asio::io_service& io_service, boost::asio::ssl::context& context, server *serv) : socket_(io_service, context), io_service_(io_service) { this_sid = get_random(8); - recv_data_[0] = 0; - snd_data_[0] = 0; server_ = serv; blacklisted = canceled = false; } @@ -92,7 +90,7 @@ void session::handle_handshake(const boost::system::error_code& error) logger->unlock(); } if (!error) - socket_.async_read_some(boost::asio::buffer(recv_data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); + socket_.async_read_some(boost::asio::buffer(recv_data_, 1024), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); else delete this; } @@ -105,9 +103,16 @@ void session::handle_write(const boost::system::error_code& error, size_t bytes_ logger->unlock(); } if(!error) - socket_.async_read_some(boost::asio::buffer(recv_data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); + { + recv_data_ = new byte[64]; + socket_.async_read_some(boost::asio::buffer(recv_data_, 64), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); + delete [] snd_data_; + } else + { + delete [] snd_data_; delete this; + } } void session::handle_write_close(const boost::system::error_code& error, size_t bytes_transferred) { @@ -117,6 +122,7 @@ void session::handle_write(const boost::system::error_code& error, size_t bytes_ *logger << time_str() << ": following write error occured: " << error.message() << " for client " << remote_ip << " session " << this_sid << "\n"; logger->unlock(); } + delete [] snd_data_; delete this; } void session::handle_auth_server_reply(const boost::system::error_code& error, size_t bytes_transferred) @@ -142,106 +148,52 @@ void session::proto_parser(std::vector<byte>& data) if(begin != data.end()) { std::vector<byte> local_data(begin, end); - std::vector<byte>::iterator it = std::find(local_data.begin(), local_data.end(), data_type_begin); + std::vector<byte>::iterator it = begin + 2; if(it != local_data.end()) { ++it; switch(*it) { - case 0xa0: //login request + case 0x01: //request type 1 { + if(canceled) + { + delete this; + break; + } logger->lock(); - *logger<< time_str() << ": recieved login request from "<<remote_ip << " session " << this_sid <<"\n"; + *logger<< time_str() << ": recieved request type 1 "<<remote_ip << " session " << this_sid <<"\n"; logger->unlock(); - //fill snd_data_ if(!blacklisted) { logger->lock(); - *logger<< time_str() << ": login request from "<<remote_ip<< " session " << this_sid << " are permited \n"; + *logger<< time_str() << ": request type 1 from "<<remote_ip<< " session " << this_sid << " are permited \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; - std::vector<byte>::iterator p2 = std::find(local_data.begin(), local_data.end(),data_c_end); - if(p2 == local_data.end()) - delete this; - std::vector<byte> tmp_vec(p1, p2); - if(tmp_vec[0] < proto_version) - { - logger->lock(); - *logger<< time_str() << ": old client version, login denied " << remote_ip <<" session " << this_sid << "\n"; - logger->unlock(); - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB0, 0xDB, 0xAA, 0xAB, 0x15, 0x15, 0xAC, 0x84, 0x84}; //login not permited - 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)); - } - else - { - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB0, 0xDB, 0xAA, 0xAB, 0x13, 0x13, 0xAC, 0x84, 0x84}; //login permited - 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 - { - logger->lock(); - *logger<< time_str() << ": WARNING old client version, allowed old clients for now " << remote_ip <<" session " << this_sid << "\n"; - logger->unlock(); - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB0, 0xDB, 0xAA, 0xAB, 0x13, 0x13, 0xAC, 0x84, 0x84}; //login permited - 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)); - } + std::vector<byte> data; + data.push_back(0x13); + data.push_back(0x13); + data.push_back(0x01); + //TODO: add data here + data.push_back(0x14); + data.push_back(0x14); + write_w_close(data); } else { logger->lock(); - *logger<< time_str() << ": login request from "<<remote_ip << " session " << this_sid <<" are denied \n"; + *logger<< time_str() << ": request type 1 from "<<remote_ip << " session " << this_sid <<" are denied \n"; logger->unlock(); - const unsigned char buf [] = {0x83, 0x83, 0xDA, 0xB0, 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)); - } - } - break; - case 0xa1: //main acc login request - { - logger->lock(); - *logger<< time_str() << ": recieved main account login info from " << remote_ip <<" session " << this_sid << "\n"; - logger->unlock(); - delete this; - } - break; - case 0xa2: //subacc login request - { - if(canceled) - { - delete this; - break; - } - delete this; - } - break; - case 0xa3: - { - if(canceled) - { - delete this; - break; + 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); } - delete this; } break; default: - socket_.async_read_some(boost::asio::buffer(recv_data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); break; } } @@ -256,7 +208,8 @@ void session::set_sid(std::string _sid) } void session::write_w_close(std::vector<byte>& data) { - memset(snd_data_, 0, 1024); + snd_data_ = new byte[data.size() + 1]; + memset(snd_data_, 0, data.size() + 1); for(int i = 0; i < data.size(); i++) snd_data_[i] = data[i]; if(cfg->debug()) @@ -265,12 +218,13 @@ void session::write_w_close(std::vector<byte>& data) *logger<< time_str() << ": Requested data write with socket close for " << remote_ip << " session " << this_sid << "\n"; logger->unlock(); } - 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)); + socket_.async_write_some(boost::asio::buffer(snd_data_, data.size() + 1), boost::bind(&session::handle_write_close, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } void session::write_w_response(std::vector<byte>& data) { - memset(snd_data_, 0, 1024); + snd_data_ = new byte[data.size()+1]; + memset(snd_data_, 0, data.size()+1); for(int i = 0; i < data.size(); i++) snd_data_[i] = data[i]; if(cfg->debug()) @@ -279,12 +233,13 @@ void session::write_w_response(std::vector<byte>& data) *logger<< time_str() << ": Requested data write with response for " << remote_ip << " session " << this_sid << "\n"; logger->unlock(); } - 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)); + socket_.async_write_some(boost::asio::buffer(snd_data_, data.size()+1), boost::bind(&session::handle_write, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } void session::write_wo_response(std::vector<byte>& data) { - memset(snd_data_, 0, 1024); + snd_data_ = new byte[data.size()+1]; + memset(snd_data_, 0, data.size()+1); for(int i = 0; i < data.size(); i++) snd_data_[i] = data[i]; if(cfg->debug()) @@ -293,13 +248,13 @@ void session::write_wo_response(std::vector<byte>& data) *logger<< time_str() << ": Requested data write with out response for " << remote_ip << " session " << this_sid << "\n"; logger->unlock(); } - socket_.async_write_some(boost::asio::buffer(snd_data_, max_length), boost::bind(&session::handle_operation, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); + socket_.async_write_some(boost::asio::buffer(snd_data_, data.size() +1), boost::bind(&session::handle_operation, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } void session::handle_operation(const boost::system::error_code& error, size_t bytes_transferred) { - + delete [] snd_data_; } void session::handle_read(const boost::system::error_code& error, size_t bytes_transferred) @@ -321,9 +276,13 @@ void session::handle_read(const boost::system::error_code& error, size_t bytes_t } std::vector<byte> copy(recv_data_, recv_data_ + bytes_transferred); proto_parser(copy); + delete [] recv_data_; } else + { + delete [] recv_data_; delete this; + } } catch (std::exception& e) { diff --git a/server/server/main.h b/server/server/main.h index 655aeff..c7eb853 100644 --- a/server/server/main.h +++ b/server/server/main.h @@ -7,21 +7,10 @@ typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket; using boost::asio::ip::tcp; typedef unsigned char byte; -const byte proto_version = 0x01; +const byte proto_version = 0x02; -const byte data_begin [] = {0x83, 0x83}; -const byte data_end [] = {0x84, 0x84}; -const byte data_type_begin = 0xda; -const byte data_type_end = 0xdb; -const byte _eq = 0xaa; -const byte data_c_begin = 0xab; -const byte delim [] = {0xaa, 0xab}; -const byte data_c_delim = 0xad; -const byte data_c_end = 0xac; -const byte sid_begin = 0xca; -const byte sid_end = 0xcb; -const byte reply_success [] = {0x13, 0x13}; -const byte reply_failure [] = {0x66, 0x66}; +const byte data_begin [] = {0x13, 0x13}; +const byte data_end [] = {0x14, 0x14}; class session; class server; @@ -53,9 +42,8 @@ public: void handle_read(const boost::system::error_code& error, size_t bytes_transferred); private: ssl_socket socket_; - enum { max_length = 2048 }; - unsigned char recv_data_[max_length]; - unsigned char snd_data_[max_length]; + unsigned char *recv_data_; + unsigned char *snd_data_; boost::asio::io_service& io_service_; std::string sid, remote_ip, this_sid; server *server_; @@ -80,11 +68,11 @@ struct conn_count } const bool operator==(const conn_count& c) { - return this->ip == c.ip; + return ip == c.ip; } const bool operator==(const std::string& c) { - return this->ip == c; + return ip == c; } }; |