3#include <xrpld/app/main/Application.h>
4#include <xrpld/app/misc/ValidatorList.h>
5#include <xrpld/app/misc/detail/Work.h>
7#include <xrpl/basics/StringUtilities.h>
8#include <xrpl/beast/utility/Journal.h>
9#include <xrpl/json/json_value.h>
11#include <boost/asio.hpp>
119 boost::asio::basic_waitable_timer<ClockType>
timer_;
226 boost::system::error_code
const& ec,
A generic endpoint for log messages.
bool missingSite(std::scoped_lock< std::mutex > const &)
If no sites are provided, or a site fails to load, get a list of local cache files from the Validator...
boost::asio::basic_waitable_timer< ClockType > timer_
void onRequestTimeout(std::size_t siteIdx, ErrorCode const &ec)
request took too long
void onTimer(std::size_t siteIdx, ErrorCode const &ec)
Fetch site whose time has come.
json::Value getJson() const
Return JSON representation of configured validator sites.
bool load(std::vector< std::string > const &siteURIs)
Load configured site URIs.
void join()
Wait for current fetches from sites to complete.
std::shared_ptr< Site::Resource > processRedirect(detail::ResponseType const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Interpret a redirect response.
void onSiteFetch(boost::system::error_code const &ec, EndpointType const &endpoint, detail::ResponseType const &res, std::size_t siteIdx)
Store latest list fetched from site.
std::atomic< bool > pending_
std::atomic< bool > fetching_
void setTimer(std::scoped_lock< std::mutex > const &, std::scoped_lock< std::mutex > const &)
Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.
void start()
Start fetching lists from sites.
std::chrono::seconds const requestTimeout_
void makeRequest(std::shared_ptr< Site::Resource > resource, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Initiate request to given resource.
boost::asio::ip::tcp::endpoint EndpointType
std::condition_variable cv_
boost::system::error_code ErrorCode
std::atomic< bool > stopping_
void parseJsonResponse(std::string const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Parse json response from validator list site.
ValidatorSite(Application &app, std::optional< beast::Journal > j=std::nullopt, std::chrono::seconds timeout=std::chrono::seconds{20})
std::weak_ptr< detail::Work > work_
void onTextFetch(boost::system::error_code const &ec, std::string const &res, std::size_t siteIdx)
Store latest list fetched from anywhere.
std::chrono::system_clock ClockType
void stop()
Stop fetching lists from sites.
std::vector< Site > sites_
boost::beast::http::response< boost::beast::http::string_body > ResponseType
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Resource(std::string uri)
ClockType::time_point refreshed
ListDisposition disposition
unsigned short redirCount
EndpointType lastRequestEndpoint
std::shared_ptr< Resource > startingResource
the resource to request at <timer> intervals.
std::shared_ptr< Resource > activeResource
the active resource being requested.
bool lastRequestSuccessful
std::chrono::minutes refreshInterval
ClockType::time_point nextRefresh
std::shared_ptr< Resource > loadedResource
the original uri as loaded from config
std::optional< Status > lastRefreshStatus