summaryrefslogtreecommitdiff
path: root/server/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.cpp')
-rw-r--r--server/server.cpp127
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 "";
}