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.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'server/src/server.cpp') diff --git a/server/src/server.cpp b/server/src/server.cpp index 2436fda..818cc10 100644 --- a/server/src/server.cpp +++ b/server/src/server.cpp @@ -24,20 +24,37 @@ #include "server.h" #include "server_session.h" #include "utilities.h" +#include "config.h" #include "../../protocol/udm.pb.h" +#include "socket_wraper.h" + +extern runtime_config_s runtime_config; server::server(boost::asio::io_service& io_service, short port) : io_service_(io_service), acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) { + if(runtime_config.config_file.get("server.enable_encryption", false)) + { + //TODO: validate encryption files path's + context_ = new boost::asio::ssl::context(boost::asio::ssl::context::tlsv12_server); + context_->set_options(boost::asio::ssl::context::single_dh_use); + //context_.set_password_callback(boost::bind(&server::get_password, this)); //TODO: add password support + context_->use_certificate_chain_file(runtime_config.config_file.get("ssl_certificate", "")); //must be set + context_->use_private_key_file(runtime_config.config_file.get("ssl_key", ""), boost::asio::ssl::context::pem); //must be set + context_->use_tmp_dh_file(runtime_config.config_file.get("ssl_dh", "")); //must be set + } start_accept(); } void server::start_accept() { server_session* new_session = new server_session(io_service_); - acceptor_.async_accept(new_session->socket(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error)); + if(runtime_config.config_file.get("server.enable_encryption", false)) + acceptor_.async_accept(new_session->socket()->get_ssl_socket().lowest_layer(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error)); + else + acceptor_.async_accept(new_session->socket()->get_socket(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error)); } void server::handle_accept(server_session* new_session, const boost::system::error_code& error) -- cgit v1.2.3