From 1d41574c6e8e7bbf3705645feb429df6281ccb83 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Tue, 12 Feb 2013 20:36:08 +0200 Subject: working on service support --- server/server.cpp | 127 ++++++++++++------------------------------------------ 1 file changed, 28 insertions(+), 99 deletions(-) (limited to 'server/server.cpp') diff --git a/server/server.cpp b/server/server.cpp index bdd2cfb..7a13fe6 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -17,113 +17,42 @@ #include "headers.h" -void session::handle_handshake(const boost::system::error_code& error) + + +server::server(boost::asio::io_service& io_service, short port) : +io_service_(io_service), acceptor_(io_service, tcp::endpoint(boost::asio::ip::address_v4(), port)), context_(boost::asio::ssl::context::sslv23) +{ + context_.set_options(boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2); + context_.set_password_callback(boost::bind(&server::get_password, this)); + context_.use_certificate_chain_file("/etc/restarter_server/serv.crt"); + context_.use_rsa_private_key_file("/etc/restarter_server/serv.key", boost::asio::ssl::context::pem); + context_.load_verify_file("/etc/restarter_server/ca.crt"); + context_.set_verify_mode(boost::asio::ssl::verify_peer | boost::asio::ssl::verify_client_once); + start_accept(); +} + + +void server::start_accept() +{ + session* new_session = new session(io_service_, context_); + acceptor_.async_accept(new_session->socket(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error)); +} + + +void server::handle_accept(session* new_session, const boost::system::error_code& error) { if (!error) { - socket_.async_read_some(boost::asio::buffer(data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); + new_session->start(); } else { - delete this; + delete new_session; } + start_accept(); } -void session::handle_read(const boost::system::error_code& error, size_t bytes_transferred) +std::string server::get_password() const //TODO: add key password support { - if (!error) - { -// std::cout<<"recieved: "<