add option to disable streaming functionality

This commit is contained in:
arvidn 2020-03-14 20:32:14 +01:00 committed by Arvid Norberg
parent 3b6ab35ae5
commit 827d852c58
7 changed files with 55 additions and 1 deletions

View File

@ -599,6 +599,8 @@ target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME loggin
DESCRIPTION "build with logging" DISABLED TORRENT_DISABLE_LOGGING)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME mutable-torrents DEFAULT ON
DESCRIPTION "Enables mutable torrent support" DISABLED TORRENT_DISABLE_MUTABLE_TORRENTS)
target_optional_compile_definitions(torrent-rasterbar PUBLIC FEATURE NAME streaming DEFAULT ON
DESCRIPTION "Enables support for piece deadline" DISABLED TORRENT_DISABLE_STREAMING)
find_public_dependency(Iconv)
if(MSVC)

View File

@ -1,3 +1,5 @@
* add build option to disable streaming
1.2.5 release
* announce port=1 instead of port=0, when there is no listen port

View File

@ -435,6 +435,9 @@ feature.compose <sanitize>rtc : <cflags>/RTCc <cflags>/RTCsu ;
feature test-coverage : off on : composite propagated link-incompatible ;
feature.compose <test-coverage>on : <cflags>--coverage <linkflags>--coverage ;
feature streaming : on off : composite propagated ;
feature.compose <streaming>off : <define>TORRENT_DISABLE_STREAMING ;
feature i2p : on off : composite propagated ;
feature.compose <i2p>on : <define>TORRENT_USE_I2P=1 ;
feature.compose <i2p>off : <define>TORRENT_USE_I2P=0 ;

View File

@ -530,6 +530,9 @@ defines you can use to control the build.
+----------------------------------------+-------------------------------------------------+
| ``TORRENT_DISABLE_MUTABLE_TORRENTS`` | Disables mutable torrent support (`BEP 38`_) |
+----------------------------------------+-------------------------------------------------+
| ``TORRENT_DISABLE_STREAMING`` | Disables set_piece_deadline() and associated |
| | functionality. |
+----------------------------------------+-------------------------------------------------+
| ``TORRENT_LINKING_SHARED`` | If this is defined when including the |
| | libtorrent headers, the classes and functions |
| | will be tagged with ``__declspec(dllimport)`` |

View File

@ -115,6 +115,7 @@ namespace libtorrent {
TORRENT_EXTRA_EXPORT std::int64_t calc_bytes(file_storage const& fs, piece_count const& pc);
#ifndef TORRENT_DISABLE_STREAMING
struct time_critical_piece
{
// when this piece was first requested
@ -137,6 +138,7 @@ namespace libtorrent {
bool operator<(time_critical_piece const& rhs) const
{ return deadline < rhs.deadline; }
};
#endif // TORRENT_DISABLE_STREAMING
// this is the internal representation of web seeds
struct web_seed_t : web_seed_entry
@ -579,10 +581,13 @@ namespace libtorrent {
void prioritize_files(aux::vector<download_priority_t, file_index_t> files);
void file_priorities(aux::vector<download_priority_t, file_index_t>*) const;
#ifndef TORRENT_DISABLE_STREAMING
void cancel_non_critical();
void set_piece_deadline(piece_index_t piece, int t, deadline_flags_t flags);
void reset_piece_deadline(piece_index_t piece);
void clear_time_critical();
#endif // TORRENT_DISABLE_STREAMING
void update_piece_priorities(
aux::vector<download_priority_t, file_index_t> const& file_prios);
@ -1154,7 +1159,13 @@ namespace libtorrent {
#endif
int num_time_critical_pieces() const
{ return int(m_time_critical_pieces.size()); }
{
#ifndef TORRENT_DISABLE_STREAMING
return int(m_time_critical_pieces.size());
#else
return 0;
#endif
}
int get_suggest_pieces(std::vector<piece_index_t>& p
, typed_bitfield<piece_index_t> const& bits
@ -1219,9 +1230,11 @@ namespace libtorrent {
bool should_announce_dht() const;
#endif
#ifndef TORRENT_DISABLE_STREAMING
void remove_time_critical_piece(piece_index_t piece, bool finished = false);
void remove_time_critical_pieces(aux::vector<download_priority_t, piece_index_t> const& priority);
void request_time_critical_pieces();
#endif // TORRENT_DISABLE_STREAMING
void need_peer_list();
@ -1293,8 +1306,10 @@ namespace libtorrent {
aux::vector<announce_entry> m_trackers;
#ifndef TORRENT_DISABLE_STREAMING
// this list is sorted by time_critical_piece::deadline
std::vector<time_critical_piece> m_time_critical_pieces;
#endif
std::string m_trackerid;
#if TORRENT_ABI_VERSION == 1

View File

@ -3933,7 +3933,9 @@ bool is_downloading_state(int const st)
}
});
#ifndef TORRENT_DISABLE_STREAMING
remove_time_critical_piece(index, true);
#endif
if (is_downloading_state(m_state))
{
@ -3982,7 +3984,9 @@ bool is_downloading_state(int const st)
inc_stats_counter(counters::num_piece_passed);
#ifndef TORRENT_DISABLE_STREAMING
remove_time_critical_piece(index, true);
#endif
if (settings().get_int(settings_pack::suggest_mode)
== settings_pack::suggest_read_cache)
@ -4607,6 +4611,7 @@ bool is_downloading_state(int const st)
return detail::read_uint32(ptr);
}
#ifndef TORRENT_DISABLE_STREAMING
void torrent::cancel_non_critical()
{
std::set<piece_index_t> time_critical;
@ -4834,6 +4839,7 @@ bool is_downloading_state(int const st)
++i;
}
}
#endif // TORRENT_DISABLE_STREAMING
void torrent::piece_availability(aux::vector<int, piece_index_t>& avail) const
{
@ -4880,7 +4886,9 @@ bool is_downloading_state(int const st)
if (filter_updated)
{
update_peer_interest(was_finished);
#ifndef TORRENT_DISABLE_STREAMING
if (priority == dont_download) remove_time_critical_piece(index);
#endif // TORRENT_DISABLE_STREAMING
}
}
@ -4984,7 +4992,9 @@ bool is_downloading_state(int const st)
set_need_save_resume();
update_peer_interest(was_finished);
#ifndef TORRENT_DISABLE_STREAMING
remove_time_critical_pieces(pieces);
#endif
}
state_updated();
@ -7831,11 +7841,13 @@ bool is_downloading_state(int const st)
TORRENT_ASSERT(m_sequence_number == no_pos
|| m_ses.verify_queue_position(this, m_sequence_number));
#ifndef TORRENT_DISABLE_STREAMING
for (auto const& i : m_time_critical_pieces)
{
TORRENT_ASSERT(!is_seed());
TORRENT_ASSERT(!has_picker() || !m_picker->have_piece(i.piece));
}
#endif
switch (current_stats_state())
{
@ -9137,6 +9149,7 @@ bool is_downloading_state(int const st)
}
}
#ifndef TORRENT_DISABLE_STREAMING
// ---- TIME CRITICAL PIECES ----
#if TORRENT_DEBUG_STREAMING > 0
@ -9166,6 +9179,7 @@ bool is_downloading_state(int const st)
{
request_time_critical_pieces();
}
#endif // TORRENT_DISABLE_STREAMING
// ---- WEB SEEDS ----
@ -9463,6 +9477,8 @@ bool is_downloading_state(int const st)
m_ses.received_synack(ipv6);
}
#ifndef TORRENT_DISABLE_STREAMING
#if TORRENT_DEBUG_STREAMING > 0
char const* esc(char const* code)
{
@ -9990,6 +10006,7 @@ bool is_downloading_state(int const st)
p->send_block_requests();
}
}
#endif // TORRENT_DISABLE_STREAMING
std::set<std::string> torrent::web_seeds(web_seed_entry::type_t const type) const
{

View File

@ -801,17 +801,29 @@ namespace libtorrent {
void torrent_handle::set_piece_deadline(piece_index_t index, int deadline
, deadline_flags_t const flags) const
{
#ifndef TORRENT_DISABLE_STREAMING
async_call(&torrent::set_piece_deadline, index, deadline, flags);
#else
TORRENT_UNUSED(deadline);
if (flags & alert_when_available)
async_call(&torrent::read_piece, index);
#endif
}
void torrent_handle::reset_piece_deadline(piece_index_t index) const
{
#ifndef TORRENT_DISABLE_STREAMING
async_call(&torrent::reset_piece_deadline, index);
#else
TORRENT_UNUSED(index);
#endif
}
void torrent_handle::clear_piece_deadlines() const
{
#ifndef TORRENT_DISABLE_STREAMING
async_call(&torrent::clear_time_critical);
#endif
}
std::shared_ptr<torrent> torrent_handle::native_handle() const