diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-31 20:45:06 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-08-31 20:45:06 +0300 |
commit | 4b4002115d6c7b5c5113d1e2e6e9025565e1c9bb (patch) | |
tree | 4e4ecc6d26052bb5f50acd0c1a9260aceb5479fd /server/src/server_session.cpp | |
parent | 12eba4d75931c5e48dac70b1a7dbad7861d059df (diff) |
protocol:
download struct must have module_name field
server:
core:
implemented SERVER_DOWNLOADS_LIST_REPLY (draft)
added global downloads list
client:
using std::string instead of QString to avoid unnecessary conversions
Diffstat (limited to 'server/src/server_session.cpp')
-rw-r--r-- | server/src/server_session.cpp | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/server/src/server_session.cpp b/server/src/server_session.cpp index c9b8e91..d0ff26c 100644 --- a/server/src/server_session.cpp +++ b/server/src/server_session.cpp @@ -34,7 +34,7 @@ extern modules_handler *modules; -server_session::server_session(boost::asio::io_service &s, runtime_config_s &config, std::map<std::string, client*> &clients_, boost::asio::ssl::context *c) : io_service_(s), context_(c), runtime_config(config), clients(clients_) +server_session::server_session(boost::asio::io_service &s, runtime_config_s &config, std::map<std::string, client*> &clients_, std::map<int, download_internal_s> &downloads_, boost::asio::ssl::context *c) : io_service_(s), context_(c), runtime_config(config), clients(clients_), downloads(downloads_) { if(runtime_config.config_file.get<bool>("server.enable_encryption", false)) { @@ -120,6 +120,12 @@ void server_session::handle_read(const boost::system::error_code& error, size_t void 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; + } switch(msg->type()) { case CLIENT_MSG_TYPE::CLIENT_AUTH_REQUEST: @@ -268,7 +274,37 @@ void server_session::handle_command(client_msg *msg) break; case CLIENT_MSG_TYPE::CLIENT_DOWNLOADS_LIST_REQUEST: { - //TODO: + //TODO: thread safety + //draft implementation, need a lot of optimizations + server_msg msg; + msg.set_type(SERVER_MSG_TYPE::SERVER_DOWNLOADS_LIST_REPLY); + for(auto i : downloads) + { + server_download_reply *r = msg.add_downloads(); + download *d = r->mutable_download(); + d->set_id(i.first); //set core_id for later access + d->set_module_name(i.second.module_name); + module_base *module = nullptr; + for(auto dm : modules->get_downloader_modules()) + { + if(dm->get_module_info().name == i.second.module_name) + { + module = dm; + break; + } + } + if(!module) + { + //downloader module not found, this should be a fatal error + continue; + } + module_downloader *dm = static_cast<module_downloader*>(module); + download_s ds = dm->get_download(i.second.module_id); + d->set_downloaded(ds.downloaded); + d->set_size(ds.size); + d->set_name(ds.name); + } + send_message(&msg); } break; default: |