From 7bc12147498c390e1aa9077448e287031956499f Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sun, 3 Sep 2006 22:59:54 +0000 Subject: [PATCH] fixed strange User-Agent encoding in HTTP requests. Fixed bug in sequenced_download_threshold code --- src/http_tracker_connection.cpp | 3 +-- src/piece_picker.cpp | 36 ++++++++++++++++++++++++++++++++- src/session.cpp | 5 +++++ src/web_peer_connection.cpp | 6 ++---- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/http_tracker_connection.cpp b/src/http_tracker_connection.cpp index 3a8a2e2f4..6c9e6be16 100755 --- a/src/http_tracker_connection.cpp +++ b/src/http_tracker_connection.cpp @@ -344,8 +344,7 @@ namespace libtorrent m_send_buffer += " HTTP/1.0\r\nAccept-Encoding: gzip\r\n" "User-Agent: "; - m_send_buffer += escape_string(m_settings.user_agent.c_str() - , m_settings.user_agent.length()); + m_send_buffer += m_settings.user_agent; m_send_buffer += " (libtorrent)\r\n" "Host: "; m_send_buffer += hostname; diff --git a/src/piece_picker.cpp b/src/piece_picker.cpp index 731c2c70d..947d674dc 100755 --- a/src/piece_picker.cpp +++ b/src/piece_picker.cpp @@ -162,6 +162,38 @@ namespace libtorrent move(p.downloading, p.filtered, prev_priority, p.index); } } + + typedef std::vector info_t; + + if (old_limit < sequenced_download_threshold) + { + INVARIANT_CHECK; + assert(int(m_piece_info.size()) > old_limit); + info_t& in = m_piece_info[old_limit]; + std::random_shuffle(in.begin(), in.end()); + int c = 0; + for (info_t::iterator i = in.begin() + , end(in.end()); i != end; ++i) + { + m_piece_map[*i].index = c++; + assert(m_piece_map[*i].priority(old_limit) == old_limit); + } + } + else if (int(m_piece_info.size()) > sequenced_download_threshold) + { + INVARIANT_CHECK; + assert(int(m_piece_info.size()) > sequenced_download_threshold); + info_t& in = m_piece_info[sequenced_download_threshold]; + std::sort(in.begin(), in.end()); + int c = 0; + for (info_t::iterator i = in.begin() + , end(in.end()); i != end; ++i) + { + m_piece_map[*i].index = c++; + assert(m_piece_map[*i].priority( + sequenced_download_threshold) == sequenced_download_threshold); + } + } } #ifndef NDEBUG @@ -475,7 +507,9 @@ namespace libtorrent m_piece_map[replace_index].index = elem_index; assert((int)src_vec[priority].size() > elem_index); - assert((int)m_piece_map[replace_index].priority(m_sequenced_download_threshold) == priority); + // this may not necessarily be the case. If we've just updated the threshold and are updating + // the piece map +// assert((int)m_piece_map[replace_index].priority(m_sequenced_download_threshold) == priority); assert((int)m_piece_map[replace_index].index == elem_index); assert(src_vec[priority][elem_index] == replace_index); } diff --git a/src/session.cpp b/src/session.cpp index b408055a8..1cbab098a 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -507,6 +507,11 @@ namespace libtorrent { namespace detail } } m_settings = s; + // replace all occurances of '\n' with ' '. + std::string::iterator i = m_settings.user_agent.begin(); + while ((i = std::find(i, m_settings.user_agent.end(), '\n')) + != m_settings.user_agent.end()) + *i = ' '; } void session_impl::open_listen_port() diff --git a/src/web_peer_connection.cpp b/src/web_peer_connection.cpp index 5f262059c..ceab7cef4 100755 --- a/src/web_peer_connection.cpp +++ b/src/web_peer_connection.cpp @@ -155,8 +155,7 @@ namespace libtorrent if (m_first_request) { request += "\r\nUser-Agent: "; - request += escape_string(m_ses.m_settings.user_agent.c_str() - , m_ses.m_settings.user_agent.size()); + request += m_ses.m_settings.user_agent; } if (using_proxy && !m_ses.m_settings.proxy_login.empty()) { @@ -209,8 +208,7 @@ namespace libtorrent if (m_first_request) { request += "\r\nUser-Agent: "; - request += escape_string(m_ses.m_settings.user_agent.c_str() - , m_ses.m_settings.user_agent.size()); + request += m_ses.m_settings.user_agent; } if (using_proxy && !m_ses.m_settings.proxy_login.empty()) {