summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Borisov <borisov.alexandr@rambler.ru>2011-10-23 04:12:00 +0300
committerAlex Borisov <borisov.alexandr@rambler.ru>2011-10-23 04:12:00 +0300
commit1f9964403d3cb448b7e866d8adcb5560f9c46c33 (patch)
tree1a7e7095e18c907c0c4964a9c677794903197ef1
parent21ad7eac963bc329395fa893300fb5c8f721fd77 (diff)
parent6bd0f7454e62bc27ec8390610cdacb3962e1e658 (diff)
Merge branch 'master' of ssh://sss.chaoslab.ru//home/private_git/proxy_ui
-rw-r--r--certs/ca.crt19
-rw-r--r--certs/ca.key10
-rw-r--r--certs/client.crt61
-rw-r--r--certs/client.csr9
-rw-r--r--certs/client.key10
-rw-r--r--client/config_example17
-rw-r--r--server/server/config_example17
-rw-r--r--server/server/main.cpp139
-rw-r--r--server/server/main.h26
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;
}
};