From 704bf55df5fae51bf0e8d86679ee7f34e22553d2 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Sun, 9 Aug 2015 08:16:50 +0300 Subject: client-qt: socket wraper to work with both ssl and plain connection server: socket wraper to work with both ssl and plain connection bit of config related changes ssl support (untested) --- server/src/server_session.cpp | 44 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) (limited to 'server/src/server_session.cpp') 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("server.enable_encryption", false)) + { + socket_ = new socket_wraper(new boost::asio::ssl::stream(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 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) -- cgit v1.2.3