improved super seeding with strict option
This commit is contained in:
@@ -3147,6 +3147,7 @@ that will be sent to the tracker. The user-agent is a good way to identify your
|
|||||||
|
|
||||||
bool announce_to_all_trackers;
|
bool announce_to_all_trackers;
|
||||||
bool prefer_udp_trackers;
|
bool prefer_udp_trackers;
|
||||||
|
bool strict_super_seeding;
|
||||||
};
|
};
|
||||||
|
|
||||||
``user_agent`` this is the client identification to the tracker.
|
``user_agent`` this is the client identification to the tracker.
|
||||||
@@ -3445,6 +3446,10 @@ trackers for the same hostname. Setting this to fails means that the
|
|||||||
trackers' tier is respected and there's no preference of one protocol
|
trackers' tier is respected and there's no preference of one protocol
|
||||||
over another.
|
over another.
|
||||||
|
|
||||||
|
``strict_super_seeding`` when this is set to true, a piece has to
|
||||||
|
have been forwarded to a third peer before another one is handed out.
|
||||||
|
This is the traditional definition of super seeding.
|
||||||
|
|
||||||
pe_settings
|
pe_settings
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
@@ -146,6 +146,7 @@ namespace libtorrent
|
|||||||
, rate_limit_ip_overhead(true)
|
, rate_limit_ip_overhead(true)
|
||||||
, announce_to_all_trackers(false)
|
, announce_to_all_trackers(false)
|
||||||
, prefer_udp_trackers(true)
|
, prefer_udp_trackers(true)
|
||||||
|
, strict_super_seeding(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// this is the user agent that will be sent to the tracker
|
// this is the user agent that will be sent to the tracker
|
||||||
@@ -468,6 +469,10 @@ namespace libtorrent
|
|||||||
// with udp:// protocol, it is preferred over the same
|
// with udp:// protocol, it is preferred over the same
|
||||||
// tracker over http://.
|
// tracker over http://.
|
||||||
bool prefer_udp_trackers;
|
bool prefer_udp_trackers;
|
||||||
|
|
||||||
|
// when set to true, a piece has to have been forwarded
|
||||||
|
// to a third peer before another one is handed out
|
||||||
|
bool strict_super_seeding;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
|
@@ -1234,7 +1234,7 @@ namespace libtorrent
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t->super_seeding())
|
if (t->super_seeding() && !m_ses.settings().strict_super_seeding)
|
||||||
{
|
{
|
||||||
// if we're superseeding and the peer just told
|
// if we're superseeding and the peer just told
|
||||||
// us that it completed the piece we're superseeding
|
// us that it completed the piece we're superseeding
|
||||||
@@ -1284,6 +1284,23 @@ namespace libtorrent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we're super seeding, this might mean that somebody
|
||||||
|
// forwarded this piece. In which case we need to give
|
||||||
|
// a new piece to that peer
|
||||||
|
if (t->super_seeding()
|
||||||
|
&& m_ses.settings().strict_super_seeding
|
||||||
|
&& (index != m_superseed_piece || t->num_peers() == 1))
|
||||||
|
{
|
||||||
|
for (torrent::peer_iterator i = t->begin()
|
||||||
|
, end(t->end()); i != end; ++i)
|
||||||
|
{
|
||||||
|
peer_connection* p = *i;
|
||||||
|
if (p->superseed_piece() != index) continue;
|
||||||
|
if (!p->has_piece(index)) continue;
|
||||||
|
p->superseed_piece(t->get_piece_to_super_seed(p->get_bitfield()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (is_seed())
|
if (is_seed())
|
||||||
{
|
{
|
||||||
m_peer_info->seed = true;
|
m_peer_info->seed = true;
|
||||||
|
@@ -44,7 +44,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||||||
using boost::filesystem::remove_all;
|
using boost::filesystem::remove_all;
|
||||||
using boost::filesystem::exists;
|
using boost::filesystem::exists;
|
||||||
|
|
||||||
void test_swarm(bool super_seeding = false)
|
void test_swarm(bool super_seeding = false, bool strict = false)
|
||||||
{
|
{
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
|
|
||||||
@@ -74,6 +74,7 @@ void test_swarm(bool super_seeding = false)
|
|||||||
session_settings settings;
|
session_settings settings;
|
||||||
settings.allow_multiple_connections_per_ip = true;
|
settings.allow_multiple_connections_per_ip = true;
|
||||||
settings.ignore_limits_on_local_network = false;
|
settings.ignore_limits_on_local_network = false;
|
||||||
|
settings.strict_super_seeding = strict;
|
||||||
ses1.set_settings(settings);
|
ses1.set_settings(settings);
|
||||||
ses2.set_settings(settings);
|
ses2.set_settings(settings);
|
||||||
ses3.set_settings(settings);
|
ses3.set_settings(settings);
|
||||||
@@ -205,6 +206,9 @@ int test_main()
|
|||||||
// with super seeding
|
// with super seeding
|
||||||
test_swarm(true);
|
test_swarm(true);
|
||||||
|
|
||||||
|
// with strict super seeding
|
||||||
|
test_swarm(true, true);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user