diff --git a/src/command_network.cc b/src/command_network.cc index 0a281172..64967511 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -507,16 +507,18 @@ initialize_command_network() { CMD2_VAR_STRING ("protocol.choke_heuristics.down.leech", "download_leech"); CMD2_VAR_STRING ("protocol.choke_heuristics.down.seed", "download_leech"); - CMD2_ANY ("network.http.capath", std::bind(&core::CurlStack::http_capath, httpStack)); - CMD2_ANY_STRING_V("network.http.capath.set", std::bind(&core::CurlStack::set_http_capath, httpStack, std::placeholders::_2)); - CMD2_ANY ("network.http.cacert", std::bind(&core::CurlStack::http_cacert, httpStack)); - CMD2_ANY_STRING_V("network.http.cacert.set", std::bind(&core::CurlStack::set_http_cacert, httpStack, std::placeholders::_2)); - CMD2_ANY ("network.http.proxy_address", std::bind(&core::CurlStack::http_proxy, httpStack)); - CMD2_ANY_STRING_V("network.http.proxy_address.set", std::bind(&core::CurlStack::set_http_proxy, httpStack, std::placeholders::_2)); - CMD2_ANY ("network.http.max_open", std::bind(&core::CurlStack::max_active, httpStack)); - CMD2_ANY_VALUE_V ("network.http.max_open.set", std::bind(&core::CurlStack::set_max_active, httpStack, std::placeholders::_2)); - CMD2_ANY ("network.http.ssl_verify_peer", std::bind(&core::CurlStack::ssl_verify_peer, httpStack)); - CMD2_ANY_VALUE_V ("network.http.ssl_verify_peer.set", std::bind(&core::CurlStack::set_ssl_verify_peer, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.capath", std::bind(&core::CurlStack::http_capath, httpStack)); + CMD2_ANY_STRING_V("network.http.capath.set", std::bind(&core::CurlStack::set_http_capath, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.cacert", std::bind(&core::CurlStack::http_cacert, httpStack)); + CMD2_ANY_STRING_V("network.http.cacert.set", std::bind(&core::CurlStack::set_http_cacert, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.proxy_address", std::bind(&core::CurlStack::http_proxy, httpStack)); + CMD2_ANY_STRING_V("network.http.proxy_address.set", std::bind(&core::CurlStack::set_http_proxy, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.max_open", std::bind(&core::CurlStack::max_active, httpStack)); + CMD2_ANY_VALUE_V ("network.http.max_open.set", std::bind(&core::CurlStack::set_max_active, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.ssl_verify_peer", std::bind(&core::CurlStack::ssl_verify_peer, httpStack)); + CMD2_ANY_VALUE_V ("network.http.ssl_verify_peer.set", std::bind(&core::CurlStack::set_ssl_verify_peer, httpStack, std::placeholders::_2)); + CMD2_ANY ("network.http.dns_cache_timeout", std::bind(&core::CurlStack::ssl_verify_peer, httpStack)); + CMD2_ANY_VALUE_V ("network.http.dns_cache_timeout.set", std::bind(&core::CurlStack::set_ssl_verify_peer, httpStack, std::placeholders::_2)); CMD2_ANY ("network.send_buffer.size", std::bind(&torrent::ConnectionManager::send_buffer_size, cm)); CMD2_ANY_VALUE_V ("network.send_buffer.size.set", std::bind(&torrent::ConnectionManager::set_send_buffer_size, cm, std::placeholders::_2)); diff --git a/src/core/curl_stack.cc b/src/core/curl_stack.cc index 4f54a0d9..318deb10 100644 --- a/src/core/curl_stack.cc +++ b/src/core/curl_stack.cc @@ -52,7 +52,8 @@ CurlStack::CurlStack() : m_handle((void*)curl_multi_init()), m_active(0), m_maxActive(32), - m_ssl_verify_peer(true) { + m_ssl_verify_peer(true), + m_dns_timeout(60) { m_taskTimeout.set_slot(rak::mem_fn(this, &CurlStack::receive_timeout)); @@ -165,8 +166,8 @@ CurlStack::add_get(CurlGet* get) { if (!m_httpCaCert.empty()) curl_easy_setopt(get->handle(), CURLOPT_CAINFO, m_httpCaCert.c_str()); - if (!m_ssl_verify_peer) - curl_easy_setopt(get->handle(), CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(get->handle(), CURLOPT_SSL_VERIFYPEER, (long)m_ssl_verify_peer); + curl_easy_setopt(get->handle(), CURLOPT_DNS_CACHE_TIMEOUT, m_dns_timeout); base_type::push_back(get); diff --git a/src/core/curl_stack.h b/src/core/curl_stack.h index 68b9f3f6..53089bb2 100644 --- a/src/core/curl_stack.h +++ b/src/core/curl_stack.h @@ -90,23 +90,23 @@ class CurlStack : std::deque { void set_max_active(unsigned int a) { m_maxActive = a; } const std::string& user_agent() const { return m_userAgent; } - void set_user_agent(const std::string& s) { m_userAgent = s; } - const std::string& http_proxy() const { return m_httpProxy; } - void set_http_proxy(const std::string& s) { m_httpProxy = s; } - const std::string& bind_address() const { return m_bindAddress; } - void set_bind_address(const std::string& s) { m_bindAddress = s; } - const std::string& http_capath() const { return m_httpCaPath; } - void set_http_capath(const std::string& s) { m_httpCaPath = s; } - const std::string& http_cacert() const { return m_httpCaCert; } + + void set_user_agent(const std::string& s) { m_userAgent = s; } + void set_http_proxy(const std::string& s) { m_httpProxy = s; } + void set_bind_address(const std::string& s) { m_bindAddress = s; } + void set_http_capath(const std::string& s) { m_httpCaPath = s; } void set_http_cacert(const std::string& s) { m_httpCaCert = s; } bool ssl_verify_peer() const { return m_ssl_verify_peer; } void set_ssl_verify_peer(bool s) { m_ssl_verify_peer = s; } + long dns_timeout() const { return m_dns_timeout; } + void set_dns_timeout(long timeout) { m_dns_timeout = timeout; } + static void global_init(); static void global_cleanup(); @@ -138,7 +138,9 @@ class CurlStack : std::deque { std::string m_bindAddress; std::string m_httpCaPath; std::string m_httpCaCert; + bool m_ssl_verify_peer; + long m_dns_timeout; }; }