summaryrefslogtreecommitdiff
path: root/server/src/server_session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r--server/src/server_session.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp
index ca4df5a..1a3c08c 100644
--- a/server/src/server_session.cpp
+++ b/server/src/server_session.cpp
@@ -100,7 +100,12 @@ void server_session::handle_read(const boost::system::error_code& error, size_t
{
//parsed = true;
BOOST_LOG_TRIVIAL(trace)<<"received message:\n"<<msg.DebugString();
- handle_command(&msg);
+ if(!handle_command(&msg))
+ {
+ //cannot handle command, delete session
+ delete this;
+ return;
+ }
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));
}
@@ -118,6 +123,9 @@ void server_session::handle_read(const boost::system::error_code& error, size_t
}
}
+//helper functions
+//TODO: simplify
+
void add_runtime_module_setting(const std::pair<std::string, setting_s> &s, module_info *mi)
{
setting *msi = mi->add_settings();
@@ -259,13 +267,12 @@ void add_download_content_menu_element(module_download_menu_element_info_s &elem
}
-void server_session::handle_command(client_msg *msg)
+bool server_session::handle_command(client_msg *msg)
{
if(msg->type() != CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST && clients.find(msg->auth_token()) == clients.end())
{
BOOST_LOG_TRIVIAL(error)<<"unauthorized client trying to execute command";
- delete this; //unauthorized client, delete session
- return;
+ return false;
}
switch(msg->type())
{
@@ -440,11 +447,14 @@ void server_session::handle_command(client_msg *msg)
d->set_name(ds.name);
}
send_message(&msg);
+ return true;
}
break;
default:
+ return false;
break;
}
+ return true;
}
void server_session::send_message(server_msg *msg)