lt sync 3243
This commit is contained in:
parent
db23f6a723
commit
8bcc7ea232
|
@ -101,7 +101,7 @@ namespace
|
|||
: ip(a)
|
||||
, tor(t)
|
||||
{ TORRENT_ASSERT(t != 0); }
|
||||
|
||||
|
||||
bool operator()(session_impl::connection_map::value_type const& c) const
|
||||
{
|
||||
tcp::endpoint const& sender = c->remote();
|
||||
|
@ -117,7 +117,7 @@ namespace
|
|||
struct peer_by_id
|
||||
{
|
||||
peer_by_id(const peer_id& i): pid(i) {}
|
||||
|
||||
|
||||
bool operator()(session_impl::connection_map::value_type const& p) const
|
||||
{
|
||||
if (p->pid() != pid) return false;
|
||||
|
@ -352,7 +352,7 @@ namespace libtorrent
|
|||
// don't announce private torrents
|
||||
if (m_torrent_file->is_valid() && m_torrent_file->priv()) return false;
|
||||
if (m_trackers.empty()) return true;
|
||||
|
||||
|
||||
return m_failed_trackers > 0 || !m_ses.settings().use_dht_as_fallback;
|
||||
}
|
||||
#endif
|
||||
|
@ -363,13 +363,13 @@ namespace libtorrent
|
|||
// is being destructed, all weak references to it have been
|
||||
// reset, which means that all its peers already have an
|
||||
// invalidated torrent pointer (so it cannot be verified to be correct)
|
||||
|
||||
|
||||
// i.e. the invariant can only be maintained if all connections have
|
||||
// been closed by the time the torrent is destructed. And they are
|
||||
// supposed to be closed. So we can still do the invariant check.
|
||||
|
||||
TORRENT_ASSERT(m_connections.empty());
|
||||
|
||||
|
||||
INVARIANT_CHECK;
|
||||
|
||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||
|
@ -421,7 +421,7 @@ namespace libtorrent
|
|||
if (!tp) return;
|
||||
|
||||
add_extension(tp);
|
||||
|
||||
|
||||
for (peer_iterator i = m_connections.begin();
|
||||
i != m_connections.end(); ++i)
|
||||
{
|
||||
|
@ -478,7 +478,7 @@ namespace libtorrent
|
|||
char const* error = 0;
|
||||
if (m_resume_entry.dict_find_string_value("file-format") != "libtorrent resume file")
|
||||
error = "invalid file format tag";
|
||||
|
||||
|
||||
std::string info_hash = m_resume_entry.dict_find_string_value("info-hash");
|
||||
if (!error && info_hash.empty())
|
||||
error = "missing info-hash";
|
||||
|
@ -506,7 +506,7 @@ namespace libtorrent
|
|||
read_resume_data(m_resume_entry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
m_storage->async_check_fastresume(&m_resume_entry
|
||||
, bind(&torrent::on_resume_data_checked
|
||||
, shared_from_this(), _1, _2));
|
||||
|
@ -562,7 +562,7 @@ namespace libtorrent
|
|||
if (lazy_entry const* banned_peers_entry = m_resume_entry.dict_find_list("banned_peers"))
|
||||
{
|
||||
peer_id id(0);
|
||||
|
||||
|
||||
for (int i = 0; i < banned_peers_entry->list_size(); ++i)
|
||||
{
|
||||
lazy_entry const* e = banned_peers_entry->list_at(i);
|
||||
|
@ -580,7 +580,7 @@ namespace libtorrent
|
|||
}
|
||||
|
||||
bool fastresume_rejected = !j.str.empty();
|
||||
|
||||
|
||||
if (fastresume_rejected && m_ses.m_alerts.should_post<fastresume_rejected_alert>())
|
||||
{
|
||||
m_ses.m_alerts.post_alert(fastresume_rejected_alert(get_handle(), j.str));
|
||||
|
@ -747,7 +747,7 @@ namespace libtorrent
|
|||
&torrent::on_piece_checked
|
||||
, shared_from_this(), _1, _2));
|
||||
}
|
||||
|
||||
|
||||
void torrent::on_piece_checked(int ret, disk_io_job const& j)
|
||||
{
|
||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
@ -812,7 +812,7 @@ namespace libtorrent
|
|||
void torrent::on_tracker_announce()
|
||||
{
|
||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
|
||||
if (m_abort) return;
|
||||
announce_with_tracker();
|
||||
}
|
||||
|
@ -953,7 +953,7 @@ namespace libtorrent
|
|||
|
||||
TORRENT_ASSERT(m_currently_trying_tracker >= 0);
|
||||
TORRENT_ASSERT(m_currently_trying_tracker < int(m_trackers.size()));
|
||||
|
||||
|
||||
tracker_request req;
|
||||
req.info_hash = m_torrent_file->info_hash();
|
||||
req.kind = tracker_request::scrape_request;
|
||||
|
@ -973,25 +973,25 @@ namespace libtorrent
|
|||
if (m_ses.m_alerts.should_post<tracker_warning_alert>())
|
||||
m_ses.m_alerts.post_alert(tracker_warning_alert(get_handle(), req.url, msg));
|
||||
}
|
||||
|
||||
|
||||
void torrent::tracker_scrape_response(tracker_request const& req
|
||||
, int complete, int incomplete, int downloaded)
|
||||
{
|
||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
|
||||
INVARIANT_CHECK;
|
||||
TORRENT_ASSERT(req.kind == tracker_request::scrape_request);
|
||||
|
||||
|
||||
if (complete >= 0) m_complete = complete;
|
||||
if (incomplete >= 0) m_incomplete = incomplete;
|
||||
|
||||
|
||||
if (m_ses.m_alerts.should_post<scrape_reply_alert>())
|
||||
{
|
||||
m_ses.m_alerts.post_alert(scrape_reply_alert(
|
||||
get_handle(), m_incomplete, m_complete, req.url));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void torrent::tracker_response(
|
||||
tracker_request const& r
|
||||
, std::vector<peer_entry>& peer_list
|
||||
|
@ -1103,7 +1103,7 @@ namespace libtorrent
|
|||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
m_policy.peer_from_tracker(*host, pid, peer_info::tracker, 0);
|
||||
}
|
||||
|
||||
|
@ -1165,7 +1165,7 @@ namespace libtorrent
|
|||
size_type wanted_done = size_type(num_have() - m_picker->num_have_filtered())
|
||||
* piece_size;
|
||||
TORRENT_ASSERT(wanted_done >= 0);
|
||||
|
||||
|
||||
size_type total_done
|
||||
= size_type(num_have()) * piece_size;
|
||||
TORRENT_ASSERT(num_have() < m_torrent_file->num_pieces());
|
||||
|
@ -1294,9 +1294,9 @@ namespace libtorrent
|
|||
// Thist happens when a piece has been downloaded completely
|
||||
// but not yet verified against the hash
|
||||
std::cerr << "num_have: " << num_have() << std::endl;
|
||||
|
||||
|
||||
std::cerr << "unfinished:" << std::endl;
|
||||
|
||||
|
||||
for (std::vector<piece_picker::downloading_piece>::const_iterator i =
|
||||
dl_queue.begin(); i != dl_queue.end(); ++i)
|
||||
{
|
||||
|
@ -1307,7 +1307,7 @@ namespace libtorrent
|
|||
}
|
||||
std::cerr << std::endl;
|
||||
}
|
||||
|
||||
|
||||
std::cerr << "downloading pieces:" << std::endl;
|
||||
|
||||
for (std::map<piece_block, int>::iterator i = downloading_piece.begin();
|
||||
|
@ -1634,8 +1634,11 @@ namespace libtorrent
|
|||
bind(&torrent::on_files_released, shared_from_this(), _1, _2));
|
||||
m_storage->abort_disk_io();
|
||||
}
|
||||
|
||||
|
||||
dequeue_torrent_check();
|
||||
|
||||
if (m_state == torrent_status::checking_files)
|
||||
set_state(torrent_status::queued_for_checking);
|
||||
|
||||
m_owning_storage = 0;
|
||||
m_host_resolver.cancel();
|
||||
|
@ -1690,7 +1693,7 @@ namespace libtorrent
|
|||
void torrent::on_file_renamed(int ret, disk_io_job const& j)
|
||||
{
|
||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
|
||||
{
|
||||
if (ret == 0)
|
||||
{
|
||||
|
@ -1826,7 +1829,7 @@ namespace libtorrent
|
|||
// the bitmask need to have exactly one bit for every file
|
||||
// in the torrent
|
||||
TORRENT_ASSERT(int(files.size()) == m_torrent_file->num_files());
|
||||
|
||||
|
||||
if (m_torrent_file->num_pieces() == 0) return;
|
||||
|
||||
std::copy(files.begin(), files.end(), m_file_priority.begin());
|
||||
|
@ -1842,7 +1845,7 @@ namespace libtorrent
|
|||
m_file_priority[index] = prio;
|
||||
update_piece_priorities();
|
||||
}
|
||||
|
||||
|
||||
int torrent::file_priority(int index) const
|
||||
{
|
||||
TORRENT_ASSERT(index < m_torrent_file->num_files());
|
||||
|
@ -1964,7 +1967,7 @@ namespace libtorrent
|
|||
// this call is only valid on torrents with metadata
|
||||
TORRENT_ASSERT(valid_metadata());
|
||||
if (is_seed()) return false;
|
||||
|
||||
|
||||
TORRENT_ASSERT(m_picker.get());
|
||||
TORRENT_ASSERT(index >= 0);
|
||||
TORRENT_ASSERT(index < m_torrent_file->num_pieces());
|
||||
|
@ -1999,7 +2002,7 @@ namespace libtorrent
|
|||
// the bitmask need to have exactly one bit for every file
|
||||
// in the torrent
|
||||
TORRENT_ASSERT((int)bitmask.size() == m_torrent_file->num_files());
|
||||
|
||||
|
||||
size_type position = 0;
|
||||
|
||||
if (m_torrent_file->num_pieces())
|
||||
|
@ -2014,7 +2017,7 @@ namespace libtorrent
|
|||
position += m_torrent_file->files().at(i).size;
|
||||
// is the file selected for download?
|
||||
if (!bitmask[i])
|
||||
{
|
||||
{
|
||||
// mark all pieces of the file as downloadable
|
||||
int start_piece = int(start / piece_length);
|
||||
int last_piece = int(position / piece_length);
|
||||
|
@ -2047,7 +2050,7 @@ namespace libtorrent
|
|||
c.send_choke();
|
||||
--m_num_uploads;
|
||||
}
|
||||
|
||||
|
||||
bool torrent::unchoke_peer(peer_connection& c)
|
||||
{
|
||||
INVARIANT_CHECK;
|
||||
|
@ -2160,7 +2163,7 @@ namespace libtorrent
|
|||
remove_url_seed(url);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#ifdef TORRENT_USE_OPENSSL
|
||||
if (protocol != "http" && protocol != "https")
|
||||
#else
|
||||
|
@ -2339,10 +2342,10 @@ namespace libtorrent
|
|||
m_ses.m_alerts.post_alert(peer_blocked_alert(a.address()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
boost::shared_ptr<socket_type> s(new (std::nothrow) socket_type(m_ses.m_io_service));
|
||||
if (!s) return;
|
||||
|
||||
|
||||
bool ret = instantiate_connection(m_ses.m_io_service, m_ses.web_seed_proxy(), *s);
|
||||
(void)ret;
|
||||
TORRENT_ASSERT(ret);
|
||||
|
@ -2358,7 +2361,7 @@ namespace libtorrent
|
|||
boost::intrusive_ptr<peer_connection> c(new (std::nothrow) web_peer_connection(
|
||||
m_ses, shared_from_this(), s, a, url, 0));
|
||||
if (!c) return;
|
||||
|
||||
|
||||
#ifdef TORRENT_DEBUG
|
||||
c->m_in_constructor = false;
|
||||
#endif
|
||||
|
@ -2409,7 +2412,7 @@ namespace libtorrent
|
|||
return (a >> 24) | ((a & 0xff0000) >> 8) | ((a & 0xff00) << 8) | (a << 24);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void torrent::resolve_peer_country(boost::intrusive_ptr<peer_connection> const& p) const
|
||||
{
|
||||
if (m_resolving_country
|
||||
|
@ -2447,7 +2450,7 @@ namespace libtorrent
|
|||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
INVARIANT_CHECK;
|
||||
|
||||
|
||||
m_resolving_country = false;
|
||||
|
||||
if (m_abort) return;
|
||||
|
@ -2519,7 +2522,7 @@ namespace libtorrent
|
|||
{
|
||||
// country is an ISO 3166 country code
|
||||
int country = i->endpoint().address().to_v4().to_ulong() & 0xffff;
|
||||
|
||||
|
||||
// look up the country code in the map
|
||||
const int size = sizeof(country_map)/sizeof(country_map[0]);
|
||||
country_entry tmp = {country, ""};
|
||||
|
@ -2536,7 +2539,7 @@ namespace libtorrent
|
|||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
p->set_country(i->name);
|
||||
}
|
||||
}
|
||||
|
@ -2612,7 +2615,7 @@ namespace libtorrent
|
|||
{
|
||||
std::string new_filename = mapped_files->list_string_value_at(i);
|
||||
if (new_filename.empty()) continue;
|
||||
m_torrent_file->rename_file(i, new_filename);
|
||||
rename_file(i, new_filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2627,7 +2630,7 @@ namespace libtorrent
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void torrent::write_resume_data(entry& ret) const
|
||||
{
|
||||
ret["file-format"] = "libtorrent resume file";
|
||||
|
@ -2650,7 +2653,7 @@ namespace libtorrent
|
|||
ret["num_downloaders"] = downloaders;
|
||||
|
||||
ret["sequential_download"] = m_sequential_download;
|
||||
|
||||
|
||||
const sha1_hash& info_hash = torrent_file().info_hash();
|
||||
ret["info-hash"] = std::string((char*)info_hash.begin(), (char*)info_hash.end());
|
||||
|
||||
|
@ -2751,7 +2754,7 @@ namespace libtorrent
|
|||
|
||||
entry::list_type& peer_list = ret["peers"].list();
|
||||
entry::list_type& banned_peer_list = ret["banned_peers"].list();
|
||||
|
||||
|
||||
int max_failcount = m_ses.m_settings.max_failcount;
|
||||
|
||||
for (policy::const_iterator i = m_policy.begin_peer()
|
||||
|
@ -2844,7 +2847,7 @@ namespace libtorrent
|
|||
|
||||
v.push_back(peer_info());
|
||||
peer_info& p = v.back();
|
||||
|
||||
|
||||
peer->get_peer_info(p);
|
||||
#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES
|
||||
if (resolving_countries())
|
||||
|
@ -2922,9 +2925,9 @@ namespace libtorrent
|
|||
pi.piece_index = i->index;
|
||||
queue.push_back(pi);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool torrent::connect_to_peer(policy::peer* peerinfo)
|
||||
{
|
||||
INVARIANT_CHECK;
|
||||
|
@ -3050,7 +3053,7 @@ namespace libtorrent
|
|||
p->disconnect("torrent is not ready to accept peers");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (m_ses.m_connections.find(p) == m_ses.m_connections.end())
|
||||
{
|
||||
p->disconnect("peer is not properly constructed");
|
||||
|
@ -3180,7 +3183,7 @@ namespace libtorrent
|
|||
|
||||
double lhs_rate = double(lhs_transferred) / (lhs_time_connected + 1);
|
||||
double rhs_rate = double(rhs_transferred) / (rhs_time_connected + 1);
|
||||
|
||||
|
||||
return lhs_rate < rhs_rate;
|
||||
}
|
||||
|
||||
|
@ -3262,7 +3265,7 @@ namespace libtorrent
|
|||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
INVARIANT_CHECK;
|
||||
|
||||
|
||||
TORRENT_ASSERT(amount > 0);
|
||||
m_bandwidth_limit[channel].expire(amount);
|
||||
queue_t tmp;
|
||||
|
@ -3356,11 +3359,11 @@ namespace libtorrent
|
|||
}
|
||||
|
||||
// this is called when we were finished, but some files were
|
||||
// marked for downloading, and we are no longer finished
|
||||
// marked for downloading, and we are no longer finished
|
||||
void torrent::resume_download()
|
||||
{
|
||||
INVARIANT_CHECK;
|
||||
|
||||
|
||||
TORRENT_ASSERT(!is_finished());
|
||||
set_state(torrent_status::downloading);
|
||||
set_queue_position((std::numeric_limits<int>::max)());
|
||||
|
@ -3441,7 +3444,7 @@ namespace libtorrent
|
|||
void torrent::files_checked()
|
||||
{
|
||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||
|
||||
|
||||
TORRENT_ASSERT(m_torrent_file->is_valid());
|
||||
|
||||
if (m_abort) return;
|
||||
|
@ -3458,7 +3461,7 @@ namespace libtorrent
|
|||
m_ses.m_alerts.post_alert(torrent_checked_alert(
|
||||
get_handle()));
|
||||
}
|
||||
|
||||
|
||||
if (!is_seed())
|
||||
{
|
||||
// if we just finished checking and we're not a seed, we are
|
||||
|
@ -3589,7 +3592,7 @@ namespace libtorrent
|
|||
TORRENT_ASSERT(m_state != torrent_status::checking_files);
|
||||
else
|
||||
TORRENT_ASSERT(m_queued_for_checking);
|
||||
|
||||
|
||||
if (!m_ses.m_queued_for_checking.empty())
|
||||
{
|
||||
// if there are torrents waiting to be checked
|
||||
|
@ -3714,7 +3717,7 @@ namespace libtorrent
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// This check is very expensive.
|
||||
TORRENT_ASSERT(!valid_metadata() || m_block_size > 0);
|
||||
TORRENT_ASSERT(!valid_metadata() || (m_torrent_file->piece_length() % m_block_size) == 0);
|
||||
|
@ -3765,7 +3768,7 @@ namespace libtorrent
|
|||
{
|
||||
torrent* t = i->second.get();
|
||||
if (t == this) continue;
|
||||
if (t->m_sequence_number >= p
|
||||
if (t->m_sequence_number >= p
|
||||
&& t->m_sequence_number < m_sequence_number
|
||||
&& t->m_sequence_number != -1)
|
||||
++t->m_sequence_number;
|
||||
|
@ -3986,11 +3989,11 @@ namespace libtorrent
|
|||
return ret;
|
||||
}
|
||||
|
||||
// this is an async operation triggered by the client
|
||||
// this is an async operation triggered by the client
|
||||
void torrent::save_resume_data()
|
||||
{
|
||||
INVARIANT_CHECK;
|
||||
|
||||
|
||||
if (m_owning_storage.get())
|
||||
{
|
||||
TORRENT_ASSERT(m_storage);
|
||||
|
@ -4263,7 +4266,7 @@ namespace libtorrent
|
|||
std::for_each(not_connected_web_seeds.begin(), not_connected_web_seeds.end()
|
||||
, bind(&torrent::connect_to_url_seed, this, _1));
|
||||
}
|
||||
|
||||
|
||||
for (peer_iterator i = m_connections.begin();
|
||||
i != m_connections.end();)
|
||||
{
|
||||
|
@ -4396,7 +4399,7 @@ namespace libtorrent
|
|||
void torrent::file_progress(std::vector<size_type>& fp) const
|
||||
{
|
||||
TORRENT_ASSERT(valid_metadata());
|
||||
|
||||
|
||||
fp.resize(m_torrent_file->num_files(), 0);
|
||||
|
||||
if (is_seed())
|
||||
|
@ -4405,7 +4408,7 @@ namespace libtorrent
|
|||
fp[i] = m_torrent_file->files().at(i).size;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
TORRENT_ASSERT(has_picker());
|
||||
|
||||
for (int i = 0; i < m_torrent_file->num_files(); ++i)
|
||||
|
@ -4525,7 +4528,7 @@ namespace libtorrent
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void torrent::set_state(torrent_status::state_t s)
|
||||
{
|
||||
#ifdef TORRENT_DEBUG
|
||||
|
@ -4663,7 +4666,7 @@ namespace libtorrent
|
|||
st.total_wanted -= m_torrent_file->piece_size(last_piece_index);
|
||||
--num_filtered_pieces;
|
||||
}
|
||||
|
||||
|
||||
st.total_wanted -= size_type(num_filtered_pieces) * m_torrent_file->piece_length();
|
||||
}
|
||||
|
||||
|
@ -4787,3 +4790,4 @@ namespace libtorrent
|
|||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue