From c5839d35c04a8589350583ecfb5397f96d0ceaf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lien=20Sell=C3=A6g?= Date: Wed, 26 Apr 2017 18:47:05 +0200 Subject: [PATCH] session resource now handles basic information --- toREST/src/main.cxx | 55 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/toREST/src/main.cxx b/toREST/src/main.cxx index af344df..200ed43 100644 --- a/toREST/src/main.cxx +++ b/toREST/src/main.cxx @@ -1,6 +1,8 @@ #include #include #include +#include +#include typedef SimpleWeb::Server HttpServer; @@ -8,30 +10,57 @@ using namespace std; int main(int argc, char *argv[]) { int http_port=8080, http_threads=4; + const boost::filesystem::path root_dir="/home/zalox/downloads"; + const boost::filesystem::path default_download_dir=root_dir/"toREST"; + if(!boost::filesystem::exists(default_download_dir)){ + boost::system::error_code ec; + boost::filesystem::create_directories(default_download_dir,ec); + if(ec){ + std::cout << ec.message() << "\n"; + return 1; + } + } HttpServer http_server(http_port,http_threads); - libtorrent::session session; - + const auto stats_metrics = libtorrent::session_stats_metrics(); http_server.default_resource["GET"]=[](std::shared_ptr resp, std::shared_ptr req) { auto response = http::response(); response.set_status(http::not_found); *resp << response; }; - http_server.resource["^/session(\\?.*)?\\/?$"]["GET"]=[&session](std::shared_ptr resp, std::shared_ptr req) { + http_server.resource["^/session(\\?.*)?\\/?$"]["GET"]=[&](std::shared_ptr resp, std::shared_ptr req) { + auto response = http::response(); + if (session.is_valid()) { + const auto settings = session.get_settings(); + response.set_body({ + { "paused", session.is_paused() }, + { "port", session.listen_port() }, + { "dht_enabled", session.is_dht_running() }, + { "down_limit", settings.get_int(settings.download_rate_limit) }, + { "up_limit", settings.get_int(settings.upload_rate_limit) }, + { "torrents", session.get_torrents().size() }, //TODO Optimize + { "default_download_dir", default_download_dir.filename().string() }, + { "root_dir", root_dir.string() }, + }); + } else { + auto response_code = http::code(http::service_unavailable); + response.set_body({{response_code.first, response_code.second}}); + response.set_status(response_code.first); + } + *resp << response; + }; + + http_server.resource["^/session/torrents(\\?.*)?\\/?$"]["GET"]=[&session](std::shared_ptr resp, std::shared_ptr req) { auto response = http::response(); - const auto path = util::uri::parse(req->path); if (session.is_valid()) { - const auto session_settings=session.get_settings(); - - response.set_body( - { - {"paused",session.is_paused()}, - {"up_limit",session.get_settings()} - } - ); + response.set_body({ + { { "torrents", nlohmann::json::array() } }, + }); } else { - + auto response_code = http::code(http::service_unavailable); + response.set_body({{response_code.first, response_code.second}}); + response.set_status(response_code.first); } *resp << response; };