/*!******************************************************************** Audacity: A Digital Audio Editor @file Request.h @brief Declare a class for constructing HTTP requests. Dmitry Vedenko **********************************************************************/ #pragma once #include #include #include #include "NetworkManagerApi.h" #include "HeadersList.h" #include "CookiesList.h" namespace audacity { namespace network_manager { class NETWORK_MANAGER_API Request final { public: using Timeout = std::chrono::milliseconds; static constexpr size_t INFINITE_REDIRECTS = std::numeric_limits::max(); Request() = default; explicit Request(std::string url) noexcept; Request(const Request&) = default; Request(Request&&) = default; Request& operator = (const Request&) = default; Request& operator = (Request&&) = default; Request& setURL(std::string url) noexcept; const std::string& getURL() const noexcept; Request& setHeader(const std::string& name, std::string value); std::string getHeader(const std::string& name) const; const HeadersList& getHeaders () const noexcept; Request& setCookie(const std::string& name, std::string value); Request& appendCookies (const CookiesList& list); std::string getCookie(const std::string& name) const; const CookiesList& getCookies () noexcept; Request& setMaxRedirects(size_t redirects) noexcept; size_t getMaxRedirects() const noexcept; Request& setTimeout(Timeout timeout) noexcept; Timeout getTimeout() const noexcept; private: std::string mUrl; HeadersList mHeaders; CookiesList mCookies; size_t mMaxRedirects { INFINITE_REDIRECTS }; Timeout mTimeout { std::chrono::seconds (5) }; }; } }