diff options
Diffstat (limited to 'server/server.cpp')
-rw-r--r-- | server/server.cpp | 127 |
1 files changed, 28 insertions, 99 deletions
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: "<<data_<<"\n"; - if(strstr(data_, "restart vbox")) - { - FILE *f = popen("/sbin/runscript /etc/init.d/vbox_headles restart --nodeps","r"); - if(f != NULL) - { - char buf[128]; - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - int s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - } - else if(strstr(data_, "reboot now")) - { - FILE *f = popen("reboot","r"); - if(f != NULL) - { - char buf[128]; - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - int s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - } - else if(strstr(data_, "halt now")) - { - FILE *f = popen("halt","r"); - if(f != NULL) - { - char buf[128]; - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - int s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - } - else if(strstr(data_, "restart cups")) - { - FILE *f = popen("/sbin/runscript /etc/init.d/cupsd restart --nodeps","r"); - if(f != NULL) - { - char buf[128]; - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - int s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - } - else if(strstr(data_, "restart ppp")) - { - FILE *f = popen("/sbin/runscript /etc/init.d/net.ppp0 stop --nodeps","r"); - char buf[128]; - int s = 0; - if(f != NULL) - { - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - sleep(3); - f = popen("killall pppd","r"); - if(f == NULL) - { - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - sleep(1); - f = popen("/sbin/runscript /etc/init.d/net.ppp0 start --nodeps","r"); - if(f == NULL) - { - while(fgets(buf, 128, f) != NULL) - ; //TODO: do something with output - s = pclose(f); // TODO: handle exit status - } - else - ; //TODO: handle fail - } -/* boost::asio::async_write(socket_, - boost::asio::buffer(data_, bytes_transferred), - boost::bind(&session::handle_write, this, - boost::asio::placeholders::error)); */ - } - delete this; + return ""; } |