fix some warnings from sonar-cube
This commit is contained in:
parent
78a344bd8b
commit
c9cbb122e2
|
@ -58,7 +58,9 @@ namespace libtorrent { namespace aux {
|
||||||
T clamp(T v, T lo, T hi)
|
T clamp(T v, T lo, T hi)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(lo <= hi);
|
TORRENT_ASSERT(lo <= hi);
|
||||||
return (v < lo) ? lo : (hi < v) ? hi : v;
|
if (v < lo) return lo;
|
||||||
|
if (hi < v) return hi;
|
||||||
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -84,7 +84,13 @@ namespace aux {
|
||||||
}
|
}
|
||||||
inline char const* to_string(portmap_action const act)
|
inline char const* to_string(portmap_action const act)
|
||||||
{
|
{
|
||||||
return act == portmap_action::none ? "none" : act == portmap_action::add ? "add" : "delete";
|
switch (act)
|
||||||
|
{
|
||||||
|
case portmap_action::none: return "none";
|
||||||
|
case portmap_action::add: return "add";
|
||||||
|
case portmap_action::del: return "delete";
|
||||||
|
};
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ namespace detail {
|
||||||
case 'i':
|
case 'i':
|
||||||
{
|
{
|
||||||
++in; // 'i'
|
++in; // 'i'
|
||||||
std::string val = read_until(in, end, 'e', err);
|
std::string const val = read_until(in, end, 'e', err);
|
||||||
if (err) return;
|
if (err) return;
|
||||||
TORRENT_ASSERT(*in == 'e');
|
TORRENT_ASSERT(*in == 'e');
|
||||||
++in; // 'e'
|
++in; // 'e'
|
||||||
|
@ -249,12 +249,12 @@ namespace detail {
|
||||||
err = true;
|
err = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// list
|
// list
|
||||||
case 'l':
|
case 'l':
|
||||||
{
|
|
||||||
ret = entry(entry::list_t);
|
ret = entry(entry::list_t);
|
||||||
++in; // 'l'
|
++in; // 'l'
|
||||||
while (*in != 'e')
|
while (*in != 'e')
|
||||||
|
@ -283,12 +283,11 @@ namespace detail {
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(*in == 'e');
|
TORRENT_ASSERT(*in == 'e');
|
||||||
++in; // 'e'
|
++in; // 'e'
|
||||||
} break;
|
break;
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// dictionary
|
// dictionary
|
||||||
case 'd':
|
case 'd':
|
||||||
{
|
|
||||||
ret = entry(entry::dictionary_t);
|
ret = entry(entry::dictionary_t);
|
||||||
++in; // 'd'
|
++in; // 'd'
|
||||||
while (*in != 'e')
|
while (*in != 'e')
|
||||||
|
@ -325,7 +324,7 @@ namespace detail {
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(*in == 'e');
|
TORRENT_ASSERT(*in == 'e');
|
||||||
++in; // 'e'
|
++in; // 'e'
|
||||||
} break;
|
break;
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// string
|
// string
|
||||||
|
|
|
@ -220,8 +220,13 @@ namespace libtorrent {
|
||||||
};
|
};
|
||||||
|
|
||||||
const_iterator begin() const noexcept { return const_iterator(m_buf ? buf() : nullptr, 0); }
|
const_iterator begin() const noexcept { return const_iterator(m_buf ? buf() : nullptr, 0); }
|
||||||
const_iterator end() const noexcept { return const_iterator(
|
const_iterator end() const noexcept
|
||||||
m_buf ? buf() + num_words() - (((size() & 31) == 0) ? 0 : 1) : nullptr, size() & 31); }
|
{
|
||||||
|
if (m_buf)
|
||||||
|
return const_iterator(buf() + num_words() - (((size() & 31) == 0) ? 0 : 1), size() & 31);
|
||||||
|
else
|
||||||
|
return const_iterator(nullptr, size() & 31);
|
||||||
|
}
|
||||||
|
|
||||||
// set the size of the bitfield to ``bits`` length. If the bitfield is extended,
|
// set the size of the bitfield to ``bits`` length. If the bitfield is extended,
|
||||||
// the new bits are initialized to ``val``.
|
// the new bits are initialized to ``val``.
|
||||||
|
|
|
@ -211,8 +211,8 @@ public:
|
||||||
{ return ep.protocol().family() == m_protocol.protocol.family(); }
|
{ return ep.protocol().family() == m_protocol.protocol.family(); }
|
||||||
bool native_address(address const& addr) const
|
bool native_address(address const& addr) const
|
||||||
{
|
{
|
||||||
return (addr.is_v4() && m_protocol.protocol == m_protocol.protocol.v4())
|
return (addr.is_v4() && m_protocol.protocol == udp::v4())
|
||||||
|| (addr.is_v6() && m_protocol.protocol == m_protocol.protocol.v6());
|
|| (addr.is_v6() && m_protocol.protocol == udp::v6());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -83,6 +83,10 @@ namespace libtorrent {
|
||||||
|
|
||||||
class TORRENT_EXTRA_EXPORT piece_picker
|
class TORRENT_EXTRA_EXPORT piece_picker
|
||||||
{
|
{
|
||||||
|
// only defined when TORRENT_PICKER_LOG is defined, used for debugging
|
||||||
|
// unit tests
|
||||||
|
friend void print_pieces(piece_picker const& p);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -480,10 +484,6 @@ namespace libtorrent {
|
||||||
, typed_bitfield<piece_index_t> const& have
|
, typed_bitfield<piece_index_t> const& have
|
||||||
, picker_options_t options) const;
|
, picker_options_t options) const;
|
||||||
|
|
||||||
// only defined when TORRENT_PICKER_LOG is defined, used for debugging
|
|
||||||
// unit tests
|
|
||||||
void print_pieces() const;
|
|
||||||
|
|
||||||
struct piece_pos
|
struct piece_pos
|
||||||
{
|
{
|
||||||
piece_pos() {}
|
piece_pos() {}
|
||||||
|
|
|
@ -41,9 +41,9 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/alert_types.hpp"
|
#include "libtorrent/alert_types.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if TORRENT_ABI_VERSION == 1
|
||||||
namespace libtorrent {
|
namespace libtorrent {
|
||||||
|
|
||||||
#if TORRENT_ABI_VERSION == 1
|
|
||||||
// holds counters and gauges for the uTP sockets
|
// holds counters and gauges for the uTP sockets
|
||||||
// deprecated in 1.1 in favor of session_stats counters, which is a more
|
// deprecated in 1.1 in favor of session_stats counters, which is a more
|
||||||
// flexible, extensible and performant mechanism for stats.
|
// flexible, extensible and performant mechanism for stats.
|
||||||
|
@ -224,9 +224,8 @@ namespace libtorrent {
|
||||||
int num_torrents;
|
int num_torrents;
|
||||||
int num_paused_torrents;
|
int num_paused_torrents;
|
||||||
};
|
};
|
||||||
#endif // TORRENT_ABI_VERSION
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif // TORRENT_ABI_VERSION
|
||||||
|
|
||||||
#endif // TORRENT_SESSION_STATUS_HPP_INCLUDED
|
#endif // TORRENT_SESSION_STATUS_HPP_INCLUDED
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace libtorrent {
|
||||||
|
|
||||||
struct stat_cache_t
|
struct stat_cache_t
|
||||||
{
|
{
|
||||||
stat_cache_t(std::int64_t s): file_size(s) {} // NOLINT
|
explicit stat_cache_t(std::int64_t s): file_size(s) {}
|
||||||
|
|
||||||
// the size of the file. Negative values have special meaning. -1 means
|
// the size of the file. Negative values have special meaning. -1 means
|
||||||
// not-in-cache (i.e. there's no data for this file in the cache).
|
// not-in-cache (i.e. there's no data for this file in the cache).
|
||||||
|
|
|
@ -822,13 +822,10 @@ namespace libtorrent {
|
||||||
int num_have() const
|
int num_have() const
|
||||||
{
|
{
|
||||||
// pretend we have every piece when in seed mode
|
// pretend we have every piece when in seed mode
|
||||||
if (m_seed_mode) {
|
if (m_seed_mode) return m_torrent_file->num_pieces();
|
||||||
return m_torrent_file->num_pieces();
|
if (has_picker()) return m_picker->have().num_pieces;
|
||||||
}
|
if (m_have_all) return m_torrent_file->num_pieces();
|
||||||
|
return 0;
|
||||||
return has_picker()
|
|
||||||
? m_picker->have().num_pieces
|
|
||||||
: m_have_all ? m_torrent_file->num_pieces() : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// the number of pieces that have passed
|
// the number of pieces that have passed
|
||||||
|
@ -836,9 +833,9 @@ namespace libtorrent {
|
||||||
// flushed to disk yet
|
// flushed to disk yet
|
||||||
int num_passed() const
|
int num_passed() const
|
||||||
{
|
{
|
||||||
return has_picker()
|
if (has_picker()) return m_picker->num_passed();
|
||||||
? m_picker->num_passed()
|
if (m_have_all) return m_torrent_file->num_pieces();
|
||||||
: m_have_all ? m_torrent_file->num_pieces() : 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// when we get a have message, this is called for that piece
|
// when we get a have message, this is called for that piece
|
||||||
|
|
|
@ -106,7 +106,8 @@ namespace aux {
|
||||||
{
|
{
|
||||||
address_v4::bytes_type v4;
|
address_v4::bytes_type v4;
|
||||||
address_v6::bytes_type v6;
|
address_v6::bytes_type v6;
|
||||||
} addr;
|
};
|
||||||
|
addr_t addr;
|
||||||
|
|
||||||
std::uint16_t port;
|
std::uint16_t port;
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -76,7 +76,8 @@ namespace libtorrent {
|
||||||
{
|
{
|
||||||
address_v4::bytes_type v4;
|
address_v4::bytes_type v4;
|
||||||
address_v6::bytes_type v6;
|
address_v6::bytes_type v6;
|
||||||
} addr;
|
};
|
||||||
|
addr_t addr;
|
||||||
bool v4:1;
|
bool v4:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,8 @@ ConversionResult ConvertUTF16toUTF32 (
|
||||||
}
|
}
|
||||||
if (target >= targetEnd) {
|
if (target >= targetEnd) {
|
||||||
source = oldSource; /* Back up source pointer! */
|
source = oldSource; /* Back up source pointer! */
|
||||||
result = targetExhausted; break;
|
result = targetExhausted;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
*target++ = ch;
|
*target++ = ch;
|
||||||
}
|
}
|
||||||
|
@ -267,7 +268,8 @@ ConversionResult ConvertUTF16toUTF8 (
|
||||||
target += bytesToWrite;
|
target += bytesToWrite;
|
||||||
if (target > targetEnd) {
|
if (target > targetEnd) {
|
||||||
source = oldSource; /* Back up source pointer! */
|
source = oldSource; /* Back up source pointer! */
|
||||||
target -= bytesToWrite; result = targetExhausted; break;
|
target -= bytesToWrite; result = targetExhausted;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
switch (bytesToWrite) { /* note: everything falls through. */
|
switch (bytesToWrite) { /* note: everything falls through. */
|
||||||
case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
|
case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6;
|
||||||
|
@ -307,11 +309,16 @@ Boolean isLegalUTF8(const UTF8 *source, int length) {
|
||||||
|
|
||||||
switch (*source) {
|
switch (*source) {
|
||||||
/* no fall-through in this inner switch */
|
/* no fall-through in this inner switch */
|
||||||
case 0xE0: if (a < 0xA0) return false; break;
|
case 0xE0: if (a < 0xA0) return false;
|
||||||
case 0xED: if (a > 0x9F) return false; break;
|
break;
|
||||||
case 0xF0: if (a < 0x90) return false; break;
|
case 0xED: if (a > 0x9F) return false;
|
||||||
case 0xF4: if (a > 0x8F) return false; break;
|
break;
|
||||||
default: break;
|
case 0xF0: if (a < 0x90) return false;
|
||||||
|
break;
|
||||||
|
case 0xF4: if (a > 0x8F) return false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 1: if (*source >= 0x80 && *source < 0xC2) return false;
|
case 1: if (*source >= 0x80 && *source < 0xC2) return false;
|
||||||
|
|
|
@ -943,7 +943,7 @@ namespace {
|
||||||
// if we don't have the metadata, we cannot
|
// if we don't have the metadata, we cannot
|
||||||
// verify the bitfield size
|
// verify the bitfield size
|
||||||
if (t->valid_metadata()
|
if (t->valid_metadata()
|
||||||
&& m_recv_buffer.packet_size() - 1 != (t->torrent_file().num_pieces() + 7) / 8)
|
&& m_recv_buffer.packet_size() - 1 != (t->torrent_file().num_pieces() + CHAR_BIT - 1) / CHAR_BIT)
|
||||||
{
|
{
|
||||||
disconnect(errors::invalid_bitfield_size, operation_t::bittorrent, 2);
|
disconnect(errors::invalid_bitfield_size, operation_t::bittorrent, 2);
|
||||||
return;
|
return;
|
||||||
|
@ -955,7 +955,7 @@ namespace {
|
||||||
|
|
||||||
typed_bitfield<piece_index_t> bits;
|
typed_bitfield<piece_index_t> bits;
|
||||||
bits.assign(recv_buffer.begin() + 1
|
bits.assign(recv_buffer.begin() + 1
|
||||||
, t->valid_metadata()?get_bitfield().size():(m_recv_buffer.packet_size()-1)*8);
|
, t->valid_metadata()?get_bitfield().size():(m_recv_buffer.packet_size()-1)*CHAR_BIT);
|
||||||
|
|
||||||
incoming_bitfield(bits);
|
incoming_bitfield(bits);
|
||||||
}
|
}
|
||||||
|
@ -1991,7 +1991,9 @@ namespace {
|
||||||
const int num_pieces = t->torrent_file().num_pieces();
|
const int num_pieces = t->torrent_file().num_pieces();
|
||||||
TORRENT_ASSERT(num_pieces > 0);
|
TORRENT_ASSERT(num_pieces > 0);
|
||||||
|
|
||||||
const int packet_size = (num_pieces + 7) / 8 + 5;
|
constexpr std::uint8_t char_bit_mask = CHAR_BIT - 1;
|
||||||
|
|
||||||
|
const int packet_size = (num_pieces + char_bit_mask) / CHAR_BIT + 5;
|
||||||
|
|
||||||
TORRENT_ALLOCA(msg, char, packet_size);
|
TORRENT_ALLOCA(msg, char, packet_size);
|
||||||
if (msg.data() == nullptr) return; // out of memory
|
if (msg.data() == nullptr) return; // out of memory
|
||||||
|
@ -2005,7 +2007,7 @@ namespace {
|
||||||
std::fill_n(ptr, packet_size - 5, std::uint8_t{0xff});
|
std::fill_n(ptr, packet_size - 5, std::uint8_t{0xff});
|
||||||
|
|
||||||
// Clear trailing bits
|
// Clear trailing bits
|
||||||
msg.back() = static_cast<char>((0xff << ((8 - (num_pieces & 7)) & 7)) & 0xff);
|
msg.back() = static_cast<char>((0xff << ((CHAR_BIT - (num_pieces & char_bit_mask)) & char_bit_mask)) & 0xff);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2027,7 +2029,7 @@ namespace {
|
||||||
// add predictive pieces to the bitfield as well, since we won't
|
// add predictive pieces to the bitfield as well, since we won't
|
||||||
// announce them again
|
// announce them again
|
||||||
for (piece_index_t const p : t->predictive_pieces())
|
for (piece_index_t const p : t->predictive_pieces())
|
||||||
msg[5 + static_cast<int>(p) / 8] |= (0x80 >> (static_cast<int>(p) & 7));
|
msg[5 + static_cast<int>(p) / CHAR_BIT] |= (0x80 >> (static_cast<int>(p) & char_bit_mask));
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
if (should_log(peer_log_alert::outgoing_message))
|
if (should_log(peer_log_alert::outgoing_message))
|
||||||
|
@ -2037,7 +2039,7 @@ namespace {
|
||||||
bitfield_string.resize(n_pieces);
|
bitfield_string.resize(n_pieces);
|
||||||
for (std::size_t k = 0; k < n_pieces; ++k)
|
for (std::size_t k = 0; k < n_pieces; ++k)
|
||||||
{
|
{
|
||||||
if (msg[5 + int(k) / 8] & (0x80 >> (k % 8))) bitfield_string[k] = '1';
|
if (msg[5 + int(k) / CHAR_BIT] & (0x80 >> (k % CHAR_BIT))) bitfield_string[k] = '1';
|
||||||
else bitfield_string[k] = '0';
|
else bitfield_string[k] = '0';
|
||||||
}
|
}
|
||||||
peer_log(peer_log_alert::outgoing_message, "BITFIELD"
|
peer_log(peer_log_alert::outgoing_message, "BITFIELD"
|
||||||
|
|
|
@ -71,6 +71,9 @@ namespace libtorrent { namespace dht {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
// the write tokens we generate are 4 bytes
|
||||||
|
constexpr int write_token_size = 4;
|
||||||
|
|
||||||
void nop() {}
|
void nop() {}
|
||||||
|
|
||||||
node_id calculate_node_id(node_id const& nid, aux::listen_socket_handle const& sock)
|
node_id calculate_node_id(node_id const& nid, aux::listen_socket_handle const& sock)
|
||||||
|
@ -157,7 +160,7 @@ void node::update_node_id()
|
||||||
bool node::verify_token(string_view token, sha1_hash const& info_hash
|
bool node::verify_token(string_view token, sha1_hash const& info_hash
|
||||||
, udp::endpoint const& addr) const
|
, udp::endpoint const& addr) const
|
||||||
{
|
{
|
||||||
if (token.length() != 4)
|
if (token.length() != write_token_size)
|
||||||
{
|
{
|
||||||
#ifndef TORRENT_DISABLE_LOGGING
|
#ifndef TORRENT_DISABLE_LOGGING
|
||||||
if (m_observer != nullptr)
|
if (m_observer != nullptr)
|
||||||
|
@ -193,7 +196,7 @@ std::string node::generate_token(udp::endpoint const& addr
|
||||||
, sha1_hash const& info_hash)
|
, sha1_hash const& info_hash)
|
||||||
{
|
{
|
||||||
std::string token;
|
std::string token;
|
||||||
token.resize(4);
|
token.resize(write_token_size);
|
||||||
hasher h;
|
hasher h;
|
||||||
error_code ec;
|
error_code ec;
|
||||||
std::string const address = addr.address().to_string(ec);
|
std::string const address = addr.address().to_string(ec);
|
||||||
|
@ -203,7 +206,7 @@ std::string node::generate_token(udp::endpoint const& addr
|
||||||
h.update(info_hash);
|
h.update(info_hash);
|
||||||
|
|
||||||
sha1_hash const hash = h.final();
|
sha1_hash const hash = h.final();
|
||||||
std::copy(hash.begin(), hash.begin() + 4, token.begin());
|
std::copy(hash.begin(), hash.begin() + write_token_size, token.begin());
|
||||||
TORRENT_ASSERT(std::equal(token.begin(), token.end(), hash.data()));
|
TORRENT_ASSERT(std::equal(token.begin(), token.end(), hash.data()));
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
@ -278,21 +281,19 @@ void node::incoming(aux::listen_socket_handle const& s, msg const& m)
|
||||||
ext_ip = r.dict_find_string("ip");
|
ext_ip = r.dict_find_string("ip");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ext_ip && ext_ip.string_length() >= 16)
|
if (ext_ip && ext_ip.string_length() >= int(detail::address_size(udp::v6())))
|
||||||
{
|
{
|
||||||
// this node claims we use the wrong node-ID!
|
// this node claims we use the wrong node-ID!
|
||||||
address_v6::bytes_type b{};
|
char const* ptr = ext_ip.string_ptr();
|
||||||
std::memcpy(&b[0], ext_ip.string_ptr(), 16);
|
|
||||||
if (m_observer != nullptr)
|
if (m_observer != nullptr)
|
||||||
m_observer->set_external_address(m_sock, address_v6(b)
|
m_observer->set_external_address(m_sock, detail::read_v6_address(ptr)
|
||||||
, m.addr.address());
|
, m.addr.address());
|
||||||
}
|
}
|
||||||
else if (ext_ip && ext_ip.string_length() >= 4)
|
else if (ext_ip && ext_ip.string_length() >= int(detail::address_size(udp::v4())))
|
||||||
{
|
{
|
||||||
address_v4::bytes_type b{};
|
char const* ptr = ext_ip.string_ptr();
|
||||||
std::memcpy(&b[0], ext_ip.string_ptr(), 4);
|
|
||||||
if (m_observer != nullptr)
|
if (m_observer != nullptr)
|
||||||
m_observer->set_external_address(m_sock, address_v4(b)
|
m_observer->set_external_address(m_sock, detail::read_v4_address(ptr)
|
||||||
, m.addr.address());
|
, m.addr.address());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4301,11 +4301,9 @@ namespace libtorrent {
|
||||||
|
|
||||||
std::shared_ptr<torrent> t = m_torrent.lock();
|
std::shared_ptr<torrent> t = m_torrent.lock();
|
||||||
|
|
||||||
if (ec == errors::self_connection)
|
// don't try to connect to ourself again
|
||||||
{
|
if (ec == errors::self_connection && m_peer_info && t)
|
||||||
// don't try to connect to ourself again
|
t->ban_peer(m_peer_info);
|
||||||
if (m_peer_info && t) t->ban_peer(m_peer_info);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_connecting)
|
if (m_connecting)
|
||||||
{
|
{
|
||||||
|
|
|
@ -60,6 +60,47 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
|
#if defined TORRENT_PICKER_LOG
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
namespace libtorrent {
|
||||||
|
void print_pieces(piece_picker const& p)
|
||||||
|
{
|
||||||
|
int limit = 20;
|
||||||
|
std::cerr << "[" << &p << "] ";
|
||||||
|
if (p.m_dirty)
|
||||||
|
{
|
||||||
|
std::cerr << " === dirty ===" << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (prio_index_t b : p.m_priority_boundaries)
|
||||||
|
std::cerr << b << " ";
|
||||||
|
|
||||||
|
std::cerr << std::endl;
|
||||||
|
prio_index_t index(0);
|
||||||
|
std::cerr << "[" << &p << "] ";
|
||||||
|
auto j = p.m_priority_boundaries.begin();
|
||||||
|
for (auto i = p.m_pieces.begin(), end(p.m_pieces.end()); i != end; ++i, ++index)
|
||||||
|
{
|
||||||
|
if (limit == 0)
|
||||||
|
{
|
||||||
|
std::cerr << " ...";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (*i == -1) break;
|
||||||
|
while (j != p.m_priority_boundaries.end() && *j <= index)
|
||||||
|
{
|
||||||
|
std::cerr << "| ";
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
std::cerr << *i << "(" << p.m_piece_map[*i].index << ") ";
|
||||||
|
--limit;
|
||||||
|
}
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // TORRENT_PICKER_LOG
|
||||||
namespace libtorrent {
|
namespace libtorrent {
|
||||||
|
|
||||||
// TODO: find a better place for this
|
// TODO: find a better place for this
|
||||||
|
@ -388,44 +429,6 @@ namespace libtorrent {
|
||||||
TORRENT_ASSERT(p == prio);
|
TORRENT_ASSERT(p == prio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined TORRENT_PICKER_LOG
|
|
||||||
void piece_picker::print_pieces() const
|
|
||||||
{
|
|
||||||
int limit = 20;
|
|
||||||
std::cerr << "[" << this << "] ";
|
|
||||||
if (m_dirty)
|
|
||||||
{
|
|
||||||
std::cerr << " === dirty ===" << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (prio_index_t b : m_priority_boundaries)
|
|
||||||
std::cerr << b << " ";
|
|
||||||
|
|
||||||
std::cerr << std::endl;
|
|
||||||
prio_index_t index(0);
|
|
||||||
std::cerr << "[" << this << "] ";
|
|
||||||
auto j = m_priority_boundaries.begin();
|
|
||||||
for (auto i = m_pieces.begin(), end(m_pieces.end()); i != end; ++i, ++index)
|
|
||||||
{
|
|
||||||
if (limit == 0)
|
|
||||||
{
|
|
||||||
std::cerr << " ...";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (*i == -1) break;
|
|
||||||
while (j != m_priority_boundaries.end() && *j <= index)
|
|
||||||
{
|
|
||||||
std::cerr << "| ";
|
|
||||||
++j;
|
|
||||||
}
|
|
||||||
std::cerr << *i << "(" << m_piece_map[*i].index << ") ";
|
|
||||||
--limit;
|
|
||||||
}
|
|
||||||
std::cerr << std::endl;
|
|
||||||
}
|
|
||||||
#endif // TORRENT_PICKER_LOG
|
|
||||||
#endif // TORRENT_USE_INVARIANT_CHECKS
|
#endif // TORRENT_USE_INVARIANT_CHECKS
|
||||||
|
|
||||||
#if TORRENT_USE_INVARIANT_CHECKS
|
#if TORRENT_USE_INVARIANT_CHECKS
|
||||||
|
@ -840,7 +843,7 @@ namespace libtorrent {
|
||||||
<< " peer_count: " << p.peer_count
|
<< " peer_count: " << p.peer_count
|
||||||
<< " prio: " << p.piece_priority
|
<< " prio: " << p.piece_priority
|
||||||
<< " index: " << p.index << std::endl;
|
<< " index: " << p.index << std::endl;
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
m_pieces.push_back(piece_index_t(-1));
|
m_pieces.push_back(piece_index_t(-1));
|
||||||
|
|
||||||
|
@ -861,7 +864,7 @@ namespace libtorrent {
|
||||||
} while (temp == new_index && priority < int(m_priority_boundaries.size()));
|
} while (temp == new_index && priority < int(m_priority_boundaries.size()));
|
||||||
new_index = temp;
|
new_index = temp;
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
std::cerr << "[" << this << "] " << " index: " << index
|
std::cerr << "[" << this << "] " << " index: " << index
|
||||||
<< " prio: " << priority
|
<< " prio: " << priority
|
||||||
<< " new_index: " << new_index
|
<< " new_index: " << new_index
|
||||||
|
@ -877,7 +880,7 @@ namespace libtorrent {
|
||||||
m_piece_map[index].index = new_index;
|
m_piece_map[index].index = new_index;
|
||||||
|
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -895,7 +898,7 @@ namespace libtorrent {
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
||||||
prio_index_t temp{};
|
prio_index_t temp{};
|
||||||
|
@ -920,7 +923,7 @@ namespace libtorrent {
|
||||||
m_pieces.pop_back();
|
m_pieces.pop_back();
|
||||||
TORRENT_ASSERT(next_index == m_pieces.end_index());
|
TORRENT_ASSERT(next_index == m_pieces.end_index());
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -967,7 +970,7 @@ namespace libtorrent {
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(priority > 0);
|
TORRENT_ASSERT(priority > 0);
|
||||||
--priority;
|
--priority;
|
||||||
|
@ -983,17 +986,17 @@ namespace libtorrent {
|
||||||
if (priority == new_priority) break;
|
if (priority == new_priority) break;
|
||||||
}
|
}
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
m_pieces[elem_index] = index;
|
m_pieces[elem_index] = index;
|
||||||
m_piece_map[index].index = elem_index;
|
m_piece_map[index].index = elem_index;
|
||||||
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
shuffle(priority, elem_index);
|
shuffle(priority, elem_index);
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(m_piece_map[index].priority(this) == priority);
|
TORRENT_ASSERT(m_piece_map[index].priority(this) == priority);
|
||||||
}
|
}
|
||||||
|
@ -1004,7 +1007,7 @@ namespace libtorrent {
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(priority >= 0);
|
TORRENT_ASSERT(priority >= 0);
|
||||||
TORRENT_ASSERT(priority < int(m_priority_boundaries.size()));
|
TORRENT_ASSERT(priority < int(m_priority_boundaries.size()));
|
||||||
|
@ -1021,17 +1024,17 @@ namespace libtorrent {
|
||||||
if (priority == new_priority) break;
|
if (priority == new_priority) break;
|
||||||
}
|
}
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
m_pieces[elem_index] = index;
|
m_pieces[elem_index] = index;
|
||||||
m_piece_map[index].index = elem_index;
|
m_piece_map[index].index = elem_index;
|
||||||
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
TORRENT_ASSERT(elem_index < m_pieces.end_index());
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
shuffle(priority, elem_index);
|
shuffle(priority, elem_index);
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
TORRENT_ASSERT(m_piece_map[index].priority(this) == priority);
|
TORRENT_ASSERT(m_piece_map[index].priority(this) == priority);
|
||||||
}
|
}
|
||||||
|
@ -1501,7 +1504,7 @@ namespace libtorrent {
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// m_priority_boundaries just contain counters of
|
// m_priority_boundaries just contain counters of
|
||||||
|
@ -1517,7 +1520,7 @@ namespace libtorrent {
|
||||||
m_pieces.resize(new_size, piece_index_t(0));
|
m_pieces.resize(new_size, piece_index_t(0));
|
||||||
|
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// set up m_pieces to contain valid piece indices, based on piece
|
// set up m_pieces to contain valid piece indices, based on piece
|
||||||
|
@ -1554,7 +1557,7 @@ namespace libtorrent {
|
||||||
|
|
||||||
m_dirty = false;
|
m_dirty = false;
|
||||||
#ifdef TORRENT_PICKER_LOG
|
#ifdef TORRENT_PICKER_LOG
|
||||||
print_pieces();
|
print_pieces(*this);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace libtorrent {
|
||||||
void stat_cache::set_cache_impl(file_index_t const i, std::int64_t const size)
|
void stat_cache::set_cache_impl(file_index_t const i, std::int64_t const size)
|
||||||
{
|
{
|
||||||
if (i >= m_stat_cache.end_index())
|
if (i >= m_stat_cache.end_index())
|
||||||
m_stat_cache.resize(static_cast<int>(i) + 1, not_in_cache);
|
m_stat_cache.resize(static_cast<int>(i) + 1, stat_cache_t{not_in_cache});
|
||||||
m_stat_cache[i].file_size = size;
|
m_stat_cache[i].file_size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ namespace libtorrent {
|
||||||
void stat_cache::set_error_impl(file_index_t const i, error_code const& ec)
|
void stat_cache::set_error_impl(file_index_t const i, error_code const& ec)
|
||||||
{
|
{
|
||||||
if (i >= m_stat_cache.end_index())
|
if (i >= m_stat_cache.end_index())
|
||||||
m_stat_cache.resize(static_cast<int>(i) + 1, not_in_cache);
|
m_stat_cache.resize(static_cast<int>(i) + 1, stat_cache_t{not_in_cache});
|
||||||
|
|
||||||
int const error_index = add_error(ec);
|
int const error_index = add_error(ec);
|
||||||
m_stat_cache[i].file_size = file_error - error_index;
|
m_stat_cache[i].file_size = file_error - error_index;
|
||||||
|
@ -80,7 +80,8 @@ namespace libtorrent {
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> l(m_mutex);
|
std::lock_guard<std::mutex> l(m_mutex);
|
||||||
TORRENT_ASSERT(i < fs.end_file());
|
TORRENT_ASSERT(i < fs.end_file());
|
||||||
if (i >= m_stat_cache.end_index()) m_stat_cache.resize(static_cast<int>(i) + 1, not_in_cache);
|
if (i >= m_stat_cache.end_index()) m_stat_cache.resize(static_cast<int>(i) + 1
|
||||||
|
, stat_cache_t{not_in_cache});
|
||||||
std::int64_t sz = m_stat_cache[i].file_size;
|
std::int64_t sz = m_stat_cache[i].file_size;
|
||||||
if (sz < not_in_cache)
|
if (sz < not_in_cache)
|
||||||
{
|
{
|
||||||
|
@ -110,7 +111,7 @@ namespace libtorrent {
|
||||||
void stat_cache::reserve(int num_files)
|
void stat_cache::reserve(int num_files)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> l(m_mutex);
|
std::lock_guard<std::mutex> l(m_mutex);
|
||||||
m_stat_cache.resize(num_files, not_in_cache);
|
m_stat_cache.resize(num_files, stat_cache_t{not_in_cache});
|
||||||
}
|
}
|
||||||
|
|
||||||
void stat_cache::clear()
|
void stat_cache::clear()
|
||||||
|
|
Loading…
Reference in New Issue