Changeset 229138 in webkit
- Timestamp:
- Mar 1, 2018, 12:39:00 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r229137 r229138 1 2018-03-01 Basuke Suzuki <Basuke.Suzuki@sony.com> 2 3 [Curl] Split DNS cache expiration and connection timeout setting. 4 https://bugs.webkit.org/show_bug.cgi?id=182979 5 6 It was mis-implemented and was named ambiguous name 'enableTimeout'. 7 Implement each feature correctly. 8 9 Reviewed by Per Arne Vollan. 10 11 * platform/network/curl/CurlContext.cpp: 12 (WebCore::EnvironmentVariableReader::read): 13 (WebCore::EnvironmentVariableReader::defined): 14 (WebCore::EnvironmentVariableReader::readAs): 15 (WebCore::EnvironmentVariableReader::sscanTemplate): 16 (WebCore::EnvironmentVariableReader::sscanTemplate<unsigned>): 17 (WebCore::CurlContext::CurlContext): 18 (WebCore::safeTimeValue): 19 (WebCore::CurlHandle::setDnsCacheTimeout): 20 (WebCore::CurlHandle::setConnectTimeout): 21 (WebCore::CurlHandle::setTimeout): 22 (WebCore::CurlHandle::enableTimeout): Deleted. 23 * platform/network/curl/CurlContext.h: 24 (WebCore::CurlContext::dnsCacheTimeout const): 25 (WebCore::CurlContext::connectTimeout const): 26 * platform/network/curl/CurlRequest.cpp: 27 (WebCore::CurlRequest::setupTransfer): 28 1 29 2018-03-01 Zalan Bujtas <zalan@apple.com> 2 30 -
trunk/Source/WebCore/platform/network/curl/CurlContext.cpp
r227987 r229138 43 43 namespace WebCore { 44 44 45 class EnvironmentVariableReader { 46 public: 47 const char* read(const char* name) { return ::getenv(name); } 48 bool defined(const char* name) { return read(name) != nullptr; } 49 50 template<typename T> std::optional<T> readAs(const char* name) 51 { 52 if (const char* valueStr = read(name)) { 53 T value; 54 if (sscanf(valueStr, sscanTemplate<T>(), &value) == 1) 55 return value; 56 } 57 58 return std::nullopt; 59 } 60 61 private: 62 template<typename T> const char* sscanTemplate() 63 { 64 ASSERT_NOT_REACHED(); 65 return nullptr; 66 } 67 68 // define specialized member function for specific type. 69 template<> constexpr const char* sscanTemplate<unsigned>() { return "%u"; } 70 }; 71 45 72 // CurlContext ------------------------------------------------------------------- 46 73 … … 55 82 initShareHandle(); 56 83 84 EnvironmentVariableReader envVar; 85 86 if (auto value = envVar.readAs<unsigned>("WEBKIT_CURL_DNS_CACHE_TIMEOUT")) 87 m_dnsCacheTimeout = Seconds(*value); 88 89 if (auto value = envVar.readAs<unsigned>("WEBKIT_CURL_CONNECT_TIMEOUT")) 90 m_connectTimeout = Seconds(*value); 91 57 92 #ifndef NDEBUG 58 m_verbose = getenv("DEBUG_CURL");59 60 char* logFile = getenv("CURL_LOG_FILE");93 m_verbose = envVar.defined("DEBUG_CURL"); 94 95 auto logFile = envVar.read("CURL_LOG_FILE"); 61 96 if (logFile) 62 97 m_logFile = fopen(logFile, "a"); … … 448 483 } 449 484 450 void CurlHandle::enableTimeout() 451 { 452 static const long dnsCacheTimeout = 5 * 60; // [sec.] 453 454 curl_easy_setopt(m_handle, CURLOPT_DNS_CACHE_TIMEOUT, dnsCacheTimeout); 455 } 456 457 void CurlHandle::setTimeout(long timeoutMilliseconds) 458 { 459 curl_easy_setopt(m_handle, CURLOPT_TIMEOUT_MS, timeoutMilliseconds); 485 static CURLoption safeTimeValue(double time) 486 { 487 auto value = static_cast<unsigned>(time >= 0.0 ? time : 0); 488 return static_cast<CURLoption>(value); 489 } 490 491 void CurlHandle::setDnsCacheTimeout(Seconds timeout) 492 { 493 curl_easy_setopt(m_handle, CURLOPT_DNS_CACHE_TIMEOUT, safeTimeValue(timeout.seconds())); 494 } 495 496 void CurlHandle::setConnectTimeout(Seconds timeout) 497 { 498 curl_easy_setopt(m_handle, CURLOPT_CONNECTTIMEOUT, safeTimeValue(timeout.seconds())); 499 } 500 501 void CurlHandle::setTimeout(Seconds timeout) 502 { 503 curl_easy_setopt(m_handle, CURLOPT_TIMEOUT_MS, safeTimeValue(timeout.milliseconds())); 460 504 } 461 505 -
trunk/Source/WebCore/platform/network/curl/CurlContext.h
r229132 r229138 33 33 #include <wtf/NeverDestroyed.h> 34 34 #include <wtf/Noncopyable.h> 35 #include <wtf/Seconds.h> 35 36 #include <wtf/Threading.h> 36 37 … … 121 122 bool isHttp2Enabled() const; 122 123 124 // Timeout 125 Seconds dnsCacheTimeout() const { return m_dnsCacheTimeout; } 126 Seconds connectTimeout() const { return m_connectTimeout; } 127 123 128 #ifndef NDEBUG 124 129 FILE* getLogFile() const { return m_logFile; } … … 127 132 128 133 private: 134 CurlContext(); 135 void initShareHandle(); 136 129 137 ProxyInfo m_proxy; 130 138 CurlShareHandle m_shareHandle; 131 139 CurlSSLHandle m_sslHandle; 132 140 133 CurlContext();134 void initShareHandle();141 Seconds m_dnsCacheTimeout { Seconds::fromMinutes(5) }; 142 Seconds m_connectTimeout { 30.0 }; 135 143 136 144 #ifndef NDEBUG … … 251 259 void enableProxyIfExists(); 252 260 253 void enableTimeout(); 254 void setTimeout(long timeoutMilliseconds); 261 void setDnsCacheTimeout(Seconds); 262 void setConnectTimeout(Seconds); 263 void setTimeout(Seconds); 255 264 256 265 // Callback function -
trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp
r228577 r229138 195 195 m_curlHandle->enableAllowedProtocols(); 196 196 m_curlHandle->enableAcceptEncoding(); 197 m_curlHandle->enableTimeout(); 198 199 long timeoutMilliseconds = (m_request.timeoutInterval() > 0.0) ? static_cast<long>(m_request.timeoutInterval() * 1000.0) : 0;200 m_curlHandle->set Timeout(timeoutMilliseconds);197 198 m_curlHandle->setTimeout(Seconds(m_request.timeoutInterval())); 199 m_curlHandle->setDnsCacheTimeout(CurlContext::singleton().dnsCacheTimeout()); 200 m_curlHandle->setConnectTimeout(CurlContext::singleton().connectTimeout()); 201 201 202 202 m_curlHandle->enableProxyIfExists();
Note:
See TracChangeset
for help on using the changeset viewer.