summaryrefslogtreecommitdiff
path: root/server/src/server_session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r--server/src/server_session.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp
index 3fc3fb4..234f130 100644
--- a/server/src/server_session.cpp
+++ b/server/src/server_session.cpp
@@ -24,11 +24,19 @@
#include "server_session.h"
#include "../../protocol/udm.pb.h"
#include "utilities.h"
+#include "config.h"
+#include "socket_wraper.h"
-server_session::server_session(boost::asio::io_service &s) : socket_(s)
+extern runtime_config_s runtime_config;
+
+
+
+
+server_session::server_session(boost::asio::io_service &s, boost::asio::ssl::context *c) : io_service_(s), context_(c)
{
}
-boost::asio::ip::tcp::socket& server_session::socket()
+
+socket_wraper* server_session::socket()
{
return socket_;
}
@@ -36,11 +44,33 @@ boost::asio::ip::tcp::socket& server_session::socket()
void server_session::run()
{
- recv_data_ = new char[4];
- boost::asio::async_read(socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
+ if(runtime_config.config_file.get<bool>("server.enable_encryption", false))
+ {
+ socket_ = new socket_wraper(new boost::asio::ssl::stream<boost::asio::ip::tcp::socket>(io_service_, *context_));
+ socket_->get_ssl_socket().async_handshake(boost::asio::ssl::stream_base::server, boost::bind(&server_session::handle_handshake, this, boost::asio::placeholders::error));
+ }
+ else
+ {
+ socket_ = new socket_wraper(new boost::asio::ip::tcp::socket(io_service_));
+ recv_data_ = new char[4];
+ boost::asio::async_read(*socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
+ }
+}
+void server_session::handle_handshake(const boost::system::error_code& error)
+{
+ if (!error)
+ {
+ recv_data_ = new char[4];
+ boost::asio::async_read(*socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
+ }
+ else
+ {
+ delete this;
+ }
}
+
void server_session::handle_read(const boost::system::error_code& error, size_t bytes_transferred)
{
if (!error)
@@ -51,7 +81,7 @@ void server_session::handle_read(const boost::system::error_code& error, size_t
delete [] recv_data_;
char *buf = new char[size];
boost::system::error_code ec;
- socket_.read_some(boost::asio::buffer(buf, size), ec);
+ boost::asio::read(*socket_, boost::asio::buffer(buf, size), ec);
if(ec)
{
@@ -71,7 +101,7 @@ void server_session::handle_read(const boost::system::error_code& error, size_t
//parsed = true;
handle_command(&msg);
recv_data_ = new char[4];
- boost::asio::async_read(socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
+ boost::asio::async_read(*socket_, boost::asio::buffer(recv_data_, 4), boost::bind(&server_session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
// if(!parsed)
else
@@ -100,7 +130,7 @@ void server_session::send_message(server_msg *msg)
{
int size = 0;
std::shared_ptr<char*> ptr = pack_msg(msg, &size);
- boost::asio::async_write(socket_, boost::asio::buffer(*ptr, size), boost::bind(&server_session::handle_write, this, boost::asio::placeholders::error));
+ boost::asio::async_write(*socket_, boost::asio::buffer(*ptr, size), boost::bind(&server_session::handle_write, this, boost::asio::placeholders::error));
}
void server_session::handle_write(const boost::system::error_code& error)