forked from premiere/premiere-libtorrent
factor out logic around adding torrents to the session into insert_torrent()
This commit is contained in:
parent
d733dd7e51
commit
57e56d5070
|
@ -373,7 +373,10 @@ namespace aux {
|
|||
int num_torrents() const override { return int(m_torrents.size()); }
|
||||
|
||||
void insert_torrent(sha1_hash const& ih, std::shared_ptr<torrent> const& t
|
||||
, std::string uuid) override;
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
, std::string uuid
|
||||
#endif
|
||||
) override;
|
||||
|
||||
std::shared_ptr<torrent> delay_load_torrent(sha1_hash const& info_hash
|
||||
, peer_connection* pc) override;
|
||||
|
|
|
@ -186,7 +186,10 @@ namespace aux {
|
|||
virtual std::shared_ptr<torrent> delay_load_torrent(sha1_hash const& info_hash
|
||||
, peer_connection* pc) = 0;
|
||||
virtual void insert_torrent(sha1_hash const& ih, std::shared_ptr<torrent> const& t
|
||||
, std::string uuid) = 0;
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
, std::string uuid
|
||||
#endif
|
||||
) = 0;
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
//deprecated in 1.2
|
||||
virtual void insert_uuid_torrent(std::string uuid, std::shared_ptr<torrent> const& t) = 0;
|
||||
|
|
|
@ -4363,15 +4363,50 @@ namespace aux {
|
|||
}
|
||||
|
||||
void session_impl::insert_torrent(sha1_hash const& ih, std::shared_ptr<torrent> const& t
|
||||
, std::string uuid)
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
, std::string const uuid
|
||||
#endif
|
||||
)
|
||||
{
|
||||
m_torrents.insert(std::make_pair(ih, t));
|
||||
sha1_hash const next_lsd = m_next_lsd_torrent != m_torrents.end()
|
||||
? m_next_lsd_torrent->first : sha1_hash();
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
sha1_hash const next_dht = m_next_dht_torrent != m_torrents.end()
|
||||
? m_next_dht_torrent->first : sha1_hash();
|
||||
#endif
|
||||
|
||||
float const load_factor = m_torrents.load_factor();
|
||||
|
||||
m_torrents.emplace(ih, t);
|
||||
|
||||
#if !defined TORRENT_DISABLE_ENCRYPTION
|
||||
static char const req2[4] = {'r', 'e', 'q', '2'};
|
||||
hasher h(req2);
|
||||
h.update(ih);
|
||||
// this is SHA1("req2" + info-hash), used for
|
||||
// encrypted hand shakes
|
||||
m_obfuscated_torrents.emplace(h.final(), t);
|
||||
#endif
|
||||
|
||||
// if this insert made the hash grow, the iterators became invalid
|
||||
// we need to reset them
|
||||
if (m_torrents.load_factor() < load_factor)
|
||||
{
|
||||
// this indicates the hash table re-hashed
|
||||
if (!next_lsd.is_all_zeros())
|
||||
m_next_lsd_torrent = m_torrents.find(next_lsd);
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
if (!next_dht.is_all_zeros())
|
||||
m_next_dht_torrent = m_torrents.find(next_dht);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
//deprecated in 1.2
|
||||
if (!uuid.empty()) m_uuids.insert(std::make_pair(uuid, t));
|
||||
#else
|
||||
TORRENT_UNUSED(uuid);
|
||||
#endif
|
||||
|
||||
t->added();
|
||||
}
|
||||
|
||||
void session_impl::set_queue_position(torrent* me, queue_position_t p)
|
||||
|
@ -4772,48 +4807,18 @@ namespace aux {
|
|||
add_extensions_to_torrent(torrent_ptr, params.userdata);
|
||||
#endif
|
||||
|
||||
sha1_hash const next_lsd = m_next_lsd_torrent != m_torrents.end()
|
||||
? m_next_lsd_torrent->first : sha1_hash();
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
sha1_hash const next_dht = m_next_dht_torrent != m_torrents.end()
|
||||
? m_next_dht_torrent->first : sha1_hash();
|
||||
#endif
|
||||
float const load_factor = m_torrents.load_factor();
|
||||
|
||||
m_torrents.emplace(params.info_hash, torrent_ptr);
|
||||
|
||||
#if !defined TORRENT_DISABLE_ENCRYPTION
|
||||
static char const req2[4] = {'r', 'e', 'q', '2'};
|
||||
hasher h(req2);
|
||||
h.update(params.info_hash);
|
||||
// this is SHA1("req2" + info-hash), used for
|
||||
// encrypted hand shakes
|
||||
m_obfuscated_torrents.emplace(h.final(), torrent_ptr);
|
||||
insert_torrent(params.info_hash, torrent_ptr
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
//deprecated in 1.2
|
||||
, params.uuid.empty()
|
||||
? params.url.empty() ? std::string()
|
||||
: params.url
|
||||
: params.uuid
|
||||
#endif
|
||||
);
|
||||
|
||||
// once we successfully add the torrent, we can disarm the abort action
|
||||
abort_torrent.disarm();
|
||||
torrent_ptr->added();
|
||||
|
||||
// if this insert made the hash grow, the iterators became invalid
|
||||
// we need to reset them
|
||||
if (m_torrents.load_factor() < load_factor)
|
||||
{
|
||||
// this indicates the hash table re-hashed
|
||||
if (!next_lsd.is_all_zeros())
|
||||
m_next_lsd_torrent = m_torrents.find(next_lsd);
|
||||
#ifndef TORRENT_DISABLE_DHT
|
||||
if (!next_dht.is_all_zeros())
|
||||
m_next_dht_torrent = m_torrents.find(next_dht);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if TORRENT_ABI_VERSION == 1
|
||||
//deprecated in 1.2
|
||||
if (!params.uuid.empty() || !params.url.empty())
|
||||
m_uuids.emplace(params.uuid.empty()
|
||||
? params.url : params.uuid, torrent_ptr);
|
||||
#endif
|
||||
|
||||
// recalculate auto-managed torrents sooner (or put it off)
|
||||
// if another torrent will be added within one second from now
|
||||
|
|
Loading…
Reference in New Issue