summaryrefslogtreecommitdiff
path: root/server/src/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.cpp')
-rw-r--r--server/src/server.cpp19
1 files changed, 18 insertions, 1 deletions
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<bool>("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<std::string>("ssl_certificate", "")); //must be set
+ context_->use_private_key_file(runtime_config.config_file.get<std::string>("ssl_key", ""), boost::asio::ssl::context::pem); //must be set
+ context_->use_tmp_dh_file(runtime_config.config_file.get<std::string>("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<bool>("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)