make resolver_flags use enum class for improved type-safety
This commit is contained in:
parent
98a0344196
commit
afce0d3a86
|
@ -57,6 +57,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/session_settings.hpp"
|
||||
#include "libtorrent/i2p_stream.hpp"
|
||||
#include "libtorrent/aux_/vector.hpp"
|
||||
#include "libtorrent/resolver_interface.hpp"
|
||||
|
||||
namespace libtorrent {
|
||||
|
||||
|
@ -103,7 +104,7 @@ struct TORRENT_EXTRA_EXPORT http_connection
|
|||
, int prio = 0, aux::proxy_settings const* ps = NULL, int handle_redirects = 5
|
||||
, std::string const& user_agent = std::string()
|
||||
, boost::optional<address> const& bind_addr = boost::optional<address>()
|
||||
, int resolve_flags = 0, std::string const& auth_ = std::string()
|
||||
, resolver_flags resolve_flags = resolver_flags::none, std::string const& auth_ = std::string()
|
||||
#if TORRENT_USE_I2P
|
||||
, i2p_connection* i2p_conn = 0
|
||||
#endif
|
||||
|
@ -113,7 +114,7 @@ struct TORRENT_EXTRA_EXPORT http_connection
|
|||
, time_duration timeout, int prio = 0, aux::proxy_settings const* ps = NULL
|
||||
, bool ssl = false, int handle_redirect = 5
|
||||
, boost::optional<address> const& bind_addr = boost::optional<address>()
|
||||
, int resolve_flags = 0
|
||||
, resolver_flags resolve_flags = resolver_flags::none
|
||||
#if TORRENT_USE_I2P
|
||||
, i2p_connection* i2p_conn = 0
|
||||
#endif
|
||||
|
@ -215,7 +216,7 @@ private:
|
|||
int m_priority;
|
||||
|
||||
// used for DNS lookups
|
||||
int m_resolve_flags;
|
||||
resolver_flags m_resolve_flags;
|
||||
|
||||
std::uint16_t m_port;
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ struct TORRENT_EXTRA_EXPORT resolver final : resolver_interface
|
|||
{
|
||||
explicit resolver(io_service& ios);
|
||||
|
||||
virtual void async_resolve(std::string const& host, int flags
|
||||
virtual void async_resolve(std::string const& host, resolver_flags flags
|
||||
, callback_t const& h) override;
|
||||
|
||||
virtual void abort() override;
|
||||
|
|
|
@ -39,27 +39,37 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||
#include "libtorrent/error_code.hpp"
|
||||
#include "libtorrent/address.hpp"
|
||||
#include "libtorrent/time.hpp"
|
||||
#include "libtorrent/flags.hpp"
|
||||
|
||||
namespace libtorrent {
|
||||
|
||||
enum class resolver_flags : std::uint8_t
|
||||
{
|
||||
none = 0,
|
||||
|
||||
// this flag will make async_resolve() only use the cache and fail if we
|
||||
// don't have a cache entry, regardless of how old it is. This is usefull
|
||||
// when completing the lookup quickly is more important than accuracy,
|
||||
// like on shutdown
|
||||
cache_only = 1,
|
||||
|
||||
// set this flag for lookups that are not critical during shutdown. i.e.
|
||||
// for looking up tracker names _except_ when stopping a tracker.
|
||||
abort_on_shutdown = 2
|
||||
};
|
||||
|
||||
namespace flags {
|
||||
template <>
|
||||
struct enable_flag_operators<resolver_flags> : std::true_type {};
|
||||
}
|
||||
|
||||
using namespace flags;
|
||||
|
||||
struct TORRENT_EXTRA_EXPORT resolver_interface
|
||||
{
|
||||
using callback_t = std::function<void(error_code const&, std::vector<address> const&)>;
|
||||
|
||||
enum flags_t
|
||||
{
|
||||
// this flag will make async_resolve() only use the cache and fail if we
|
||||
// don't have a cache entry, regardless of how old it is. This is usefull
|
||||
// when completing the lookup quickly is more important than accuracy,
|
||||
// like on shutdown
|
||||
cache_only = 1,
|
||||
|
||||
// set this flag for lookups that are not critical during shutdown. i.e.
|
||||
// for looking up tracker names _except_ when stopping a tracker.
|
||||
abort_on_shutdown = 2
|
||||
};
|
||||
|
||||
virtual void async_resolve(std::string const& host, int flags
|
||||
virtual void async_resolve(std::string const& host, resolver_flags flags
|
||||
, callback_t const& h) = 0;
|
||||
|
||||
virtual void abort() = 0;
|
||||
|
|
|
@ -179,7 +179,7 @@ std::shared_ptr<http_connection> test_request(io_service& ios
|
|||
});
|
||||
|
||||
h->get(url, seconds(1), 0, &ps, 5, "test/user-agent", boost::optional<address>()
|
||||
, 0, auth);
|
||||
, resolver_flags::none, auth);
|
||||
return h;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ http_connection::http_connection(io_service& ios
|
|||
, m_rate_limit(0)
|
||||
, m_download_quota(0)
|
||||
, m_priority(0)
|
||||
, m_resolve_flags(0)
|
||||
, m_resolve_flags(resolver_flags::none)
|
||||
, m_port(0)
|
||||
, m_bottled(bottled)
|
||||
, m_called(false)
|
||||
|
@ -109,7 +109,7 @@ http_connection::~http_connection()
|
|||
|
||||
void http_connection::get(std::string const& url, time_duration timeout, int prio
|
||||
, aux::proxy_settings const* ps, int handle_redirects, std::string const& user_agent
|
||||
, boost::optional<address> const& bind_addr, int resolve_flags, std::string const& auth_
|
||||
, boost::optional<address> const& bind_addr, resolver_flags const resolve_flags, std::string const& auth_
|
||||
#if TORRENT_USE_I2P
|
||||
, i2p_connection* i2p_conn
|
||||
#endif
|
||||
|
@ -226,7 +226,7 @@ void http_connection::start(std::string const& hostname, int port
|
|||
, time_duration timeout, int prio, aux::proxy_settings const* ps, bool ssl
|
||||
, int handle_redirects
|
||||
, boost::optional<address> const& bind_addr
|
||||
, int resolve_flags
|
||||
, resolver_flags const resolve_flags
|
||||
#if TORRENT_USE_I2P
|
||||
, i2p_connection* i2p_conn
|
||||
#endif
|
||||
|
|
|
@ -223,9 +223,9 @@ namespace libtorrent {
|
|||
, tracker_req().event == tracker_request::stopped ? 2 : 1
|
||||
, ps.proxy_tracker_connections ? &ps : nullptr
|
||||
, 5, user_agent, bind_interface()
|
||||
, tracker_req().event == tracker_request::stopped
|
||||
? resolver_interface::cache_only : 0
|
||||
| resolver_interface::abort_on_shutdown
|
||||
, (tracker_req().event == tracker_request::stopped
|
||||
? resolver_flags::cache_only : resolver_flags::none)
|
||||
| resolver_flags::abort_on_shutdown
|
||||
#ifndef TORRENT_NO_DEPRECATE
|
||||
, tracker_req().auth
|
||||
#else
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace libtorrent {
|
|||
}
|
||||
}
|
||||
|
||||
void resolver::async_resolve(std::string const& host, int const flags
|
||||
void resolver::async_resolve(std::string const& host, resolver_flags const flags
|
||||
, resolver_interface::callback_t const& h)
|
||||
{
|
||||
// special handling for raw IP addresses. There's no need to get in line
|
||||
|
@ -103,7 +103,7 @@ namespace libtorrent {
|
|||
if (i != m_cache.end())
|
||||
{
|
||||
// keep cache entries valid for m_timeout seconds
|
||||
if ((flags & resolver_interface::cache_only)
|
||||
if (test(flags & resolver_flags::cache_only)
|
||||
|| i->second.last_seen + m_timeout >= aux::time_now())
|
||||
{
|
||||
m_ios.post(std::bind(h, ec, i->second.addresses));
|
||||
|
@ -111,7 +111,7 @@ namespace libtorrent {
|
|||
}
|
||||
}
|
||||
|
||||
if (flags & resolver_interface::cache_only)
|
||||
if (test(flags & resolver_flags::cache_only))
|
||||
{
|
||||
// we did not find a cache entry, fail the lookup
|
||||
m_ios.post(std::bind(h, boost::asio::error::host_not_found
|
||||
|
@ -124,7 +124,7 @@ namespace libtorrent {
|
|||
|
||||
using namespace std::placeholders;
|
||||
ADD_OUTSTANDING_ASYNC("resolver::on_lookup");
|
||||
if (flags & resolver_interface::abort_on_shutdown)
|
||||
if (test(flags & resolver_flags::abort_on_shutdown))
|
||||
{
|
||||
m_resolver.async_resolve(q, std::bind(&resolver::on_lookup, this, _1, _2
|
||||
, h, host));
|
||||
|
|
|
@ -5766,7 +5766,7 @@ namespace {
|
|||
void session_impl::add_dht_node_name(std::pair<std::string, int> const& node)
|
||||
{
|
||||
ADD_OUTSTANDING_ASYNC("session_impl::on_dht_name_lookup");
|
||||
m_host_resolver.async_resolve(node.first, resolver_interface::abort_on_shutdown
|
||||
m_host_resolver.async_resolve(node.first, resolver_flags::abort_on_shutdown
|
||||
, std::bind(&session_impl::on_dht_name_lookup
|
||||
, this, _1, _2, node.second));
|
||||
}
|
||||
|
@ -5795,7 +5795,7 @@ namespace {
|
|||
{
|
||||
ADD_OUTSTANDING_ASYNC("session_impl::on_dht_router_name_lookup");
|
||||
++m_outstanding_router_lookups;
|
||||
m_host_resolver.async_resolve(node.first, resolver_interface::abort_on_shutdown
|
||||
m_host_resolver.async_resolve(node.first, resolver_flags::abort_on_shutdown
|
||||
, std::bind(&session_impl::on_dht_router_name_lookup
|
||||
, this, _1, _2, node.second));
|
||||
}
|
||||
|
|
|
@ -3140,7 +3140,7 @@ namespace libtorrent {
|
|||
#endif
|
||||
{
|
||||
ADD_OUTSTANDING_ASYNC("torrent::on_peer_name_lookup");
|
||||
m_ses.get_resolver().async_resolve(i.hostname, resolver_interface::abort_on_shutdown
|
||||
m_ses.get_resolver().async_resolve(i.hostname, resolver_flags::abort_on_shutdown
|
||||
, std::bind(&torrent::on_peer_name_lookup, shared_from_this(), _1, _2, i.port));
|
||||
}
|
||||
}
|
||||
|
@ -5621,7 +5621,7 @@ namespace libtorrent {
|
|||
|
||||
// use proxy
|
||||
web->resolving = true;
|
||||
m_ses.get_resolver().async_resolve(ps.hostname, resolver_interface::abort_on_shutdown
|
||||
m_ses.get_resolver().async_resolve(ps.hostname, resolver_flags::abort_on_shutdown
|
||||
, [self, web, proxy_port](error_code const& e, std::vector<address> const& addrs)
|
||||
{
|
||||
self->wrap(&torrent::on_proxy_name_lookup, e, addrs, web, proxy_port);
|
||||
|
@ -5643,7 +5643,7 @@ namespace libtorrent {
|
|||
auto self = shared_from_this();
|
||||
web->resolving = true;
|
||||
|
||||
m_ses.get_resolver().async_resolve(hostname, resolver_interface::abort_on_shutdown
|
||||
m_ses.get_resolver().async_resolve(hostname, resolver_flags::abort_on_shutdown
|
||||
, [self, web, port](error_code const& e, std::vector<address> const& addrs)
|
||||
{
|
||||
self->wrap(&torrent::on_name_lookup, e, addrs, port, web);
|
||||
|
@ -5728,7 +5728,7 @@ namespace libtorrent {
|
|||
|
||||
auto self = shared_from_this();
|
||||
web->resolving = true;
|
||||
m_ses.get_resolver().async_resolve(hostname, resolver_interface::abort_on_shutdown
|
||||
m_ses.get_resolver().async_resolve(hostname, resolver_flags::abort_on_shutdown
|
||||
, [self, web, port](error_code const& err, std::vector<address> const& addr)
|
||||
{
|
||||
self->wrap(&torrent::on_name_lookup, err, addr, port, web);
|
||||
|
|
|
@ -106,9 +106,9 @@ namespace libtorrent {
|
|||
// when stopping, pass in the cache-only flag, because we
|
||||
// don't want to get stuck on DNS lookups when shutting down
|
||||
m_man.host_resolver().async_resolve(hostname
|
||||
, tracker_req().event == tracker_request::stopped
|
||||
? resolver_interface::cache_only : 0
|
||||
| resolver_interface::abort_on_shutdown
|
||||
, (tracker_req().event == tracker_request::stopped
|
||||
? resolver_flags::cache_only : resolver_flags::none)
|
||||
| resolver_flags::abort_on_shutdown
|
||||
, std::bind(&udp_tracker_connection::name_lookup
|
||||
, shared_from_this(), _1, _2, port));
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ void run_test(std::string const& url, int size, int status, int connected
|
|||
std::shared_ptr<http_connection> h = std::make_shared<http_connection>(ios
|
||||
, res, &::http_handler, true, 1024*1024, &::http_connect_handler);
|
||||
h->get(url, seconds(1), 0, &ps, 5, "test/user-agent", address(address_v4::any())
|
||||
, 0, auth);
|
||||
, resolver_flags::none, auth);
|
||||
ios.reset();
|
||||
error_code e;
|
||||
ios.run(e);
|
||||
|
|
Loading…
Reference in New Issue