Browse Source

cleanup: seperate session in decl and imp

master
Jørgen Lien Sellæg 10 years ago
parent
commit
32ea1a1170
  1. 74
      toREST/include/session.hpp
  2. 73
      toREST/src/session.cpp

74
toREST/include/session.hpp

@ -18,59 +18,17 @@ namespace session {
// virtual std::shared_ptr<libtorrent::session> get_session() = 0; // virtual std::shared_ptr<libtorrent::session> get_session() = 0;
}; };
class translate { class translate
public: { public: static nlohmann::json to_json(const libtorrent::session_handle &handle); };
static nlohmann::json to_json(const libtorrent::session_handle &handle){
nlohmann::json session_json;
return session_json;
}
};
class manager : public basic_manager { class manager : public basic_manager {
public: public:
// std::shared_ptr<libtorrent::session> get_session() override { return handle; } // std::shared_ptr<libtorrent::session> get_session() override { return handle; }
void set_session(std::shared_ptr<libtorrent::session> session) override { handle=session; } void set_session(std::shared_ptr<libtorrent::session> session) override { handle=session; }
nlohmann::json get_json() const override { nlohmann::json get_json() const override ;
nlohmann::json session_json;
session_json["peer_id"] = handle->id().to_string();
session_json["is_paused"] = handle->is_paused();
session_json["is_listening"] = handle->is_listening();
session_json["listen_port"] = handle->listen_port();
session_json["ssl_listen_port"] = handle->ssl_listen_port();
return session_json;
};
bool is_valid() const override { return handle && handle->is_valid(); } bool is_valid() const override { return handle && handle->is_valid(); }
bool patch(const nlohmann::json &data) override { bool patch(const nlohmann::json &data) override ;
int is_paused=data["is_paued"];
int listen_port=data["listen_port"];
auto pause = [this](int is_paused){
if(is_paused!=-1){
if(is_paused==handle->is_paused()){
return true;
}else if(is_paused==true){
handle->resume();
return true;
}else if(is_paused==false){
handle->pause();
return true;
}
}
return false;
};
auto listen = [this](int listen_port){
if(listen_port!=-1&&listen_port>6880){
libtorrent::settings_pack sp;
sp.set_str(libtorrent::settings_pack::listen_interfaces,"0.0.0.0:"+std::to_string(listen_port));
handle->apply_settings(sp);
return true;
}
return false;
};
return pause(is_paused) && listen(listen_port);
};
private: private:
std::shared_ptr<libtorrent::session> handle; std::shared_ptr<libtorrent::session> handle;
}; };
@ -101,29 +59,7 @@ namespace session {
* @param[in] data takes an JSON object with at least one `action` set. * @param[in] data takes an JSON object with at least one `action` set.
* available `action`s are `is_paused<bool>` `listen_port<bool>` * available `action`s are `is_paused<bool>` `listen_port<bool>`
*/ */
virtual void patch(const nlohmann::json data=nlohmann::json::object()) override { virtual void patch(const nlohmann::json&data=nlohmann::json::object());
if(mgr && mgr->is_valid()){
if(data.is_object() && !data.is_null()){
int is_paused=util::json::get<int>("is_paused",data,-1),
listen_port=util::json::get<int>("listen_port",data,-1);
bool at_at_least_one_option_is_set=is_paused!=-1||listen_port!=-1;
if(at_at_least_one_option_is_set){
nlohmann::json patch={{"is_paused",is_paused},{"listen_port",listen_port}};
if(mgr->patch(patch)){
return get_response().set_status(http::ok);
}else{
return get_response().set_status(http::internal_server_error);
}
}else{
return get_response().set_status(http::bad_request);
}
}
return get_response().set_status(http::bad_request);
// auto data=data.array();
}else{
return get_response().set_status(http::service_unavailable);
}
}
// @todo should we return service unavailable or just method not allowed? // @todo should we return service unavailable or just method not allowed?
virtual void del(nlohmann::json arg=nullptr) override { get_response().set_status(http::method_not_allowed); } virtual void del(nlohmann::json arg=nullptr) override { get_response().set_status(http::method_not_allowed); }

73
toREST/src/session.cpp

@ -0,0 +1,73 @@
#include <session.hpp>
namespace session {
nlohmann::json translate::to_json(const libtorrent::session_handle &handle){
nlohmann::json session_json;
return session_json;
}
nlohmann::json manager::get_json() const {
nlohmann::json session_json;
session_json["peer_id"] = handle->id().to_string();
session_json["is_paused"] = handle->is_paused();
session_json["is_listening"] = handle->is_listening();
session_json["listen_port"] = handle->listen_port();
session_json["ssl_listen_port"] = handle->ssl_listen_port();
return session_json;
}
bool manager::patch(const nlohmann::json &data) {
int is_paused=data["is_paued"];
int listen_port=data["listen_port"];
auto pause = [this](int is_paused){
if(is_paused!=-1){
if(is_paused==handle->is_paused()){
return true;
}else if(is_paused==true){
handle->resume();
return true;
}else if(is_paused==false){
handle->pause();
return true;
}
}
return false;
};
auto listen = [this](int listen_port){
if(listen_port!=-1&&listen_port>6880){
libtorrent::settings_pack sp;
sp.set_str(libtorrent::settings_pack::listen_interfaces,"0.0.0.0:"+std::to_string(listen_port));
handle->apply_settings(sp);
return true;
}
return false;
};
return pause(is_paused) && listen(listen_port);
};
void resource::patch(const nlohmann::json &data){
if(mgr && mgr->is_valid()){
if(data.is_object() && !data.is_null()){
int is_paused=util::json::get<int>("is_paused",data,-1),
listen_port=util::json::get<int>("listen_port",data,-1);
bool at_at_least_one_option_is_set=is_paused!=-1||listen_port!=-1;
if(at_at_least_one_option_is_set){
nlohmann::json patch={{"is_paused",is_paused},{"listen_port",listen_port}};
if(mgr->patch(patch)){
return get_response().set_status(http::ok);
}else{
return get_response().set_status(http::internal_server_error);
}
}else{
return get_response().set_status(http::bad_request);
}
}
return get_response().set_status(http::bad_request);
// auto data=data.array();
}else{
return get_response().set_status(http::service_unavailable);
}
}
}
Loading…
Cancel
Save