#pragma once #include #include #include #include #include #include #include #include namespace xrpl { /** Provides an asynchronous HTTP client implementation with optional SSL. */ class HTTPClient { public: explicit HTTPClient() = default; static constexpr auto maxClientHeaderBytes = kilobytes(32); static void initializeSSLContext( std::string const& sslVerifyDir, std::string const& sslVerifyFile, bool sslVerify, beast::Journal j); /** Destroys the global SSL context created by initializeSSLContext(). * * This releases the underlying boost::asio::ssl::context and any * associated OpenSSL resources. Must not be called while any * HTTPClient requests are in flight. * * @note Currently only called from tests during teardown. In production, * the SSL context lives for the lifetime of the process. */ static void cleanupSSLContext(); static void get(bool bSSL, boost::asio::io_context& io_context, std::deque deqSites, unsigned short const port, std::string const& strPath, std::size_t responseMax, // if no Content-Length header std::chrono::seconds timeout, std::function complete, beast::Journal& j); static void get(bool bSSL, boost::asio::io_context& io_context, std::string strSite, unsigned short const port, std::string const& strPath, std::size_t responseMax, // if no Content-Length header std::chrono::seconds timeout, std::function complete, beast::Journal& j); static void request( bool bSSL, boost::asio::io_context& io_context, std::string strSite, unsigned short const port, std::function build, std::size_t responseMax, // if no Content-Length header std::chrono::seconds timeout, std::function complete, beast::Journal& j); }; } // namespace xrpl