From 89b35af7a6ce157eda7bc5bff20cb3726ca59a80 Mon Sep 17 00:00:00 2001 From: rakshasa Date: Sat, 8 Feb 2025 18:12:09 +0100 Subject: [PATCH] Fixed threaded tracker feature compatibility. --- src/command_download.cc | 9 ++++----- src/core/download.h | 8 +++----- src/display/window_download_statusbar.cc | 2 +- src/display/window_tracker_list.cc | 10 +++++----- test/rpc/command_test.cc | 16 ++++++++-------- 5 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/command_download.cc b/src/command_download.cc index 1a01154e..6796b39c 100644 --- a/src/command_download.cc +++ b/src/command_download.cc @@ -322,7 +322,7 @@ retrieve_d_bitfield(core::Download* download) { struct call_add_d_peer_t { call_add_d_peer_t(core::Download* d, int port) : m_download(d), m_port(port) { } - void operator() (const sockaddr* sa, int err) { + void operator() (const sockaddr* sa, [[maybe_unused]] int err) { if (sa == NULL) { lt_log_print(torrent::LOG_TORRENT_WARN, "could not resolve hostname for added peer"); } else { @@ -627,7 +627,6 @@ d_list_remove(core::Download* download, const torrent::Object& rawArgs, const ch #define CMD2_BIND_FL std::bind(&core::Download::file_list, std::placeholders::_1) #define CMD2_BIND_PL std::bind(&core::Download::c_peer_list, std::placeholders::_1) #define CMD2_BIND_TL std::bind(&core::Download::tracker_list, std::placeholders::_1) -#define CMD2_BIND_TC std::bind(&core::Download::tracker_controller, std::placeholders::_1) #define CMD2_BIND_INFO std::bind(&core::Download::info, std::placeholders::_1) #define CMD2_BIND_DATA std::bind(&core::Download::data, std::placeholders::_1) @@ -871,8 +870,8 @@ initialize_command_download() { CMD2_DL ("d.wanted_chunks", CMD2_ON_DATA(wanted_chunks)); // Do not exposre d.tracker_announce.force to regular users. - CMD2_DL_V ("d.tracker_announce", std::bind(&torrent::Download::manual_request, CMD2_BIND_DL, false)); - CMD2_DL_V ("d.tracker_announce.force", std::bind(&torrent::Download::manual_request, CMD2_BIND_DL, true)); + CMD2_DL_V ("d.tracker_announce", std::bind(&torrent::Download::manual_request, CMD2_BIND_DL, false)); + CMD2_DL_V ("d.tracker_announce.force", std::bind(&torrent::Download::manual_request, CMD2_BIND_DL, true)); CMD2_DL ("d.tracker_numwant", std::bind(&torrent::TrackerList::numwant, CMD2_BIND_TL)); CMD2_DL_VALUE_V ("d.tracker_numwant.set", std::bind(&torrent::TrackerList::set_numwant, CMD2_BIND_TL, std::placeholders::_2)); @@ -881,7 +880,7 @@ initialize_command_download() { CMD2_DL ("d.tracker_size", std::bind(&core::Download::tracker_list_size, std::placeholders::_1)); CMD2_DL_LIST ("d.tracker.insert", std::bind(&download_tracker_insert, std::placeholders::_1, std::placeholders::_2)); - CMD2_DL_VALUE_V ("d.tracker.send_scrape", std::bind(&torrent::TrackerController::scrape_request, CMD2_BIND_TC, std::placeholders::_2)); + CMD2_DL_VALUE_V ("d.tracker.send_scrape", [](auto download, uint64_t arg) { download->tracker_controller().scrape_request(arg); }); CMD2_DL ("d.directory", CMD2_ON_FL(root_dir)); CMD2_DL_STRING_V("d.directory.set", std::bind(&apply_d_directory, std::placeholders::_1, std::placeholders::_2)); diff --git a/src/core/download.h b/src/core/download.h index 0239c944..f2b51941 100644 --- a/src/core/download.h +++ b/src/core/download.h @@ -59,7 +59,6 @@ public: typedef torrent::FileList file_list_type; typedef torrent::PeerList peer_list_type; typedef torrent::TrackerList tracker_list_type; - typedef torrent::TrackerController tracker_controller_type; typedef torrent::ConnectionList connection_list_type; typedef download_type::ConnectionType connection_type; @@ -102,10 +101,9 @@ public: torrent::Object* bencode() { return m_download.bencode(); } - tracker_list_type* tracker_list() { return m_download.tracker_list(); } - uint32_t tracker_list_size() const { return m_download.tracker_list()->size(); } - - tracker_controller_type* tracker_controller() { return m_download.tracker_controller(); } + torrent::TrackerControllerWrapper tracker_controller() { return m_download.tracker_controller(); } + tracker_list_type* tracker_list() { return m_download.tracker_list(); } + uint32_t tracker_list_size() const { return m_download.tracker_list()->size(); } connection_list_type* connection_list() { return m_download.connection_list(); } uint32_t connection_list_size() const; diff --git a/src/display/window_download_statusbar.cc b/src/display/window_download_statusbar.cc index dfc7347d..bb0ccd8a 100644 --- a/src/display/window_download_statusbar.cc +++ b/src/display/window_download_statusbar.cc @@ -58,7 +58,7 @@ WindowDownloadStatusbar::redraw() { print_download_status(buffer, last, m_download); m_canvas->print(0, 2, "[%c:%i] %s", m_download->tracker_list()->has_active() ? 'C' : ' ', - (int)(m_download->download()->tracker_controller()->seconds_to_next_timeout()), + (int)(m_download->download()->tracker_controller().seconds_to_next_timeout()), buffer); } diff --git a/src/display/window_tracker_list.cc b/src/display/window_tracker_list.cc index ece36795..989f31df 100644 --- a/src/display/window_tracker_list.cc +++ b/src/display/window_tracker_list.cc @@ -26,14 +26,14 @@ WindowTrackerList::redraw() { m_canvas->erase(); unsigned int pos = 0; - torrent::TrackerList* tl = m_download->tracker_list(); - torrent::TrackerController* tc = m_download->tracker_controller(); + auto tl = m_download->tracker_list(); + auto tc = m_download->tracker_controller(); m_canvas->print(2, pos, "Trackers: [Key: %08x] [%s %s %s]", tl->key(), - tc->is_requesting() ? "req" : " ", - tc->is_promiscuous_mode() ? "prom" : " ", - tc->is_failure_mode() ? "fail" : " "); + tc.is_requesting() ? "req" : " ", + tc.is_promiscuous_mode() ? "prom" : " ", + tc.is_failure_mode() ? "fail" : " "); ++pos; if (tl->size() == 0 || *m_focus >= tl->size()) diff --git a/test/rpc/command_test.cc b/test/rpc/command_test.cc index 274333d5..e34867d2 100644 --- a/test/rpc/command_test.cc +++ b/test/rpc/command_test.cc @@ -6,8 +6,8 @@ CPPUNIT_TEST_SUITE_REGISTRATION(CommandTest); bool command_stack_all_empty() { - return std::find_if(rpc::command_base::stack_begin(), rpc::command_base::stack_end(), - std::mem_fun_ref(&torrent::Object::is_not_empty)) == rpc::command_base::stack_end(); + return std::all_of(rpc::command_base::stack_begin(), rpc::command_base::stack_end(), + [](auto& obj) { return obj.is_empty(); }); } void @@ -31,7 +31,7 @@ CommandTest::test_stack() { last_stack = rpc::command_base::push_stack(args, &stack); CPPUNIT_ASSERT(!command_stack_all_empty()); CPPUNIT_ASSERT(rpc::command_base::stack_begin()->as_value() == 1); - + rpc::command_base::pop_stack(&stack, last_stack); CPPUNIT_ASSERT(command_stack_all_empty()); @@ -44,7 +44,7 @@ CommandTest::test_stack() { CPPUNIT_ASSERT(!command_stack_all_empty()); CPPUNIT_ASSERT(rpc::command_base::current_stack[0].as_value() == 2); CPPUNIT_ASSERT(rpc::command_base::current_stack[1].as_value() == 3); - + rpc::command_base::pop_stack(&stack, last_stack); CPPUNIT_ASSERT(command_stack_all_empty()); } @@ -59,7 +59,7 @@ CommandTest::test_stack_double() { // Test double-stacked. args.push_back(int64_t(1)); - + last_stack_first = rpc::command_base::push_stack(args, &stack_first); CPPUNIT_ASSERT(!command_stack_all_empty()); CPPUNIT_ASSERT(rpc::command_base::current_stack[0].as_value() == 1); @@ -67,17 +67,17 @@ CommandTest::test_stack_double() { args.clear(); args.push_back(int64_t(2)); args.push_back(int64_t(3)); - + last_stack_second = rpc::command_base::push_stack(args, &stack_second); CPPUNIT_ASSERT(!command_stack_all_empty()); - + CPPUNIT_ASSERT(rpc::command_base::current_stack[0].as_value() == 2); CPPUNIT_ASSERT(rpc::command_base::current_stack[1].as_value() == 3); rpc::command_base::pop_stack(&stack_second, last_stack_second); CPPUNIT_ASSERT(!command_stack_all_empty()); CPPUNIT_ASSERT(rpc::command_base::current_stack[0].as_value() == 1); - + rpc::command_base::pop_stack(&stack_first, last_stack_first); CPPUNIT_ASSERT(command_stack_all_empty()); }