HttpRequest: Use std::chrono for indicating time periods

Allows the use of chrono time points, on top of being more indicative of
time periods used at call sites, if custom timeouts are specified.
This commit is contained in:
Lioncash 2017-06-18 15:36:39 -04:00
parent 795157a9bc
commit 251de89b5c
2 changed files with 8 additions and 5 deletions

View File

@ -4,6 +4,7 @@
#include "Common/HttpRequest.h"
#include <chrono>
#include <cstddef>
#include <curl/curl.h>
@ -22,7 +23,7 @@ public:
POST,
};
Impl(int timeout_ms);
explicit Impl(std::chrono::milliseconds timeout_ms);
bool IsValid() const;
Response Fetch(const std::string& url, Method method, const Headers& headers, const u8* payload,
@ -32,7 +33,8 @@ private:
std::unique_ptr<CURL, decltype(&curl_easy_cleanup)> m_curl{curl_easy_init(), curl_easy_cleanup};
};
HttpRequest::HttpRequest(int timeout_ms) : m_impl(std::make_unique<Impl>(timeout_ms))
HttpRequest::HttpRequest(std::chrono::milliseconds timeout_ms)
: m_impl(std::make_unique<Impl>(timeout_ms))
{
}
@ -61,7 +63,7 @@ HttpRequest::Response HttpRequest::Post(const std::string& url, const std::strin
reinterpret_cast<const u8*>(payload.data()), payload.size());
}
HttpRequest::Impl::Impl(int timeout_ms)
HttpRequest::Impl::Impl(std::chrono::milliseconds timeout_ms)
{
if (!m_curl)
return;
@ -69,7 +71,7 @@ HttpRequest::Impl::Impl(int timeout_ms)
// libcurl may not have been built with async DNS support, so we disable
// signal handlers to avoid a possible and likely crash if a resolve times out.
curl_easy_setopt(m_curl.get(), CURLOPT_NOSIGNAL, true);
curl_easy_setopt(m_curl.get(), CURLOPT_TIMEOUT_MS, timeout_ms);
curl_easy_setopt(m_curl.get(), CURLOPT_TIMEOUT_MS, static_cast<long>(timeout_ms.count()));
#ifdef _WIN32
// ALPN support is enabled by default but requires Windows >= 8.1.
curl_easy_setopt(m_curl.get(), CURLOPT_SSL_ENABLE_ALPN, false);

View File

@ -4,6 +4,7 @@
#pragma once
#include <chrono>
#include <map>
#include <memory>
#include <optional>
@ -17,7 +18,7 @@ namespace Common
class HttpRequest final
{
public:
HttpRequest(int timeout_ms = 3000);
explicit HttpRequest(std::chrono::milliseconds timeout_ms = std::chrono::milliseconds{3000});
~HttpRequest();
bool IsValid() const;