summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/api_core.cpp1
-rw-r--r--server/src/main.cpp10
-rw-r--r--server/src/modules_handler.cpp6
-rw-r--r--server/src/server.cpp19
-rw-r--r--server/src/server_session.cpp44
5 files changed, 65 insertions, 15 deletions
diff --git a/server/src/api_core.cpp b/server/src/api_core.cpp
index c8f0032..66df614 100644
--- a/server/src/api_core.cpp
+++ b/server/src/api_core.cpp
@@ -23,6 +23,7 @@
#include "main.h"
#include "api_module_base.h"
#include <boost/foreach.hpp>
+#include "config.h"
extern runtime_config_s runtime_config;
diff --git a/server/src/main.cpp b/server/src/main.cpp
index a876b42..efbd92b 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -27,7 +27,7 @@
#include "utilities.h"
#include "server.h"
#include "main.h"
-
+#include "config.h"
core_api *module_api = nullptr;
@@ -76,9 +76,13 @@ int main(int argc, char *argv[])
else
std::cerr<<"failed to load config: \"" + config_path + "\", file does not exists or is not regular file\n";
}
+ //load all config variables here
+ runtime_config.settings.verbosity = runtime_config.config_file.get<short>("server.verbosity", 0);
+ daemon = runtime_config.config_file.get<bool>("server.daemon", false);
+ //override config from command line here
if(vm.count("verbosity"))
{
- runtime_config.verbosity = vm["verbosity"].as<short>();
+ runtime_config.settings.verbosity = vm["verbosity"].as<short>();
}
if(vm.count("help"))
@@ -129,7 +133,7 @@ int main(int argc, char *argv[])
modules->load_modules();
}
- std::string default_metadata_module_name = runtime_config.config_file.get<std::string>("default_metadata_module", "");
+ std::string default_metadata_module_name = runtime_config.config_file.get<std::string>("server.default_metadata_module", "");
if(default_metadata_module_name == "")
{
if(!modules->get_metadata_modules().empty())
diff --git a/server/src/modules_handler.cpp b/server/src/modules_handler.cpp
index 818539b..d69fabf 100644
--- a/server/src/modules_handler.cpp
+++ b/server/src/modules_handler.cpp
@@ -30,11 +30,9 @@
+#include "config.h"
-
-namespace bpt = boost::property_tree;
-
extern runtime_config_s runtime_config;
@@ -131,7 +129,7 @@ std::string modules_handler::list_modules_single_type_internal(const std::list<m
buf += (*i)->get_module_info().name;
buf += "\n\tDescription: " +(*i)->get_module_info().description;
buf += "\n\tVersion: " + (*i)->get_module_info().version;
- if(runtime_config.verbosity >= 1)
+ if(runtime_config.settings.verbosity >= 1)
{
buf += "\n\tAvailable options:";
for(auto i1 = (*i)->get_module_info().default_settings.begin(), end = (*i)->get_module_info().default_settings.end(); i1 != end; ++i1)
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)
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)