summaryrefslogtreecommitdiff
path: root/server/src/server.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-09 08:16:50 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2015-08-09 08:16:50 +0300
commit704bf55df5fae51bf0e8d86679ee7f34e22553d2 (patch)
tree68385079dec7204d8c646d4937e93d68cd4cbd42 /server/src/server.cpp
parent5a4cbe950cd653385fc6e93aa860542b01bdf1bc (diff)
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)
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)