From d32f0ba7558ed24cbe192b45f0feeaa017a4bbec Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Wed, 23 Feb 2005 09:13:42 +0000 Subject: [PATCH] fixed bug where tracker authentication was not sent to the tracker --- include/libtorrent/tracker_manager.hpp | 5 ++--- src/http_tracker_connection.cpp | 10 +++++----- src/session.cpp | 14 ++++++++++---- src/tracker_manager.cpp | 6 +++--- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/include/libtorrent/tracker_manager.hpp b/include/libtorrent/tracker_manager.hpp index 86f87d2e1..32b7589ba 100755 --- a/include/libtorrent/tracker_manager.hpp +++ b/include/libtorrent/tracker_manager.hpp @@ -149,10 +149,9 @@ namespace libtorrent void tick(); void queue_request( tracker_request r + , std::string const& auth , boost::weak_ptr c - = boost::weak_ptr() - , std::string const& password = ""); -// void abort_request(request_callback* c); + = boost::weak_ptr()); void abort_all_requests(); bool send_finished() const; diff --git a/src/http_tracker_connection.cpp b/src/http_tracker_connection.cpp index 6a1f9cfb3..d5e888a9f 100755 --- a/src/http_tracker_connection.cpp +++ b/src/http_tracker_connection.cpp @@ -85,7 +85,7 @@ namespace libtorrent , std::string const& request , boost::weak_ptr c , const http_settings& stn - , std::string const& password) + , std::string const& auth) : tracker_connection(c) , m_man(man) , m_state(read_status) @@ -95,7 +95,7 @@ namespace libtorrent , m_request_time(second_clock::universal_time()) , m_settings(stn) , m_req(req) - , m_password(password) + , m_password(auth) , m_code(0) { const std::string* connect_to_host; @@ -186,10 +186,10 @@ namespace libtorrent m_send_buffer += "\r\nProxy-Authorization: Basic "; m_send_buffer += base64encode(m_settings.proxy_login + ":" + m_settings.proxy_password); } - if (password != "") + if (auth != "") { m_send_buffer += "\r\nAuthorization: Basic "; - m_send_buffer += base64encode(password); + m_send_buffer += base64encode(auth); } m_send_buffer += "\r\n\r\n"; #ifndef NDEBUG @@ -451,7 +451,7 @@ namespace libtorrent else m_req.url.assign(m_location.begin(), m_location.begin() + i); - m_man.queue_request(m_req, m_requester, m_password); + m_man.queue_request(m_req, m_password, m_requester); return true; } } diff --git a/src/session.cpp b/src/session.cpp index d9122f29f..a735441a4 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -82,6 +82,13 @@ using namespace boost::posix_time; namespace libtorrent { namespace detail { + std::string generate_auth_string(std::string const& user + , std::string const& passwd) + { + if (user.empty()) return std::string(); + return user + ":" + passwd; + } + // This is the checker thread // it is looping in an infinite loop // until the session is aborted. It will @@ -408,7 +415,7 @@ namespace libtorrent { namespace detail tracker_request req = i->second->generate_tracker_request(); req.listen_port = m_listen_interface.port; req.key = m_key; - m_tracker_manager.queue_request(req); + m_tracker_manager.queue_request(req, i->second->tracker_login()); } m_connections.clear(); m_torrents.clear(); @@ -682,7 +689,7 @@ namespace libtorrent { namespace detail assert(req.event == tracker_request::stopped); req.listen_port = m_listen_interface.port; req.key = m_key; - m_tracker_manager.queue_request(req); + m_tracker_manager.queue_request(req, t.tracker_login()); t.disconnect_all(); purge_connections(); #ifndef NDEBUG @@ -697,8 +704,7 @@ namespace libtorrent { namespace detail tracker_request req = t.generate_tracker_request(); req.listen_port = m_listen_interface.port; req.key = m_key; - m_tracker_manager.queue_request( - req, i->second); + m_tracker_manager.queue_request(req, t.tracker_login(), i->second); } // tick() will set the used upload quota diff --git a/src/tracker_manager.cpp b/src/tracker_manager.cpp index c9bcbf88b..9e80a875e 100755 --- a/src/tracker_manager.cpp +++ b/src/tracker_manager.cpp @@ -359,8 +359,8 @@ namespace libtorrent void tracker_manager::queue_request( tracker_request req - , boost::weak_ptr c - , std::string const& password) + , std::string const& auth + , boost::weak_ptr c) { assert(req.num_want >= 0); if (req.event == tracker_request::stopped) @@ -425,7 +425,7 @@ namespace libtorrent , request_string , c , m_settings - , password)); + , auth)); } else if (protocol == "udp") {