refactor: rename ServerHandlerImp to ServerHandler (#4516)

Rename `ServerHandlerImp` to `ServerHandler`. There was no other
ServerHandler definition despite the existence of a header suggesting
that there was.

This resolves a piece of historical confusion in the code, which was
identified during a code review.

The changes in the diff may look more extensive than they actually are.
The contents of `impl/ServerHandlerImp.h` were merged into
`ServerHandler.h`, making the latter file appear to have undergone
significant modifications. However, this is a non-breaking refactor that
only restructures code.
This commit is contained in:
Scott Schurr
2023-06-28 03:57:52 +03:00
committed by tequ
parent 4fa3890a02
commit b9b70e3e4d
3 changed files with 232 additions and 31 deletions

View File

@@ -670,7 +670,7 @@ target_sources (rippled PRIVATE
src/ripple/rpc/impl/RPCHandler.cpp src/ripple/rpc/impl/RPCHandler.cpp
src/ripple/rpc/impl/RPCHelpers.cpp src/ripple/rpc/impl/RPCHelpers.cpp
src/ripple/rpc/impl/Role.cpp src/ripple/rpc/impl/Role.cpp
src/ripple/rpc/impl/ServerHandlerImp.cpp src/ripple/rpc/impl/ServerHandler.cpp
src/ripple/rpc/impl/ShardArchiveHandler.cpp src/ripple/rpc/impl/ShardArchiveHandler.cpp
src/ripple/rpc/impl/ShardVerificationScheduler.cpp src/ripple/rpc/impl/ShardVerificationScheduler.cpp
src/ripple/rpc/impl/Status.cpp src/ripple/rpc/impl/Status.cpp

View File

@@ -20,21 +20,215 @@
#ifndef RIPPLE_RPC_SERVERHANDLER_H_INCLUDED #ifndef RIPPLE_RPC_SERVERHANDLER_H_INCLUDED
#define RIPPLE_RPC_SERVERHANDLER_H_INCLUDED #define RIPPLE_RPC_SERVERHANDLER_H_INCLUDED
#include <ripple/basics/BasicConfig.h> #include <ripple/app/main/CollectorManager.h>
#include <ripple/beast/utility/Journal.h>
#include <ripple/core/Config.h>
#include <ripple/core/JobQueue.h> #include <ripple/core/JobQueue.h>
#include <ripple/resource/ResourceManager.h> #include <ripple/json/Output.h>
#include <ripple/rpc/impl/ServerHandlerImp.h> #include <ripple/rpc/RPCHandler.h>
#include <ripple/server/Port.h> #include <ripple/rpc/impl/UDPInfoSub.h>
#include <boost/asio/io_service.hpp> #include <ripple/rpc/impl/WSInfoSub.h>
#include <boost/asio/ip/address.hpp> #include <ripple/server/Server.h>
#include <memory> #include <ripple/server/Session.h>
#include <ripple/server/WSSession.h>
#include <boost/beast/core/tcp_stream.hpp>
#include <boost/beast/ssl/ssl_stream.hpp>
#include <boost/utility/string_view.hpp>
#include <condition_variable>
#include <map>
#include <mutex>
#include <vector> #include <vector>
namespace ripple { namespace ripple {
using ServerHandler = ServerHandlerImp; inline bool
operator<(Port const& lhs, Port const& rhs)
{
return lhs.name < rhs.name;
}
class ServerHandler
{
public:
struct Setup
{
explicit Setup() = default;
std::vector<Port> ports;
// Memberspace
struct client_t
{
explicit client_t() = default;
bool secure = false;
std::string ip;
std::uint16_t port = 0;
std::string user;
std::string password;
std::string admin_user;
std::string admin_password;
};
// Configuration when acting in client role
client_t client;
// Configuration for the Overlay
struct overlay_t
{
explicit overlay_t() = default;
boost::asio::ip::address ip;
std::uint16_t port = 0;
};
overlay_t overlay;
void
makeContexts();
};
private:
using socket_type = boost::beast::tcp_stream;
using stream_type = boost::beast::ssl_stream<socket_type>;
Application& app_;
Resource::Manager& m_resourceManager;
beast::Journal m_journal;
NetworkOPs& m_networkOPs;
std::unique_ptr<Server> m_server;
Setup setup_;
JobQueue& m_jobQueue;
beast::insight::Counter rpc_requests_;
beast::insight::Event rpc_size_;
beast::insight::Event rpc_time_;
std::mutex mutex_;
std::condition_variable condition_;
bool stopped_{false};
std::map<std::reference_wrapper<Port const>, int> count_;
// A private type used to restrict access to the ServerHandler constructor.
struct ServerHandlerCreator
{
explicit ServerHandlerCreator() = default;
};
// Friend declaration that allows make_ServerHandler to access the
// private type that restricts access to the ServerHandler ctor.
friend std::unique_ptr<ServerHandler>
make_ServerHandler(
Application& app,
boost::asio::io_service&,
JobQueue&,
NetworkOPs&,
Resource::Manager&,
CollectorManager& cm);
public:
// Must be public so make_unique can call it.
ServerHandler(
ServerHandlerCreator const&,
Application& app,
boost::asio::io_service& io_service,
JobQueue& jobQueue,
NetworkOPs& networkOPs,
Resource::Manager& resourceManager,
CollectorManager& cm);
~ServerHandler();
using Output = Json::Output;
void
setup(Setup const& setup, beast::Journal journal);
Setup const&
setup() const
{
return setup_;
}
void
stop();
//
// Handler
//
bool
onAccept(Session& session, boost::asio::ip::tcp::endpoint endpoint);
Handoff
onHandoff(
Session& session,
std::unique_ptr<stream_type>&& bundle,
http_request_type&& request,
boost::asio::ip::tcp::endpoint const& remote_address);
Handoff
onHandoff(
Session& session,
http_request_type&& request,
boost::asio::ip::tcp::endpoint const& remote_address)
{
return onHandoff(
session,
{},
std::forward<http_request_type>(request),
remote_address);
}
void
onRequest(Session& session);
void
onWSMessage(
std::shared_ptr<WSSession> session,
std::vector<boost::asio::const_buffer> const& buffers);
void
onUDPMessage(
std::string const& message,
boost::asio::ip::tcp::endpoint const& remoteEndpoint,
std::function<void(std::string const&)> sendResponse);
void
onClose(Session& session, boost::system::error_code const&);
void
onStopped(Server&);
private:
Json::Value
processSession(
std::shared_ptr<WSSession> const& session,
std::shared_ptr<JobQueue::Coro> const& coro,
Json::Value const& jv);
Json::Value
processUDP(
Json::Value const& jv,
Role const& role,
std::shared_ptr<JobQueue::Coro> const& coro,
std::optional<std::function<void(std::string const&)>> sendResponse,
boost::asio::ip::tcp::endpoint const& remoteEndpoint);
void
processSession(
std::shared_ptr<Session> const&,
std::shared_ptr<JobQueue::Coro> coro);
void
processRequest(
Port const& port,
std::string const& request,
beast::IP::Endpoint const& remoteIPAddress,
Output&&,
std::shared_ptr<JobQueue::Coro> coro,
boost::string_view forwardedFor,
boost::string_view user);
Handoff
statusResponse(http_request_type const& request) const;
};
ServerHandler::Setup ServerHandler::Setup
setup_ServerHandler(Config const& c, std::ostream&& log); setup_ServerHandler(Config const& c, std::ostream&& log);

View File

@@ -17,6 +17,8 @@
*/ */
//============================================================================== //==============================================================================
#include <ripple/rpc/ServerHandler.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
@@ -35,9 +37,7 @@
#include <ripple/resource/ResourceManager.h> #include <ripple/resource/ResourceManager.h>
#include <ripple/rpc/RPCHandler.h> #include <ripple/rpc/RPCHandler.h>
#include <ripple/rpc/Role.h> #include <ripple/rpc/Role.h>
#include <ripple/rpc/ServerHandler.h>
#include <ripple/rpc/impl/RPCHelpers.h> #include <ripple/rpc/impl/RPCHelpers.h>
#include <ripple/rpc/impl/ServerHandlerImp.h>
#include <ripple/rpc/impl/Tuning.h> #include <ripple/rpc/impl/Tuning.h>
#include <ripple/rpc/json_body.h> #include <ripple/rpc/json_body.h>
#include <ripple/server/Server.h> #include <ripple/server/Server.h>
@@ -101,7 +101,8 @@ authorized(Port const& port, std::map<std::string, std::string> const& h)
return strUser == port.user && strPassword == port.password; return strUser == port.user && strPassword == port.password;
} }
ServerHandlerImp::ServerHandlerImp( ServerHandler::ServerHandler(
ServerHandlerCreator const&,
Application& app, Application& app,
boost::asio::io_service& io_service, boost::asio::io_service& io_service,
JobQueue& jobQueue, JobQueue& jobQueue,
@@ -121,13 +122,13 @@ ServerHandlerImp::ServerHandlerImp(
rpc_time_ = group->make_event("time"); rpc_time_ = group->make_event("time");
} }
ServerHandlerImp::~ServerHandlerImp() ServerHandler::~ServerHandler()
{ {
m_server = nullptr; m_server = nullptr;
} }
void void
ServerHandlerImp::setup(Setup const& setup, beast::Journal journal) ServerHandler::setup(Setup const& setup, beast::Journal journal)
{ {
setup_ = setup; setup_ = setup;
m_server->ports(setup.ports); m_server->ports(setup.ports);
@@ -136,7 +137,7 @@ ServerHandlerImp::setup(Setup const& setup, beast::Journal journal)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void void
ServerHandlerImp::stop() ServerHandler::stop()
{ {
m_server->close(); m_server->close();
{ {
@@ -148,7 +149,7 @@ ServerHandlerImp::stop()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool bool
ServerHandlerImp::onAccept( ServerHandler::onAccept(
Session& session, Session& session,
boost::asio::ip::tcp::endpoint endpoint) boost::asio::ip::tcp::endpoint endpoint)
{ {
@@ -170,7 +171,7 @@ ServerHandlerImp::onAccept(
} }
Handoff Handoff
ServerHandlerImp::onHandoff( ServerHandler::onHandoff(
Session& session, Session& session,
std::unique_ptr<stream_type>&& bundle, std::unique_ptr<stream_type>&& bundle,
http_request_type&& request, http_request_type&& request,
@@ -272,7 +273,7 @@ buffers_to_string(ConstBufferSequence const& bs)
} }
void void
ServerHandlerImp::onRequest(Session& session) ServerHandler::onRequest(Session& session)
{ {
// Make sure RPC is enabled on the port // Make sure RPC is enabled on the port
if (session.port().protocol.count("http") == 0 && if (session.port().protocol.count("http") == 0 &&
@@ -312,7 +313,7 @@ ServerHandlerImp::onRequest(Session& session)
} }
void void
ServerHandlerImp::onWSMessage( ServerHandler::onWSMessage(
std::shared_ptr<WSSession> session, std::shared_ptr<WSSession> session,
std::vector<boost::asio::const_buffer> const& buffers) std::vector<boost::asio::const_buffer> const& buffers)
{ {
@@ -362,7 +363,7 @@ ServerHandlerImp::onWSMessage(
} }
void void
ServerHandlerImp::onUDPMessage( ServerHandler::onUDPMessage(
std::string const& message, std::string const& message,
boost::asio::ip::tcp::endpoint const& remoteEndpoint, boost::asio::ip::tcp::endpoint const& remoteEndpoint,
std::function<void(std::string const&)> sendResponse) std::function<void(std::string const&)> sendResponse)
@@ -423,14 +424,14 @@ ServerHandlerImp::onUDPMessage(
} }
void void
ServerHandlerImp::onClose(Session& session, boost::system::error_code const&) ServerHandler::onClose(Session& session, boost::system::error_code const&)
{ {
std::lock_guard lock(mutex_); std::lock_guard lock(mutex_);
--count_[session.port()]; --count_[session.port()];
} }
void void
ServerHandlerImp::onStopped(Server&) ServerHandler::onStopped(Server&)
{ {
std::lock_guard lock(mutex_); std::lock_guard lock(mutex_);
stopped_ = true; stopped_ = true;
@@ -459,7 +460,7 @@ logDuration(
} }
Json::Value Json::Value
ServerHandlerImp::processUDP( ServerHandler::processUDP(
Json::Value const& jv, Json::Value const& jv,
Role const& role, Role const& role,
std::shared_ptr<JobQueue::Coro> const& coro, std::shared_ptr<JobQueue::Coro> const& coro,
@@ -593,7 +594,7 @@ ServerHandlerImp::processUDP(
} }
Json::Value Json::Value
ServerHandlerImp::processSession( ServerHandler::processSession(
std::shared_ptr<WSSession> const& session, std::shared_ptr<WSSession> const& session,
std::shared_ptr<JobQueue::Coro> const& coro, std::shared_ptr<JobQueue::Coro> const& coro,
Json::Value const& jv) Json::Value const& jv)
@@ -740,7 +741,7 @@ ServerHandlerImp::processSession(
// Run as a coroutine. // Run as a coroutine.
void void
ServerHandlerImp::processSession( ServerHandler::processSession(
std::shared_ptr<Session> const& session, std::shared_ptr<Session> const& session,
std::shared_ptr<JobQueue::Coro> coro) std::shared_ptr<JobQueue::Coro> coro)
{ {
@@ -781,7 +782,7 @@ Json::Int constexpr forbidden = -32605;
Json::Int constexpr wrong_version = -32606; Json::Int constexpr wrong_version = -32606;
void void
ServerHandlerImp::processRequest( ServerHandler::processRequest(
Port const& port, Port const& port,
std::string const& request, std::string const& request,
beast::IP::Endpoint const& remoteIPAddress, beast::IP::Endpoint const& remoteIPAddress,
@@ -1217,7 +1218,7 @@ ServerHandlerImp::processRequest(
is reported, meaning the server can accept more connections. is reported, meaning the server can accept more connections.
*/ */
Handoff Handoff
ServerHandlerImp::statusResponse(http_request_type const& request) const ServerHandler::statusResponse(http_request_type const& request) const
{ {
using namespace boost::beast::http; using namespace boost::beast::http;
Handoff handoff; Handoff handoff;
@@ -1447,8 +1448,14 @@ make_ServerHandler(
Resource::Manager& resourceManager, Resource::Manager& resourceManager,
CollectorManager& cm) CollectorManager& cm)
{ {
return std::make_unique<ServerHandlerImp>( return std::make_unique<ServerHandler>(
app, io_service, jobQueue, networkOPs, resourceManager, cm); ServerHandler::ServerHandlerCreator(),
app,
io_service,
jobQueue,
networkOPs,
resourceManager,
cm);
} }
} // namespace ripple } // namespace ripple