forked from premiere/premiere-libtorrent
start torrent on incoming connection feature
This commit is contained in:
parent
0816ff69c6
commit
3d5d9eb807
|
@ -14,6 +14,8 @@
|
||||||
* support variable number of optimistic unchoke slots and to dynamically
|
* support variable number of optimistic unchoke slots and to dynamically
|
||||||
adjust based on the total number of unchoke slots
|
adjust based on the total number of unchoke slots
|
||||||
* support for BitTyrant choker algorithm
|
* support for BitTyrant choker algorithm
|
||||||
|
* support for automatically start torrents when they receive an
|
||||||
|
incoming connection
|
||||||
|
|
||||||
0.15 release
|
0.15 release
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,7 @@ void bind_session_settings()
|
||||||
.def_readwrite("udp_tracker_token_expiry", &session_settings::udp_tracker_token_expiry)
|
.def_readwrite("udp_tracker_token_expiry", &session_settings::udp_tracker_token_expiry)
|
||||||
.def_readwrite("volatile_read_cache", &session_settings::volatile_read_cache)
|
.def_readwrite("volatile_read_cache", &session_settings::volatile_read_cache)
|
||||||
.def_readwrite("guided_read_cache", &session_settings::guided_read_cache)
|
.def_readwrite("guided_read_cache", &session_settings::guided_read_cache)
|
||||||
|
.def_readwrite("incoming_starts_queued_torrents", &session_settings::incoming_starts_queued_torrents)
|
||||||
;
|
;
|
||||||
|
|
||||||
enum_<proxy_settings::proxy_type>("proxy_type")
|
enum_<proxy_settings::proxy_type>("proxy_type")
|
||||||
|
@ -129,7 +130,7 @@ void bind_session_settings()
|
||||||
.value("largest_contiguous", session_settings::largest_contiguous)
|
.value("largest_contiguous", session_settings::largest_contiguous)
|
||||||
;
|
;
|
||||||
|
|
||||||
enum_<session_settings::disk_cache_algo_t>("choking_algorithm_t")
|
enum_<session_settings::choking_algorithm_t>("choking_algorithm_t")
|
||||||
.value("fixed_slots_choker", session_settings::fixed_slots_choker)
|
.value("fixed_slots_choker", session_settings::fixed_slots_choker)
|
||||||
.value("auto_expand_choker", session_settings::auto_expand_choker)
|
.value("auto_expand_choker", session_settings::auto_expand_choker)
|
||||||
.value("rate_based_choker", session_settings::rate_based_choker)
|
.value("rate_based_choker", session_settings::rate_based_choker)
|
||||||
|
|
|
@ -3764,6 +3764,8 @@ session_settings
|
||||||
bool volatile_read_cache;
|
bool volatile_read_cache;
|
||||||
bool guided_read_cache;
|
bool guided_read_cache;
|
||||||
bool default_min_cache_age;
|
bool default_min_cache_age;
|
||||||
|
|
||||||
|
bool incoming_starts_queued_torrents;
|
||||||
};
|
};
|
||||||
|
|
||||||
``user_agent`` this is the client identification to the tracker.
|
``user_agent`` this is the client identification to the tracker.
|
||||||
|
@ -4294,6 +4296,16 @@ fewer packets have to be sent to the UDP tracker. In order for higher
|
||||||
values to work, the tracker needs to be configured to match the
|
values to work, the tracker needs to be configured to match the
|
||||||
expiration time for tokens.
|
expiration time for tokens.
|
||||||
|
|
||||||
|
``incoming_starts_queued_torrents`` defaults to false. If a torrent
|
||||||
|
has been paused by the auto managed feature in libtorrent, i.e.
|
||||||
|
the torrent is paused and auto managed, this feature affects whether
|
||||||
|
or not it is automatically started on an incoming connection. The
|
||||||
|
main reason to queue torrents, is not to make them unavailable, but
|
||||||
|
to save on the overhead of announcing to the trackers, the DHT and to
|
||||||
|
avoid spreading one's unchoke slots too thin. If a peer managed to
|
||||||
|
find us, even though we're no in the torrent anymore, this setting
|
||||||
|
can make us start the torrent and serve it.
|
||||||
|
|
||||||
pe_settings
|
pe_settings
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -200,6 +200,7 @@ namespace libtorrent
|
||||||
, default_est_reciprocation_rate(16000)
|
, default_est_reciprocation_rate(16000)
|
||||||
, increase_est_reciprocation_rate(20)
|
, increase_est_reciprocation_rate(20)
|
||||||
, decrease_est_reciprocation_rate(3)
|
, decrease_est_reciprocation_rate(3)
|
||||||
|
, incoming_starts_queued_torrents(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
|
||||||
|
@ -752,6 +753,10 @@ namespace libtorrent
|
||||||
// our estimate of the reciprocation rate, since we might have
|
// our estimate of the reciprocation rate, since we might have
|
||||||
// over-estimated it
|
// over-estimated it
|
||||||
int decrease_est_reciprocation_rate;
|
int decrease_est_reciprocation_rate;
|
||||||
|
|
||||||
|
// if set to true, an incoming connection to a torrent that's
|
||||||
|
// paused and auto-managed will make the torrent start.
|
||||||
|
bool incoming_starts_queued_torrents;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
|
|
|
@ -1071,10 +1071,15 @@ namespace libtorrent
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (t->is_paused())
|
if (t->is_paused() && (!t->is_auto_managed()
|
||||||
|
|| !m_ses.m_settings.incoming_starts_queued_torrents
|
||||||
|
|| t->has_error()))
|
||||||
{
|
{
|
||||||
// paused torrents will not accept
|
// paused torrents will not accept
|
||||||
// incoming connections
|
// incoming connections unless they are auto managed
|
||||||
|
// and inconing_starts_queued_torrents is true
|
||||||
|
// torrents that have errors should always reject
|
||||||
|
// incoming peers
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_ERROR_LOGGING
|
||||||
(*m_logger) << " rejected connection to paused torrent\n";
|
(*m_logger) << " rejected connection to paused torrent\n";
|
||||||
#endif
|
#endif
|
||||||
|
@ -1097,6 +1102,13 @@ namespace libtorrent
|
||||||
#endif // TORRENT_USE_I2P
|
#endif // TORRENT_USE_I2P
|
||||||
|
|
||||||
TORRENT_ASSERT(m_torrent.expired());
|
TORRENT_ASSERT(m_torrent.expired());
|
||||||
|
|
||||||
|
if (t->is_paused())
|
||||||
|
{
|
||||||
|
TORRENT_ASSERT(m_ses.m_settings.incoming_starts_queued_torrents);
|
||||||
|
t->resume();
|
||||||
|
}
|
||||||
|
|
||||||
// check to make sure we don't have another connection with the same
|
// check to make sure we don't have another connection with the same
|
||||||
// info_hash and peer_id. If we do. close this connection.
|
// info_hash and peer_id. If we do. close this connection.
|
||||||
t->attach_peer(this);
|
t->attach_peer(this);
|
||||||
|
|
|
@ -1524,6 +1524,13 @@ namespace aux {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if we don't have any active torrents, there's no
|
||||||
|
// point in accepting this connection. If, however,
|
||||||
|
// the setting to start up queued torrents when they
|
||||||
|
// get an incoming connection is enabled, we cannot
|
||||||
|
// perform this check.
|
||||||
|
if (!m_settings.incoming_starts_queued_torrents)
|
||||||
|
{
|
||||||
bool has_active_torrent = false;
|
bool has_active_torrent = false;
|
||||||
for (torrent_map::iterator i = m_torrents.begin()
|
for (torrent_map::iterator i = m_torrents.begin()
|
||||||
, end(m_torrents.end()); i != end; ++i)
|
, end(m_torrents.end()); i != end; ++i)
|
||||||
|
@ -1541,6 +1548,7 @@ namespace aux {
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setup_socket_buffers(*s);
|
setup_socket_buffers(*s);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue