added MLDonkey to identify client, fixed a problem introduced with the recent piece_picker optimization, choked peers should now waste less bandwidth in the quota management.
This commit is contained in:
parent
90feac8126
commit
ef235faede
|
@ -581,6 +581,9 @@ namespace libtorrent
|
||||||
|
|
||||||
// reference counter for intrusive_ptr
|
// reference counter for intrusive_ptr
|
||||||
mutable boost::detail::atomic_count m_refs;
|
mutable boost::detail::atomic_count m_refs;
|
||||||
|
|
||||||
|
int m_upload_limit;
|
||||||
|
int m_download_limit;
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -155,6 +155,7 @@ namespace
|
||||||
, map_entry("LP", "lphant")
|
, map_entry("LP", "lphant")
|
||||||
, map_entry("LT", "libtorrent")
|
, map_entry("LT", "libtorrent")
|
||||||
, map_entry("M", "Mainline")
|
, map_entry("M", "Mainline")
|
||||||
|
, map_entry("ML", "MLDonkey")
|
||||||
, map_entry("MP", "MooPolice")
|
, map_entry("MP", "MooPolice")
|
||||||
, map_entry("MT", "Moonlight Torrent")
|
, map_entry("MT", "Moonlight Torrent")
|
||||||
, map_entry("O", "Osprey Permaseed")
|
, map_entry("O", "Osprey Permaseed")
|
||||||
|
|
|
@ -117,6 +117,8 @@ namespace libtorrent
|
||||||
, m_prefer_whole_pieces(false)
|
, m_prefer_whole_pieces(false)
|
||||||
, m_request_large_blocks(false)
|
, m_request_large_blocks(false)
|
||||||
, m_refs(0)
|
, m_refs(0)
|
||||||
|
, m_upload_limit(resource_request::inf)
|
||||||
|
, m_download_limit(resource_request::inf)
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
, m_in_constructor(true)
|
, m_in_constructor(true)
|
||||||
#endif
|
#endif
|
||||||
|
@ -234,6 +236,8 @@ namespace libtorrent
|
||||||
, m_prefer_whole_pieces(false)
|
, m_prefer_whole_pieces(false)
|
||||||
, m_request_large_blocks(false)
|
, m_request_large_blocks(false)
|
||||||
, m_refs(0)
|
, m_refs(0)
|
||||||
|
, m_upload_limit(resource_request::inf)
|
||||||
|
, m_download_limit(resource_request::inf)
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
, m_in_constructor(true)
|
, m_in_constructor(true)
|
||||||
#endif
|
#endif
|
||||||
|
@ -971,6 +975,10 @@ namespace libtorrent
|
||||||
throw protocol_error("got invalid piece packet");
|
throw protocol_error("got invalid piece packet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we're already seeding, don't bother,
|
||||||
|
// just ignore it
|
||||||
|
if (t->is_seed()) return;
|
||||||
|
|
||||||
using namespace boost::posix_time;
|
using namespace boost::posix_time;
|
||||||
|
|
||||||
piece_picker& picker = t->picker();
|
piece_picker& picker = t->picker();
|
||||||
|
@ -1062,7 +1070,6 @@ namespace libtorrent
|
||||||
picker.mark_as_finished(block_finished, m_remote);
|
picker.mark_as_finished(block_finished, m_remote);
|
||||||
|
|
||||||
t->get_policy().block_finished(*this, block_finished);
|
t->get_policy().block_finished(*this, block_finished);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (redundant) return;
|
if (redundant) return;
|
||||||
|
@ -1461,19 +1468,15 @@ namespace libtorrent
|
||||||
void peer_connection::set_upload_limit(int limit)
|
void peer_connection::set_upload_limit(int limit)
|
||||||
{
|
{
|
||||||
assert(limit >= -1);
|
assert(limit >= -1);
|
||||||
if (limit == -1) limit = std::numeric_limits<int>::max();
|
if (limit == -1) m_upload_limit = resource_request::inf;
|
||||||
if (limit < 10) limit = 10;
|
if (limit < 10) m_upload_limit = 10;
|
||||||
m_ul_bandwidth_quota.max = limit;
|
|
||||||
assert(m_ul_bandwidth_quota.max >= m_ul_bandwidth_quota.min);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void peer_connection::set_download_limit(int limit)
|
void peer_connection::set_download_limit(int limit)
|
||||||
{
|
{
|
||||||
assert(limit >= -1);
|
assert(limit >= -1);
|
||||||
if (limit == -1) limit = std::numeric_limits<int>::max();
|
if (limit == -1) m_download_limit = resource_request::inf;
|
||||||
if (limit < 10) limit = 10;
|
if (limit < 10) m_download_limit = 10;
|
||||||
m_dl_bandwidth_quota.max = limit;
|
|
||||||
assert(m_dl_bandwidth_quota.max >= m_dl_bandwidth_quota.min);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_type peer_connection::share_diff() const
|
size_type peer_connection::share_diff() const
|
||||||
|
@ -1604,12 +1607,33 @@ namespace libtorrent
|
||||||
// maintain the share ratio given by m_ratio
|
// maintain the share ratio given by m_ratio
|
||||||
// with all peers.
|
// with all peers.
|
||||||
|
|
||||||
|
if (has_peer_choked() || !is_interesting())
|
||||||
|
{
|
||||||
|
// if the peer choked us, we can't download
|
||||||
|
// any data anyway, limit the max download
|
||||||
|
// bandwidth. If we're a seed, it doesn't matter,
|
||||||
|
// we won't be interested in downloading anyway
|
||||||
|
m_dl_bandwidth_quota.max = 400;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dl_bandwidth_quota.max = resource_request::inf;
|
||||||
|
}
|
||||||
|
|
||||||
if (t->is_seed() || is_choked() || t->ratio() == 0.0f)
|
if (t->is_seed() || is_choked() || t->ratio() == 0.0f)
|
||||||
{
|
{
|
||||||
// if we have downloaded more than one piece more
|
// if we have downloaded more than one piece more
|
||||||
// than we have uploaded OR if we are a seed
|
// than we have uploaded OR if we are a seed
|
||||||
// have an unlimited upload rate
|
// have an unlimited upload rate
|
||||||
m_ul_bandwidth_quota.max = resource_request::inf;
|
// the exception is if we have choked the peer, and
|
||||||
|
// we have a limited amount of upload bandwidth, then
|
||||||
|
// we set the max to 400, just enough for the
|
||||||
|
// protocol chatter.
|
||||||
|
if (is_choked()
|
||||||
|
&& m_ul_bandwidth_quota.given < resource_request::inf)
|
||||||
|
m_ul_bandwidth_quota.max = 400;
|
||||||
|
else
|
||||||
|
m_ul_bandwidth_quota.max = resource_request::inf;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1623,7 +1647,7 @@ namespace libtorrent
|
||||||
size_type soon_downloaded =
|
size_type soon_downloaded =
|
||||||
have_downloaded + (size_type)(download_speed * break_even_time*1.5);
|
have_downloaded + (size_type)(download_speed * break_even_time*1.5);
|
||||||
|
|
||||||
if(t->ratio() != 1.f)
|
if (t->ratio() != 1.f)
|
||||||
soon_downloaded = (size_type)(soon_downloaded*(double)t->ratio());
|
soon_downloaded = (size_type)(soon_downloaded*(double)t->ratio());
|
||||||
|
|
||||||
double upload_speed_limit = (soon_downloaded - have_uploaded
|
double upload_speed_limit = (soon_downloaded - have_uploaded
|
||||||
|
@ -1638,6 +1662,12 @@ namespace libtorrent
|
||||||
if (m_ul_bandwidth_quota.given > m_ul_bandwidth_quota.max)
|
if (m_ul_bandwidth_quota.given > m_ul_bandwidth_quota.max)
|
||||||
m_ul_bandwidth_quota.given = m_ul_bandwidth_quota.max;
|
m_ul_bandwidth_quota.given = m_ul_bandwidth_quota.max;
|
||||||
|
|
||||||
|
if (m_upload_limit < m_ul_bandiwdth_quota.max)
|
||||||
|
m_ul_bandiwdth_quota.max = m_upload_limit;
|
||||||
|
|
||||||
|
if (m_download_limit < m_dl_bandiwdth_quota.max)
|
||||||
|
m_dl_bandiwdth_quota.max = m_download_limit;
|
||||||
|
|
||||||
fill_send_buffer();
|
fill_send_buffer();
|
||||||
/*
|
/*
|
||||||
size_type diff = share_diff();
|
size_type diff = share_diff();
|
||||||
|
|
Loading…
Reference in New Issue