remove internal fields from web_seed_entry
This commit is contained in:
parent
73a2a4e51d
commit
092362e9bc
|
@ -1,3 +1,4 @@
|
||||||
|
* remove internal fields from web_seed_entry
|
||||||
* separate crypto library configuration <crypto> and whether to support
|
* separate crypto library configuration <crypto> and whether to support
|
||||||
bittorrent protocol encryption <encryption>
|
bittorrent protocol encryption <encryption>
|
||||||
* simplify bittorrent protocol encryption by just using internal RC4
|
* simplify bittorrent protocol encryption by just using internal RC4
|
||||||
|
|
|
@ -82,7 +82,7 @@ namespace libtorrent
|
||||||
// The peer_conenction should handshake and verify that the
|
// The peer_conenction should handshake and verify that the
|
||||||
// other end has the correct id
|
// other end has the correct id
|
||||||
http_seed_connection(peer_connection_args const& pack
|
http_seed_connection(peer_connection_args const& pack
|
||||||
, web_seed_entry& web);
|
, web_seed_t& web);
|
||||||
|
|
||||||
virtual int type() const { return peer_connection::http_seed_connection; }
|
virtual int type() const { return peer_connection::http_seed_connection; }
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ namespace libtorrent
|
||||||
// if it's changed referencing back into that list will fail
|
// if it's changed referencing back into that list will fail
|
||||||
const std::string m_url;
|
const std::string m_url;
|
||||||
|
|
||||||
web_seed_entry* m_web;
|
web_seed_t* m_web;
|
||||||
|
|
||||||
// the number of bytes left to receive of the response we're
|
// the number of bytes left to receive of the response we're
|
||||||
// currently parsing
|
// currently parsing
|
||||||
|
|
|
@ -142,6 +142,49 @@ namespace libtorrent
|
||||||
{ return deadline < rhs.deadline; }
|
{ return deadline < rhs.deadline; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// this is the internal representation of web seeds
|
||||||
|
struct web_seed_t : web_seed_entry
|
||||||
|
{
|
||||||
|
web_seed_t(web_seed_entry const& wse);
|
||||||
|
web_seed_t(std::string const& url_, web_seed_entry::type_t type_
|
||||||
|
, std::string const& auth_ = std::string()
|
||||||
|
, web_seed_entry::headers_t const& extra_headers_ = web_seed_entry::headers_t());
|
||||||
|
|
||||||
|
// if this is > now, we can't reconnect yet
|
||||||
|
ptime retry;
|
||||||
|
|
||||||
|
// if the hostname of the web seed has been resolved,
|
||||||
|
// these are its IP addresses
|
||||||
|
std::vector<tcp::endpoint> endpoints;
|
||||||
|
|
||||||
|
// this is the peer_info field used for the
|
||||||
|
// connection, just to count hash failures
|
||||||
|
// it's also used to hold the peer_connection
|
||||||
|
// pointer, when the web seed is connected
|
||||||
|
ipv4_peer peer_info;
|
||||||
|
|
||||||
|
// this is initialized to true, but if we discover the
|
||||||
|
// server not to support it, it's set to false, and we
|
||||||
|
// make larger requests.
|
||||||
|
bool supports_keepalive;
|
||||||
|
|
||||||
|
// this indicates whether or not we're resolving the
|
||||||
|
// hostname of this URL
|
||||||
|
bool resolving;
|
||||||
|
|
||||||
|
// if the user wanted to remove this while
|
||||||
|
// we were resolving it. In this case, we set
|
||||||
|
// the removed flag to true, to make the resolver
|
||||||
|
// callback remove it
|
||||||
|
bool removed;
|
||||||
|
|
||||||
|
// if the web server doesn't support keepalive or a block request was
|
||||||
|
// interrupted, the block received so far is kept here for the next
|
||||||
|
// connection to pick up
|
||||||
|
peer_request restart_request;
|
||||||
|
std::vector<char> restart_piece;
|
||||||
|
};
|
||||||
|
|
||||||
struct torrent_hot_members
|
struct torrent_hot_members
|
||||||
{
|
{
|
||||||
torrent_hot_members(aux::session_interface& ses
|
torrent_hot_members(aux::session_interface& ses
|
||||||
|
@ -520,7 +563,7 @@ namespace libtorrent
|
||||||
void use_interface(std::string net_interface);
|
void use_interface(std::string net_interface);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void connect_to_url_seed(std::list<web_seed_entry>::iterator url);
|
void connect_to_url_seed(std::list<web_seed_t>::iterator url);
|
||||||
bool connect_to_peer(torrent_peer* peerinfo, bool ignore_limit = false);
|
bool connect_to_peer(torrent_peer* peerinfo, bool ignore_limit = false);
|
||||||
|
|
||||||
int priority() const { return m_priority; }
|
int priority() const { return m_priority; }
|
||||||
|
@ -563,11 +606,11 @@ namespace libtorrent
|
||||||
|
|
||||||
// add or remove a url that will be attempted for
|
// add or remove a url that will be attempted for
|
||||||
// finding the file(s) in this torrent.
|
// finding the file(s) in this torrent.
|
||||||
void add_web_seed(std::string const& url, web_seed_entry::type_t type);
|
void add_web_seed(std::string const& url, web_seed_t::type_t type);
|
||||||
void add_web_seed(std::string const& url, web_seed_entry::type_t type
|
void add_web_seed(std::string const& url, web_seed_t::type_t type
|
||||||
, std::string const& auth, web_seed_entry::headers_t const& extra_headers);
|
, std::string const& auth, web_seed_t::headers_t const& extra_headers);
|
||||||
|
|
||||||
void remove_web_seed(std::string const& url, web_seed_entry::type_t type);
|
void remove_web_seed(std::string const& url, web_seed_t::type_t type);
|
||||||
void disconnect_web_seed(peer_connection* p);
|
void disconnect_web_seed(peer_connection* p);
|
||||||
|
|
||||||
void retry_web_seed(peer_connection* p, int retry = 0);
|
void retry_web_seed(peer_connection* p, int retry = 0);
|
||||||
|
@ -575,9 +618,6 @@ namespace libtorrent
|
||||||
void remove_web_seed(peer_connection* p, error_code const& ec
|
void remove_web_seed(peer_connection* p, error_code const& ec
|
||||||
, peer_connection_interface::operation_t op, int error = 0);
|
, peer_connection_interface::operation_t op, int error = 0);
|
||||||
|
|
||||||
std::list<web_seed_entry> web_seeds() const
|
|
||||||
{ return m_web_seeds; }
|
|
||||||
|
|
||||||
std::set<std::string> web_seeds(web_seed_entry::type_t type) const;
|
std::set<std::string> web_seeds(web_seed_entry::type_t type) const;
|
||||||
|
|
||||||
bool free_upload_slots() const
|
bool free_upload_slots() const
|
||||||
|
@ -832,15 +872,15 @@ namespace libtorrent
|
||||||
void on_name_lookup(error_code const& e
|
void on_name_lookup(error_code const& e
|
||||||
, std::vector<address> const& addrs
|
, std::vector<address> const& addrs
|
||||||
, int port
|
, int port
|
||||||
, std::list<web_seed_entry>::iterator web, tcp::endpoint proxy);
|
, std::list<web_seed_t>::iterator web, tcp::endpoint proxy);
|
||||||
|
|
||||||
void connect_web_seed(std::list<web_seed_entry>::iterator web, tcp::endpoint a);
|
void connect_web_seed(std::list<web_seed_t>::iterator web, tcp::endpoint a);
|
||||||
|
|
||||||
// this is the asio callback that is called when a name
|
// this is the asio callback that is called when a name
|
||||||
// lookup for a proxy for a web seed is completed.
|
// lookup for a proxy for a web seed is completed.
|
||||||
void on_proxy_name_lookup(error_code const& e
|
void on_proxy_name_lookup(error_code const& e
|
||||||
, std::vector<address> const& addrs
|
, std::vector<address> const& addrs
|
||||||
, std::list<web_seed_entry>::iterator web, int port);
|
, std::list<web_seed_t>::iterator web, int port);
|
||||||
|
|
||||||
// re-evaluates whether this torrent should be considered inactive or not
|
// re-evaluates whether this torrent should be considered inactive or not
|
||||||
void on_inactivity_tick(error_code const& ec);
|
void on_inactivity_tick(error_code const& ec);
|
||||||
|
@ -852,7 +892,7 @@ namespace libtorrent
|
||||||
|
|
||||||
// remove a web seed, or schedule it for removal in case there
|
// remove a web seed, or schedule it for removal in case there
|
||||||
// are outstanding operations on it
|
// are outstanding operations on it
|
||||||
void remove_web_seed(std::list<web_seed_entry>::iterator web);
|
void remove_web_seed(std::list<web_seed_t>::iterator web);
|
||||||
|
|
||||||
// this is called when the torrent has finished. i.e.
|
// this is called when the torrent has finished. i.e.
|
||||||
// all the pieces we have not filtered have been downloaded.
|
// all the pieces we have not filtered have been downloaded.
|
||||||
|
@ -1188,7 +1228,7 @@ namespace libtorrent
|
||||||
|
|
||||||
// The list of web seeds in this torrent. Seeds
|
// The list of web seeds in this torrent. Seeds
|
||||||
// with fatal errors are removed from the set
|
// with fatal errors are removed from the set
|
||||||
std::list<web_seed_entry> m_web_seeds;
|
std::list<web_seed_t> m_web_seeds;
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||||
typedef std::list<boost::shared_ptr<torrent_plugin> > extension_list_t;
|
typedef std::list<boost::shared_ptr<torrent_plugin> > extension_list_t;
|
||||||
|
|
|
@ -219,9 +219,6 @@ namespace libtorrent
|
||||||
void trim();
|
void trim();
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: 3 this type should be different from the one used by torrent. It
|
|
||||||
// should not include internal state.
|
|
||||||
|
|
||||||
// the web_seed_entry holds information about a web seed (also known
|
// the web_seed_entry holds information about a web seed (also known
|
||||||
// as URL seed or HTTP seed). It is essentially a URL with some state
|
// as URL seed or HTTP seed). It is essentially a URL with some state
|
||||||
// associated with it. For more information, see `BEP 17`_ and `BEP 19`_.
|
// associated with it. For more information, see `BEP 17`_ and `BEP 19`_.
|
||||||
|
@ -261,42 +258,8 @@ namespace libtorrent
|
||||||
// Any extra HTTP headers that need to be passed to the web seed
|
// Any extra HTTP headers that need to be passed to the web seed
|
||||||
headers_t extra_headers;
|
headers_t extra_headers;
|
||||||
|
|
||||||
// if this is > now, we can't reconnect yet
|
|
||||||
ptime retry;
|
|
||||||
|
|
||||||
// if the hostname of the web seed has been resolved,
|
|
||||||
// these are its IP addresses
|
|
||||||
std::vector<tcp::endpoint> endpoints;
|
|
||||||
|
|
||||||
// this is the peer_info field used for the
|
|
||||||
// connection, just to count hash failures
|
|
||||||
// it's also used to hold the peer_connection
|
|
||||||
// pointer, when the web seed is connected
|
|
||||||
ipv4_peer peer_info;
|
|
||||||
|
|
||||||
// The type of web seed (see type_t)
|
// The type of web seed (see type_t)
|
||||||
boost::uint8_t type;
|
boost::uint8_t type;
|
||||||
|
|
||||||
// this is initialized to true, but if we discover the
|
|
||||||
// server not to support it, it's set to false, and we
|
|
||||||
// make larger requests.
|
|
||||||
bool supports_keepalive;
|
|
||||||
|
|
||||||
// this indicates whether or not we're resolving the
|
|
||||||
// hostname of this URL
|
|
||||||
bool resolving;
|
|
||||||
|
|
||||||
// if the user wanted to remove this while
|
|
||||||
// we were resolving it. In this case, we set
|
|
||||||
// the removed flag to true, to make the resolver
|
|
||||||
// callback remove it
|
|
||||||
bool removed;
|
|
||||||
|
|
||||||
// if the web server doesn't support keepalive or a block request was
|
|
||||||
// interrupted, the block received so far is kept here for the next
|
|
||||||
// connection to pick up
|
|
||||||
peer_request restart_request;
|
|
||||||
std::vector<char> restart_piece;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef BOOST_NO_EXCEPTIONS
|
#ifndef BOOST_NO_EXCEPTIONS
|
||||||
|
@ -304,7 +267,7 @@ namespace libtorrent
|
||||||
typedef libtorrent_exception invalid_torrent_file;
|
typedef libtorrent_exception invalid_torrent_file;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO: 2 there may be some opportunities to optimize the size if torrent_info.
|
// TODO: there may be some opportunities to optimize the size if torrent_info.
|
||||||
// specifically to turn some std::string and std::vector into pointers
|
// specifically to turn some std::string and std::vector into pointers
|
||||||
class TORRENT_EXPORT torrent_info
|
class TORRENT_EXPORT torrent_info
|
||||||
{
|
{
|
||||||
|
|
|
@ -86,7 +86,7 @@ namespace libtorrent
|
||||||
// The peer_conenction should handshake and verify that the
|
// The peer_conenction should handshake and verify that the
|
||||||
// other end has the correct id
|
// other end has the correct id
|
||||||
web_connection_base(peer_connection_args const& pack
|
web_connection_base(peer_connection_args const& pack
|
||||||
, web_seed_entry& web);
|
, web_seed_t& web);
|
||||||
|
|
||||||
virtual int timeout() const;
|
virtual int timeout() const;
|
||||||
void start();
|
void start();
|
||||||
|
|
|
@ -75,7 +75,7 @@ namespace libtorrent
|
||||||
// The peer_conenction should handshake and verify that the
|
// The peer_conenction should handshake and verify that the
|
||||||
// other end has the correct id
|
// other end has the correct id
|
||||||
web_peer_connection(peer_connection_args const& pack
|
web_peer_connection(peer_connection_args const& pack
|
||||||
, web_seed_entry& web);
|
, web_seed_t& web);
|
||||||
|
|
||||||
virtual void on_connected();
|
virtual void on_connected();
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ namespace libtorrent
|
||||||
|
|
||||||
std::string m_url;
|
std::string m_url;
|
||||||
|
|
||||||
web_seed_entry* m_web;
|
web_seed_t* m_web;
|
||||||
|
|
||||||
// this is used for intermediate storage of pieces
|
// this is used for intermediate storage of pieces
|
||||||
// that are received in more than one HTTP response
|
// that are received in more than one HTTP response
|
||||||
|
|
|
@ -53,7 +53,7 @@ using libtorrent::aux::session_impl;
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
http_seed_connection::http_seed_connection(peer_connection_args const& pack
|
http_seed_connection::http_seed_connection(peer_connection_args const& pack
|
||||||
, web_seed_entry& web)
|
, web_seed_t& web)
|
||||||
: web_connection_base(pack, web)
|
: web_connection_base(pack, web)
|
||||||
, m_url(web.url)
|
, m_url(web.url)
|
||||||
, m_web(&web)
|
, m_web(&web)
|
||||||
|
|
|
@ -122,6 +122,32 @@ namespace libtorrent
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
web_seed_t::web_seed_t(web_seed_entry const& wse)
|
||||||
|
: web_seed_entry(wse)
|
||||||
|
, retry(time_now())
|
||||||
|
, peer_info(tcp::endpoint(), true, 0)
|
||||||
|
, supports_keepalive(true)
|
||||||
|
, resolving(false)
|
||||||
|
, removed(false)
|
||||||
|
{
|
||||||
|
peer_info.web_seed = true;
|
||||||
|
restart_request.piece = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
web_seed_t::web_seed_t(std::string const& url_, web_seed_entry::type_t type_
|
||||||
|
, std::string const& auth_
|
||||||
|
, web_seed_entry::headers_t const& extra_headers_)
|
||||||
|
: web_seed_entry(url_, type_, auth_, extra_headers_)
|
||||||
|
, retry(time_now())
|
||||||
|
, peer_info(tcp::endpoint(), true, 0)
|
||||||
|
, supports_keepalive(true)
|
||||||
|
, resolving(false)
|
||||||
|
, removed(false)
|
||||||
|
{
|
||||||
|
peer_info.web_seed = true;
|
||||||
|
restart_request.piece = -1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_EXTENSIONS
|
#ifndef TORRENT_DISABLE_EXTENSIONS
|
||||||
// defined in ut_pex.cpp
|
// defined in ut_pex.cpp
|
||||||
bool was_introduced_by(peer_plugin const*, tcp::endpoint const&);
|
bool was_introduced_by(peer_plugin const*, tcp::endpoint const&);
|
||||||
|
@ -277,7 +303,7 @@ namespace libtorrent
|
||||||
for (std::vector<std::string>::const_iterator i = p.url_seeds.begin()
|
for (std::vector<std::string>::const_iterator i = p.url_seeds.begin()
|
||||||
, end(p.url_seeds.end()); i != end; ++i)
|
, end(p.url_seeds.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
m_web_seeds.push_back(web_seed_entry(*i, web_seed_entry::url_seed));
|
m_web_seeds.push_back(web_seed_t(*i, web_seed_entry::url_seed));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_trackers = m_torrent_file->trackers();
|
m_trackers = m_torrent_file->trackers();
|
||||||
|
@ -5847,7 +5873,7 @@ namespace libtorrent
|
||||||
update_want_tick();
|
update_want_tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::remove_web_seed(std::list<web_seed_entry>::iterator web)
|
void torrent::remove_web_seed(std::list<web_seed_t>::iterator web)
|
||||||
{
|
{
|
||||||
if (web->resolving)
|
if (web->resolving)
|
||||||
{
|
{
|
||||||
|
@ -5859,7 +5885,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
// if we have a connection for this web seed, we also need to
|
// if we have a connection for this web seed, we also need to
|
||||||
// disconnect it and clear its reference to the peer_info object
|
// disconnect it and clear its reference to the peer_info object
|
||||||
// that's part of the web_seed_entry we're about to remove
|
// that's part of the web_seed_t we're about to remove
|
||||||
TORRENT_ASSERT(peer->m_in_use == 1337);
|
TORRENT_ASSERT(peer->m_in_use == 1337);
|
||||||
peer->disconnect(boost::asio::error::operation_aborted
|
peer->disconnect(boost::asio::error::operation_aborted
|
||||||
, peer_connection_interface::op_bittorrent);
|
, peer_connection_interface::op_bittorrent);
|
||||||
|
@ -5871,7 +5897,7 @@ namespace libtorrent
|
||||||
update_want_tick();
|
update_want_tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::connect_to_url_seed(std::list<web_seed_entry>::iterator web)
|
void torrent::connect_to_url_seed(std::list<web_seed_t>::iterator web)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
@ -6024,7 +6050,7 @@ namespace libtorrent
|
||||||
|
|
||||||
void torrent::on_proxy_name_lookup(error_code const& e
|
void torrent::on_proxy_name_lookup(error_code const& e
|
||||||
, std::vector<address> const& addrs
|
, std::vector<address> const& addrs
|
||||||
, std::list<web_seed_entry>::iterator web, int port)
|
, std::list<web_seed_t>::iterator web, int port)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
|
|
||||||
|
@ -6108,7 +6134,7 @@ namespace libtorrent
|
||||||
void torrent::on_name_lookup(error_code const& e
|
void torrent::on_name_lookup(error_code const& e
|
||||||
, std::vector<address> const& addrs
|
, std::vector<address> const& addrs
|
||||||
, int port
|
, int port
|
||||||
, std::list<web_seed_entry>::iterator web
|
, std::list<web_seed_t>::iterator web
|
||||||
, tcp::endpoint proxy)
|
, tcp::endpoint proxy)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
|
@ -6163,7 +6189,7 @@ namespace libtorrent
|
||||||
connect_web_seed(web, web->endpoints.front());
|
connect_web_seed(web, web->endpoints.front());
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::connect_web_seed(std::list<web_seed_entry>::iterator web, tcp::endpoint a)
|
void torrent::connect_web_seed(std::list<web_seed_t>::iterator web, tcp::endpoint a)
|
||||||
{
|
{
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
||||||
|
@ -6856,7 +6882,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
entry::list_type& url_list = ret["url-list"].list();
|
entry::list_type& url_list = ret["url-list"].list();
|
||||||
entry::list_type& httpseed_list = ret["httpseeds"].list();
|
entry::list_type& httpseed_list = ret["httpseeds"].list();
|
||||||
for (std::list<web_seed_entry>::const_iterator i = m_web_seeds.begin()
|
for (std::list<web_seed_t>::const_iterator i = m_web_seeds.begin()
|
||||||
, end(m_web_seeds.end()); i != end; ++i)
|
, end(m_web_seeds.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
if (i->type == web_seed_entry::url_seed)
|
if (i->type == web_seed_entry::url_seed)
|
||||||
|
@ -9188,7 +9214,7 @@ namespace libtorrent
|
||||||
// finding the file(s) in this torrent.
|
// finding the file(s) in this torrent.
|
||||||
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type)
|
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type)
|
||||||
{
|
{
|
||||||
web_seed_entry ent(url, type);
|
web_seed_t ent(url, type);
|
||||||
// don't add duplicates
|
// don't add duplicates
|
||||||
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
||||||
m_web_seeds.push_back(ent);
|
m_web_seeds.push_back(ent);
|
||||||
|
@ -9198,7 +9224,7 @@ namespace libtorrent
|
||||||
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type
|
void torrent::add_web_seed(std::string const& url, web_seed_entry::type_t type
|
||||||
, std::string const& auth, web_seed_entry::headers_t const& extra_headers)
|
, std::string const& auth, web_seed_entry::headers_t const& extra_headers)
|
||||||
{
|
{
|
||||||
web_seed_entry ent(url, type, auth, extra_headers);
|
web_seed_t ent(url, type, auth, extra_headers);
|
||||||
// don't add duplicates
|
// don't add duplicates
|
||||||
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
if (std::find(m_web_seeds.begin(), m_web_seeds.end(), ent) != m_web_seeds.end()) return;
|
||||||
m_web_seeds.push_back(ent);
|
m_web_seeds.push_back(ent);
|
||||||
|
@ -9712,10 +9738,10 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
// keep trying web-seeds if there are any
|
// keep trying web-seeds if there are any
|
||||||
// first find out which web seeds we are connected to
|
// first find out which web seeds we are connected to
|
||||||
for (std::list<web_seed_entry>::iterator i = m_web_seeds.begin();
|
for (std::list<web_seed_t>::iterator i = m_web_seeds.begin();
|
||||||
i != m_web_seeds.end();)
|
i != m_web_seeds.end();)
|
||||||
{
|
{
|
||||||
std::list<web_seed_entry>::iterator w = i++;
|
std::list<web_seed_t>::iterator w = i++;
|
||||||
if (w->peer_info.connection) continue;
|
if (w->peer_info.connection) continue;
|
||||||
if (w->retry > time_now()) continue;
|
if (w->retry > time_now()) continue;
|
||||||
if (w->resolving) continue;
|
if (w->resolving) continue;
|
||||||
|
@ -10528,7 +10554,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
std::set<std::string> ret;
|
std::set<std::string> ret;
|
||||||
for (std::list<web_seed_entry>::const_iterator i = m_web_seeds.begin()
|
for (std::list<web_seed_t>::const_iterator i = m_web_seeds.begin()
|
||||||
, end(m_web_seeds.end()); i != end; ++i)
|
, end(m_web_seeds.end()); i != end; ++i)
|
||||||
{
|
{
|
||||||
if (i->peer_info.banned) continue;
|
if (i->peer_info.banned) continue;
|
||||||
|
@ -10540,18 +10566,19 @@ namespace libtorrent
|
||||||
|
|
||||||
void torrent::remove_web_seed(std::string const& url, web_seed_entry::type_t type)
|
void torrent::remove_web_seed(std::string const& url, web_seed_entry::type_t type)
|
||||||
{
|
{
|
||||||
std::list<web_seed_entry>::iterator i = std::find_if(m_web_seeds.begin(), m_web_seeds.end()
|
std::list<web_seed_t>::iterator i = std::find_if(m_web_seeds.begin()
|
||||||
, (boost::bind(&web_seed_entry::url, _1)
|
, m_web_seeds.end()
|
||||||
== url && boost::bind(&web_seed_entry::type, _1) == type));
|
, (boost::bind(&web_seed_t::url, _1)
|
||||||
|
== url && boost::bind(&web_seed_t::type, _1) == type));
|
||||||
if (i != m_web_seeds.end()) remove_web_seed(i);
|
if (i != m_web_seeds.end()) remove_web_seed(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void torrent::disconnect_web_seed(peer_connection* p)
|
void torrent::disconnect_web_seed(peer_connection* p)
|
||||||
{
|
{
|
||||||
std::list<web_seed_entry>::iterator i
|
std::list<web_seed_t>::iterator i
|
||||||
= std::find_if(m_web_seeds.begin(), m_web_seeds.end()
|
= std::find_if(m_web_seeds.begin(), m_web_seeds.end()
|
||||||
, (boost::bind(&torrent_peer::connection
|
, (boost::bind(&torrent_peer::connection
|
||||||
, boost::bind(&web_seed_entry::peer_info, _1)) == p));
|
, boost::bind(&web_seed_t::peer_info, _1)) == p));
|
||||||
|
|
||||||
// this happens if the web server responded with a redirect
|
// this happens if the web server responded with a redirect
|
||||||
// or with something incorrect, so that we removed the web seed
|
// or with something incorrect, so that we removed the web seed
|
||||||
|
@ -10570,8 +10597,10 @@ namespace libtorrent
|
||||||
void torrent::remove_web_seed(peer_connection* p, error_code const& ec
|
void torrent::remove_web_seed(peer_connection* p, error_code const& ec
|
||||||
, peer_connection_interface::operation_t op, int error)
|
, peer_connection_interface::operation_t op, int error)
|
||||||
{
|
{
|
||||||
std::list<web_seed_entry>::iterator i = std::find_if(m_web_seeds.begin(), m_web_seeds.end()
|
std::list<web_seed_t>::iterator i = std::find_if(m_web_seeds.begin()
|
||||||
, (boost::bind(&torrent_peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p));
|
, m_web_seeds.end()
|
||||||
|
, boost::bind(&torrent_peer::connection
|
||||||
|
, boost::bind(&web_seed_t::peer_info, _1)) == p);
|
||||||
TORRENT_ASSERT(i != m_web_seeds.end());
|
TORRENT_ASSERT(i != m_web_seeds.end());
|
||||||
if (i == m_web_seeds.end()) return;
|
if (i == m_web_seeds.end()) return;
|
||||||
if (i->peer_info.connection) i->peer_info.connection->disconnect(ec, op, error);
|
if (i->peer_info.connection) i->peer_info.connection->disconnect(ec, op, error);
|
||||||
|
@ -10584,8 +10613,10 @@ namespace libtorrent
|
||||||
void torrent::retry_web_seed(peer_connection* p, int retry)
|
void torrent::retry_web_seed(peer_connection* p, int retry)
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(is_single_thread());
|
TORRENT_ASSERT(is_single_thread());
|
||||||
std::list<web_seed_entry>::iterator i = std::find_if(m_web_seeds.begin(), m_web_seeds.end()
|
std::list<web_seed_t>::iterator i = std::find_if(m_web_seeds.begin()
|
||||||
, (boost::bind(&torrent_peer::connection, boost::bind(&web_seed_entry::peer_info, _1)) == p));
|
, m_web_seeds.end()
|
||||||
|
, boost::bind(&torrent_peer::connection
|
||||||
|
, boost::bind(&web_seed_t::peer_info, _1)) == p);
|
||||||
|
|
||||||
TORRENT_ASSERT(i != m_web_seeds.end());
|
TORRENT_ASSERT(i != m_web_seeds.end());
|
||||||
if (i == m_web_seeds.end()) return;
|
if (i == m_web_seeds.end()) return;
|
||||||
|
|
|
@ -665,15 +665,8 @@ namespace libtorrent
|
||||||
: url(url_)
|
: url(url_)
|
||||||
, auth(auth_)
|
, auth(auth_)
|
||||||
, extra_headers(extra_headers_)
|
, extra_headers(extra_headers_)
|
||||||
, retry(time_now())
|
|
||||||
, peer_info(tcp::endpoint(), true, 0)
|
|
||||||
, type(type_)
|
, type(type_)
|
||||||
, supports_keepalive(true)
|
|
||||||
, resolving(false)
|
|
||||||
, removed(false)
|
|
||||||
{
|
{
|
||||||
peer_info.web_seed = true;
|
|
||||||
restart_request.piece = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
torrent_info::torrent_info(torrent_info const& t)
|
torrent_info::torrent_info(torrent_info const& t)
|
||||||
|
|
|
@ -53,7 +53,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
web_connection_base::web_connection_base(
|
web_connection_base::web_connection_base(
|
||||||
peer_connection_args const& pack
|
peer_connection_args const& pack
|
||||||
, web_seed_entry& web)
|
, web_seed_t& web)
|
||||||
: peer_connection(pack)
|
: peer_connection(pack)
|
||||||
, m_first_request(true)
|
, m_first_request(true)
|
||||||
, m_ssl(false)
|
, m_ssl(false)
|
||||||
|
|
|
@ -61,7 +61,7 @@ enum
|
||||||
struct disk_interface;
|
struct disk_interface;
|
||||||
|
|
||||||
web_peer_connection::web_peer_connection(peer_connection_args const& pack
|
web_peer_connection::web_peer_connection(peer_connection_args const& pack
|
||||||
, web_seed_entry& web)
|
, web_seed_t& web)
|
||||||
: web_connection_base(pack, web)
|
: web_connection_base(pack, web)
|
||||||
, m_url(web.url)
|
, m_url(web.url)
|
||||||
, m_web(&web)
|
, m_web(&web)
|
||||||
|
|
Loading…
Reference in New Issue