forked from premiere/premiere-libtorrent
may have fixed a bug where incorrect metadata was sent (introduced with the latest optimization)
This commit is contained in:
parent
d27ace98ba
commit
23fbb8d240
|
@ -383,8 +383,12 @@ namespace libtorrent
|
||||||
void set_max_connections(int limit);
|
void set_max_connections(int limit);
|
||||||
bool move_storage(boost::filesystem::path const& save_path);
|
bool move_storage(boost::filesystem::path const& save_path);
|
||||||
|
|
||||||
|
// unless this returns true, new connections must wait
|
||||||
|
// with their initialization.
|
||||||
|
bool ready_for_connections() const
|
||||||
|
{ return m_connections_initialized; }
|
||||||
bool valid_metadata() const
|
bool valid_metadata() const
|
||||||
{ return m_storage.get() != 0 && m_connections_initialized; }
|
{ return m_storage.get() != 0; }
|
||||||
std::vector<char> const& metadata() const;
|
std::vector<char> const& metadata() const;
|
||||||
|
|
||||||
bool received_metadata(
|
bool received_metadata(
|
||||||
|
|
|
@ -177,7 +177,7 @@ namespace libtorrent
|
||||||
m_recv_buffer.resize(1);
|
m_recv_buffer.resize(1);
|
||||||
|
|
||||||
// assume the other end has no pieces
|
// assume the other end has no pieces
|
||||||
if (m_torrent->valid_metadata())
|
if (m_torrent->ready_for_connections())
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
send_bitfield();
|
send_bitfield();
|
||||||
|
@ -297,6 +297,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
assert(m_torrent);
|
assert(m_torrent);
|
||||||
assert(m_torrent->valid_metadata());
|
assert(m_torrent->valid_metadata());
|
||||||
|
assert(m_torrent->ready_for_connections());
|
||||||
|
|
||||||
m_have_piece.resize(m_torrent->torrent_file().num_pieces(), false);
|
m_have_piece.resize(m_torrent->torrent_file().num_pieces(), false);
|
||||||
|
|
||||||
|
@ -2263,7 +2264,10 @@ namespace libtorrent
|
||||||
throw protocol_error("connection rejected by paused torrent");
|
throw protocol_error("connection rejected by paused torrent");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_torrent->valid_metadata()) init();
|
// if the torrent's isn't ready to accept
|
||||||
|
// connections yet, we'll have to wait with
|
||||||
|
// our initialization
|
||||||
|
if (m_torrent->ready_for_connections()) init();
|
||||||
|
|
||||||
// assume the other end has no pieces
|
// assume the other end has no pieces
|
||||||
// if we don't have valid metadata yet,
|
// if we don't have valid metadata yet,
|
||||||
|
|
|
@ -1335,7 +1335,12 @@ namespace libtorrent
|
||||||
std::vector<char> const& torrent::metadata() const
|
std::vector<char> const& torrent::metadata() const
|
||||||
{
|
{
|
||||||
if (m_metadata.empty())
|
if (m_metadata.empty())
|
||||||
bencode(std::back_inserter(m_metadata), m_torrent_file.create_torrent());
|
{
|
||||||
|
bencode(std::back_inserter(m_metadata)
|
||||||
|
, m_torrent_file.create_info_metadata());
|
||||||
|
assert(hasher(&m_metadata[0], m_metadata.size()).final()
|
||||||
|
== m_torrent_file.info_hash());
|
||||||
|
}
|
||||||
assert(!m_metadata.empty());
|
assert(!m_metadata.empty());
|
||||||
return m_metadata;
|
return m_metadata;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue