diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-14 12:31:13 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-14 12:31:13 +0300 |
commit | 1d6ced38a89547aaf2cc3745876360f0e5086474 (patch) | |
tree | bbc627e26fb759884d8aefd4a789805a98beec31 /server/src/server_session.cpp | |
parent | b8dd66d71676603dc3081b1de07f2e76732737bd (diff) |
protocol:
added module field to client_download_add_request as required
server:
small handle_command redesign to avoid crashes
client-qt:
implemented all basic features of download add widget (working now, tested)
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r-- | server/src/server_session.cpp | 18 |
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) |