summaryrefslogtreecommitdiff
path: root/server/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.cpp')
-rw-r--r--server/server.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/server/server.cpp b/server/server.cpp
new file mode 100644
index 0000000..bdd2cfb
--- /dev/null
+++ b/server/server.cpp
@@ -0,0 +1,129 @@
+// Copyright © 2013 sss
+//.
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//.
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include "headers.h"
+
+
+void session::handle_handshake(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));
+ }
+ else
+ {
+ delete this;
+ }
+}
+
+void session::handle_read(const boost::system::error_code& error, size_t bytes_transferred)
+{
+ 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;
+}