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/RPCHelpers.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/ShardVerificationScheduler.cpp
src/ripple/rpc/impl/Status.cpp

View File

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