made it possible to build without RTTI
This commit is contained in:
parent
0a8c3a6419
commit
e43340c961
|
@ -2,6 +2,7 @@
|
||||||
* replaced dependency on boost.thread by asio's internal thread primitives
|
* replaced dependency on boost.thread by asio's internal thread primitives
|
||||||
* added support for i2p torrents
|
* added support for i2p torrents
|
||||||
* cleaned up usage of MAX_PATH and related macros
|
* cleaned up usage of MAX_PATH and related macros
|
||||||
|
* made it possible to build libtorrent without RTTI support
|
||||||
|
|
||||||
0.15 release
|
0.15 release
|
||||||
|
|
||||||
|
|
|
@ -111,6 +111,8 @@ namespace libtorrent
|
||||||
{ return m_encrypted; }
|
{ return m_encrypted; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
virtual int type() const { return peer_connection::bittorrent_connection; }
|
||||||
|
|
||||||
enum message_type
|
enum message_type
|
||||||
{
|
{
|
||||||
// standard messages
|
// standard messages
|
||||||
|
@ -151,18 +153,6 @@ namespace libtorrent
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||||
bool support_extensions() const { return m_supports_extensions; }
|
bool support_extensions() const { return m_supports_extensions; }
|
||||||
|
|
||||||
template <class T>
|
|
||||||
T* supports_extension() const
|
|
||||||
{
|
|
||||||
for (extension_list_t::const_iterator i = m_extensions.begin()
|
|
||||||
, end(m_extensions.end()); i != end; ++i)
|
|
||||||
{
|
|
||||||
T* ret = dynamic_cast<T*>(i->get());
|
|
||||||
if (ret) return ret;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// the message handlers are called
|
// the message handlers are called
|
||||||
|
|
|
@ -101,6 +101,8 @@ namespace libtorrent
|
||||||
|
|
||||||
~http_seed_connection();
|
~http_seed_connection();
|
||||||
|
|
||||||
|
virtual int type() const { return peer_connection::http_seed_connection; }
|
||||||
|
|
||||||
// called from the main loop when this connection has any
|
// called from the main loop when this connection has any
|
||||||
// work to do.
|
// work to do.
|
||||||
void on_sent(error_code const& error
|
void on_sent(error_code const& error
|
||||||
|
|
|
@ -134,6 +134,15 @@ namespace libtorrent
|
||||||
friend class invariant_access;
|
friend class invariant_access;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
enum connection_type
|
||||||
|
{
|
||||||
|
bittorrent_connection = 0,
|
||||||
|
url_seed_connection = 1,
|
||||||
|
http_seed_connection = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual int type() const = 0;
|
||||||
|
|
||||||
enum channels
|
enum channels
|
||||||
{
|
{
|
||||||
upload_channel,
|
upload_channel,
|
||||||
|
|
|
@ -101,6 +101,8 @@ namespace libtorrent
|
||||||
|
|
||||||
~web_peer_connection();
|
~web_peer_connection();
|
||||||
|
|
||||||
|
virtual int type() const { return peer_connection::url_seed_connection; }
|
||||||
|
|
||||||
// called from the main loop when this connection has any
|
// called from the main loop when this connection has any
|
||||||
// work to do.
|
// work to do.
|
||||||
void on_sent(error_code const& error
|
void on_sent(error_code const& error
|
||||||
|
|
|
@ -327,8 +327,10 @@ namespace libtorrent { namespace
|
||||||
boost::shared_ptr<peer_plugin> lt_tracker_plugin::new_connection(
|
boost::shared_ptr<peer_plugin> lt_tracker_plugin::new_connection(
|
||||||
peer_connection* pc)
|
peer_connection* pc)
|
||||||
{
|
{
|
||||||
bt_peer_connection* c = dynamic_cast<bt_peer_connection*>(pc);
|
if (pc->type() != peer_connection::bittorrent_connection)
|
||||||
if (!c) return boost::shared_ptr<peer_plugin>();
|
return boost::shared_ptr<peer_plugin>();
|
||||||
|
|
||||||
|
bt_peer_connection* c = static_cast<bt_peer_connection*>(pc);
|
||||||
return boost::shared_ptr<peer_plugin>(new lt_tracker_peer_plugin(m_torrent, *c, *this));
|
return boost::shared_ptr<peer_plugin>(new lt_tracker_peer_plugin(m_torrent, *c, *this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -527,32 +527,17 @@ namespace libtorrent { namespace
|
||||||
boost::shared_ptr<peer_plugin> metadata_plugin::new_connection(
|
boost::shared_ptr<peer_plugin> metadata_plugin::new_connection(
|
||||||
peer_connection* pc)
|
peer_connection* pc)
|
||||||
{
|
{
|
||||||
bt_peer_connection* c = dynamic_cast<bt_peer_connection*>(pc);
|
if (pc->type() != peer_connection::bittorrent_connection)
|
||||||
if (!c) return boost::shared_ptr<peer_plugin>();
|
return boost::shared_ptr<peer_plugin>();
|
||||||
|
|
||||||
|
bt_peer_connection* c = static_cast<bt_peer_connection*>(pc);
|
||||||
return boost::shared_ptr<peer_plugin>(new metadata_peer_plugin(m_torrent, *pc, *this));
|
return boost::shared_ptr<peer_plugin>(new metadata_peer_plugin(m_torrent, *pc, *this));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<int, int> metadata_plugin::metadata_request()
|
std::pair<int, int> metadata_plugin::metadata_request()
|
||||||
{
|
{
|
||||||
// count the number of peers that supports the
|
|
||||||
// extension and that has metadata
|
|
||||||
int peers = 0;
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
|
||||||
for (torrent::peer_iterator i = m_torrent.begin()
|
|
||||||
, end(m_torrent.end()); i != end; ++i)
|
|
||||||
{
|
|
||||||
bt_peer_connection* c = dynamic_cast<bt_peer_connection*>(*i);
|
|
||||||
if (c == 0) continue;
|
|
||||||
metadata_peer_plugin* p
|
|
||||||
= c->supports_extension<metadata_peer_plugin>();
|
|
||||||
if (p == 0) continue;
|
|
||||||
if (!p->has_metadata()) continue;
|
|
||||||
++peers;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// the number of blocks to request
|
// the number of blocks to request
|
||||||
int num_blocks = 256 / (peers + 1);
|
int num_blocks = 256 / 4;
|
||||||
if (num_blocks < 1) num_blocks = 1;
|
if (num_blocks < 1) num_blocks = 1;
|
||||||
TORRENT_ASSERT(num_blocks <= 128);
|
TORRENT_ASSERT(num_blocks <= 128);
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ namespace libtorrent
|
||||||
if (!t.are_files_checked()) return;
|
if (!t.are_files_checked()) return;
|
||||||
|
|
||||||
TORRENT_ASSERT(t.valid_metadata());
|
TORRENT_ASSERT(t.valid_metadata());
|
||||||
TORRENT_ASSERT(c.peer_info_struct() != 0 || !dynamic_cast<bt_peer_connection*>(&c));
|
TORRENT_ASSERT(c.peer_info_struct() != 0 || c.type() != peer_connection::bittorrent_connection);
|
||||||
int num_requests = c.desired_queue_size()
|
int num_requests = c.desired_queue_size()
|
||||||
- (int)c.download_queue().size()
|
- (int)c.download_queue().size()
|
||||||
- (int)c.request_queue().size();
|
- (int)c.request_queue().size();
|
||||||
|
@ -1345,7 +1345,7 @@ namespace libtorrent
|
||||||
if ((*i)->is_disconnecting()) continue;
|
if ((*i)->is_disconnecting()) continue;
|
||||||
// ignore web_peer_connections since they are not managed
|
// ignore web_peer_connections since they are not managed
|
||||||
// by the policy class
|
// by the policy class
|
||||||
if (dynamic_cast<web_peer_connection*>(*i)) continue;
|
if ((*i)->type() != peer_connection::bittorrent_connection) continue;
|
||||||
++num_torrent_peers;
|
++num_torrent_peers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3897,12 +3897,12 @@ namespace libtorrent
|
||||||
, bind(&peer_connection::remote, _1) == peerinfo->ip());
|
, bind(&peer_connection::remote, _1) == peerinfo->ip());
|
||||||
#if TORRENT_USE_I2P
|
#if TORRENT_USE_I2P
|
||||||
TORRENT_ASSERT(i_ == m_connections.end()
|
TORRENT_ASSERT(i_ == m_connections.end()
|
||||||
|| dynamic_cast<bt_peer_connection*>(*i_) == 0
|
|| (*i_)->type() != peer_connection::bittorrent_connection
|
||||||
|| peerinfo->is_i2p_addr
|
|| peerinfo->is_i2p_addr
|
||||||
);
|
);
|
||||||
#else
|
#else
|
||||||
TORRENT_ASSERT(i_ == m_connections.end()
|
TORRENT_ASSERT(i_ == m_connections.end()
|
||||||
|| dynamic_cast<bt_peer_connection*>(*i_) == 0
|
|| (*i_)->type() != peer_connection::bittorrent_connection
|
||||||
);
|
);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -5315,10 +5315,21 @@ namespace libtorrent
|
||||||
for (peer_iterator i = m_connections.begin();
|
for (peer_iterator i = m_connections.begin();
|
||||||
i != m_connections.end(); ++i)
|
i != m_connections.end(); ++i)
|
||||||
{
|
{
|
||||||
web_peer_connection* p = dynamic_cast<web_peer_connection*>(*i);
|
switch ((*i)->type())
|
||||||
if (p) web_seeds.insert(web_seed_entry(p->url(), web_seed_entry::url_seed));
|
{
|
||||||
http_seed_connection* s = dynamic_cast<http_seed_connection*>(*i);
|
case peer_connection::url_seed_connection:
|
||||||
if (s) web_seeds.insert(web_seed_entry(s->url(), web_seed_entry::http_seed));
|
{
|
||||||
|
web_peer_connection* p = static_cast<web_peer_connection*>(*i);
|
||||||
|
web_seeds.insert(web_seed_entry(p->url(), web_seed_entry::url_seed));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case peer_connection::http_seed_connection:
|
||||||
|
{
|
||||||
|
http_seed_connection* p = static_cast<http_seed_connection*>(*i);
|
||||||
|
web_seeds.insert(web_seed_entry(p->url(), web_seed_entry::http_seed));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::set<web_seed_entry>::iterator i = m_resolving_web_seeds.begin()
|
for (std::set<web_seed_entry>::iterator i = m_resolving_web_seeds.begin()
|
||||||
|
|
|
@ -406,8 +406,10 @@ namespace libtorrent { namespace
|
||||||
boost::shared_ptr<peer_plugin> ut_metadata_plugin::new_connection(
|
boost::shared_ptr<peer_plugin> ut_metadata_plugin::new_connection(
|
||||||
peer_connection* pc)
|
peer_connection* pc)
|
||||||
{
|
{
|
||||||
bt_peer_connection* c = dynamic_cast<bt_peer_connection*>(pc);
|
if (pc->type() != peer_connection::bittorrent_connection)
|
||||||
if (!c) return boost::shared_ptr<peer_plugin>();
|
return boost::shared_ptr<peer_plugin>();
|
||||||
|
|
||||||
|
bt_peer_connection* c = static_cast<bt_peer_connection*>(pc);
|
||||||
return boost::shared_ptr<peer_plugin>(new ut_metadata_peer_plugin(m_torrent, *c, *this));
|
return boost::shared_ptr<peer_plugin>(new ut_metadata_peer_plugin(m_torrent, *c, *this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,8 +136,10 @@ namespace libtorrent { namespace
|
||||||
if (num_added >= max_peer_entries) break;
|
if (num_added >= max_peer_entries) break;
|
||||||
|
|
||||||
// only send proper bittorrent peers
|
// only send proper bittorrent peers
|
||||||
bt_peer_connection* p = dynamic_cast<bt_peer_connection*>(peer);
|
if (peer->type() != peer_connection::bittorrent_connection)
|
||||||
if (!p) continue;
|
continue;
|
||||||
|
|
||||||
|
bt_peer_connection* p = static_cast<bt_peer_connection*>(peer);
|
||||||
|
|
||||||
// no supported flags to set yet
|
// no supported flags to set yet
|
||||||
// 0x01 - peer supports encryption
|
// 0x01 - peer supports encryption
|
||||||
|
@ -369,8 +371,10 @@ namespace libtorrent { namespace
|
||||||
if (num_added >= max_peer_entries) break;
|
if (num_added >= max_peer_entries) break;
|
||||||
|
|
||||||
// only send proper bittorrent peers
|
// only send proper bittorrent peers
|
||||||
bt_peer_connection* p = dynamic_cast<bt_peer_connection*>(peer);
|
if (peer->type() != peer_connection::bittorrent_connection)
|
||||||
if (!p) continue;
|
continue;
|
||||||
|
|
||||||
|
bt_peer_connection* p = static_cast<bt_peer_connection*>(peer);
|
||||||
|
|
||||||
// no supported flags to set yet
|
// no supported flags to set yet
|
||||||
// 0x01 - peer supports encryption
|
// 0x01 - peer supports encryption
|
||||||
|
@ -425,8 +429,10 @@ namespace libtorrent { namespace
|
||||||
|
|
||||||
boost::shared_ptr<peer_plugin> ut_pex_plugin::new_connection(peer_connection* pc)
|
boost::shared_ptr<peer_plugin> ut_pex_plugin::new_connection(peer_connection* pc)
|
||||||
{
|
{
|
||||||
bt_peer_connection* c = dynamic_cast<bt_peer_connection*>(pc);
|
if (pc->type() != peer_connection::bittorrent_connection)
|
||||||
if (!c) return boost::shared_ptr<peer_plugin>();
|
return boost::shared_ptr<peer_plugin>();
|
||||||
|
|
||||||
|
bt_peer_connection* c = static_cast<bt_peer_connection*>(pc);
|
||||||
return boost::shared_ptr<peer_plugin>(new ut_pex_peer_plugin(m_torrent
|
return boost::shared_ptr<peer_plugin>(new ut_pex_peer_plugin(m_torrent
|
||||||
, *pc, *this));
|
, *pc, *this));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue