mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-28 06:55:50 +00:00
Don't use MultiSocket in Overlay:
The MultiSocket is obsolete technology which is superceded by a more straightforward, template based implementation that is compatible with boost::asio::coroutines. This removes support for the unused PROXY handshake feature. After this change a large number of classes and source files may be removed.
This commit is contained in:
@@ -2377,11 +2377,6 @@
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\KeyCache.cpp">
|
||||
<ExcludedFromBuild>True</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\MultiSocket.cpp">
|
||||
<ExcludedFromBuild>True</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClInclude Include="..\..\src\ripple\common\impl\MultiSocketImpl.h">
|
||||
</ClInclude>
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\ResolverAsio.cpp">
|
||||
<ExcludedFromBuild>True</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
@@ -2395,8 +2390,6 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\KeyCache.h">
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\MultiSocket.h">
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\Resolver.h">
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\ResolverAsio.h">
|
||||
|
||||
@@ -3414,12 +3414,6 @@
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\KeyCache.cpp">
|
||||
<Filter>ripple\common\impl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\MultiSocket.cpp">
|
||||
<Filter>ripple\common\impl</Filter>
|
||||
</ClCompile>
|
||||
<ClInclude Include="..\..\src\ripple\common\impl\MultiSocketImpl.h">
|
||||
<Filter>ripple\common\impl</Filter>
|
||||
</ClInclude>
|
||||
<ClCompile Include="..\..\src\ripple\common\impl\ResolverAsio.cpp">
|
||||
<Filter>ripple\common\impl</Filter>
|
||||
</ClCompile>
|
||||
@@ -3435,9 +3429,6 @@
|
||||
<ClInclude Include="..\..\src\ripple\common\KeyCache.h">
|
||||
<Filter>ripple\common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\MultiSocket.h">
|
||||
<Filter>ripple\common</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\ripple\common\Resolver.h">
|
||||
<Filter>ripple\common</Filter>
|
||||
</ClInclude>
|
||||
|
||||
@@ -207,16 +207,6 @@ public:
|
||||
/** Listening port number for peer connections. */
|
||||
int peerListeningPort;
|
||||
|
||||
/** PROXY listening port number
|
||||
If this is not zero, it indicates an additional port number on
|
||||
which we should accept incoming Peer connections that will also
|
||||
require a PROXY handshake.
|
||||
|
||||
The PROXY Protocol:
|
||||
http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt
|
||||
*/
|
||||
int peerPROXYListeningPort;
|
||||
|
||||
/** List of Validators entries from rippled.cfg */
|
||||
std::vector <std::string> validators;
|
||||
|
||||
|
||||
@@ -60,7 +60,6 @@ struct ConfigSection
|
||||
#define SECTION_PATH_SEARCH_MAX "path_search_max"
|
||||
#define SECTION_PEER_IP "peer_ip"
|
||||
#define SECTION_PEER_PORT "peer_port"
|
||||
#define SECTION_PEER_PROXY_PORT "peer_port_proxy"
|
||||
#define SECTION_PEER_PRIVATE "peer_private"
|
||||
#define SECTION_PEERS_MAX "peers_max"
|
||||
#define SECTION_PEER_SSL_CIPHER_LIST "peer_ssl_cipher_list"
|
||||
|
||||
@@ -233,8 +233,6 @@ Config::Config ()
|
||||
|
||||
peerListeningPort = SYSTEM_PEER_PORT;
|
||||
|
||||
peerPROXYListeningPort = 0;
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
@@ -536,18 +534,6 @@ void Config::load ()
|
||||
if (getSingleSection (secConfig, SECTION_PEER_PORT, strTemp))
|
||||
peerListeningPort = beast::lexicalCastThrow <int> (strTemp);
|
||||
|
||||
if (getSingleSection (secConfig, SECTION_PEER_PROXY_PORT, strTemp))
|
||||
{
|
||||
peerPROXYListeningPort = beast::lexicalCastThrow <int> (strTemp);
|
||||
|
||||
if (peerPROXYListeningPort != 0 && peerPROXYListeningPort == peerListeningPort)
|
||||
throw std::runtime_error ("Peer and proxy listening ports can't be the same.");
|
||||
}
|
||||
else
|
||||
{
|
||||
peerPROXYListeningPort = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// VFALCO END CLEAN
|
||||
//
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include <ripple/http/Session.h>
|
||||
#include <ripple/http/impl/Types.h>
|
||||
#include <ripple/http/impl/ServerImpl.h>
|
||||
#include <ripple/common/MultiSocket.h>
|
||||
#include <beast/asio/placeholders.h>
|
||||
#include <beast/asio/ssl.h> // for is_short_read?
|
||||
#include <beast/http/message.h>
|
||||
|
||||
@@ -84,7 +84,7 @@ OverlayImpl::~OverlayImpl ()
|
||||
}
|
||||
|
||||
void
|
||||
OverlayImpl::accept (bool proxyHandshake, socket_type&& socket)
|
||||
OverlayImpl::accept (socket_type&& socket)
|
||||
{
|
||||
// An error getting an endpoint means the connection closed.
|
||||
// Just do nothing and the socket will be closed by the caller.
|
||||
@@ -107,15 +107,9 @@ OverlayImpl::accept (bool proxyHandshake, socket_type&& socket)
|
||||
if (slot == nullptr)
|
||||
return;
|
||||
|
||||
MultiSocket::Flag flags (
|
||||
MultiSocket::Flag::server_role | MultiSocket::Flag::ssl_required);
|
||||
|
||||
if (proxyHandshake)
|
||||
flags = flags.with (MultiSocket::Flag::proxy);
|
||||
|
||||
PeerImp::ptr const peer (std::make_shared <PeerImp> (
|
||||
std::move (socket), remote_endpoint, *this, m_resourceManager,
|
||||
*m_peerFinder, slot, m_ssl_context, flags));
|
||||
*m_peerFinder, slot, m_ssl_context));
|
||||
|
||||
{
|
||||
std::lock_guard <decltype(m_mutex)> lock (m_mutex);
|
||||
@@ -150,12 +144,9 @@ OverlayImpl::connect (beast::IP::Endpoint const& remote_endpoint)
|
||||
if (slot == nullptr)
|
||||
return;
|
||||
|
||||
MultiSocket::Flag const flags (
|
||||
MultiSocket::Flag::client_role | MultiSocket::Flag::ssl);
|
||||
|
||||
PeerImp::ptr const peer (std::make_shared <PeerImp> (
|
||||
remote_endpoint, m_io_service, *this, m_resourceManager,
|
||||
*m_peerFinder, slot, m_ssl_context, flags));
|
||||
*m_peerFinder, slot, m_ssl_context));
|
||||
|
||||
{
|
||||
std::lock_guard <decltype(m_mutex)> lock (m_mutex);
|
||||
@@ -296,22 +287,8 @@ OverlayImpl::onPrepare ()
|
||||
// peer connections:
|
||||
if (! getConfig ().RUN_STANDALONE)
|
||||
{
|
||||
m_doorDirect = make_PeerDoor (
|
||||
PeerDoor::sslRequired,
|
||||
*this,
|
||||
getConfig ().PEER_IP,
|
||||
getConfig ().peerListeningPort,
|
||||
m_io_service);
|
||||
|
||||
if (getConfig ().peerPROXYListeningPort != 0)
|
||||
{
|
||||
m_doorProxy = make_PeerDoor (
|
||||
PeerDoor::sslAndPROXYRequired,
|
||||
*this,
|
||||
getConfig ().PEER_IP,
|
||||
getConfig ().peerPROXYListeningPort,
|
||||
m_io_service);
|
||||
}
|
||||
m_doorDirect = make_PeerDoor (*this, getConfig ().PEER_IP,
|
||||
getConfig ().peerListeningPort, m_io_service);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -132,12 +132,10 @@ public:
|
||||
public:
|
||||
/** Process an incoming connection using the Peer protocol.
|
||||
The caller transfers ownership of the socket via rvalue move.
|
||||
@param proxyHandshake `true` If a PROXY handshake is required.
|
||||
@param socket A socket in the accepted state.
|
||||
*/
|
||||
void
|
||||
accept (bool proxyHandshake,
|
||||
socket_type&& socket);
|
||||
accept (socket_type&& socket);
|
||||
|
||||
Peer::ShortId
|
||||
next_id();
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <ripple/overlay/impl/OverlayImpl.h>
|
||||
#include <ripple/overlay/impl/PeerDoor.h>
|
||||
#include <beast/asio/placeholders.h>
|
||||
#include <boost/asio/ip/tcp.hpp>
|
||||
|
||||
namespace ripple {
|
||||
|
||||
@@ -28,31 +29,28 @@ class PeerDoorImp
|
||||
, public beast::LeakChecked <PeerDoorImp>
|
||||
{
|
||||
private:
|
||||
using socket_type = boost::asio::ip::tcp::socket;
|
||||
|
||||
OverlayImpl& m_overlay;
|
||||
beast::Journal m_journal;
|
||||
Kind m_kind;
|
||||
boost::asio::ip::tcp::acceptor m_acceptor;
|
||||
boost::asio::deadline_timer m_acceptDelay;
|
||||
NativeSocketType m_socket;
|
||||
socket_type m_socket;
|
||||
|
||||
public:
|
||||
PeerDoorImp (Kind kind, OverlayImpl& overlay,
|
||||
PeerDoorImp (OverlayImpl& overlay,
|
||||
boost::asio::ip::tcp::endpoint const &ep,
|
||||
boost::asio::io_service& io_service)
|
||||
: m_overlay (overlay)
|
||||
, m_journal (deprecatedLogs().journal("PeerDoor"))
|
||||
, m_kind (kind)
|
||||
, m_acceptor (io_service, ep)
|
||||
, m_acceptDelay (io_service)
|
||||
, m_socket (io_service)
|
||||
{
|
||||
m_journal.info <<
|
||||
"Listening on " <<
|
||||
beast::IPAddressConversion::from_asio (
|
||||
m_acceptor.local_endpoint()) <<
|
||||
((m_kind == sslAndPROXYRequired) ? " (proxy)" : "");
|
||||
|
||||
async_accept ();
|
||||
"Listening on " << beast::IPAddressConversion::from_asio (
|
||||
m_acceptor.local_endpoint());
|
||||
async_accept();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -103,9 +101,7 @@ public:
|
||||
|
||||
if (! ec)
|
||||
{
|
||||
bool const proxyHandshake (m_kind == sslAndPROXYRequired);
|
||||
|
||||
m_overlay.accept (proxyHandshake, std::move(m_socket));
|
||||
m_overlay.accept (std::move(m_socket));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -133,10 +129,8 @@ public:
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
std::unique_ptr<PeerDoor>
|
||||
make_PeerDoor (
|
||||
PeerDoor::Kind kind, OverlayImpl& overlay,
|
||||
std::string const& ip, int port,
|
||||
boost::asio::io_service& io_service)
|
||||
make_PeerDoor (OverlayImpl& overlay, std::string const& ip, int port,
|
||||
boost::asio::io_service& io_service)
|
||||
{
|
||||
// You have to listen on something!
|
||||
bassert(port != 0);
|
||||
@@ -145,7 +139,7 @@ make_PeerDoor (
|
||||
boost::asio::ip::address ().from_string (
|
||||
ip.empty () ? "0.0.0.0" : ip), port);
|
||||
|
||||
return std::make_unique<PeerDoorImp>(kind, overlay, ep, io_service);
|
||||
return std::make_unique<PeerDoorImp>(overlay, ep, io_service);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#define RIPPLE_PEERDOOR_H_INCLUDED
|
||||
|
||||
#include <ripple/overlay/impl/OverlayImpl.h>
|
||||
|
||||
#include <beast/cxx14/memory.h> // <memory>
|
||||
|
||||
namespace ripple {
|
||||
@@ -30,23 +29,17 @@ namespace ripple {
|
||||
class PeerDoor
|
||||
{
|
||||
public:
|
||||
virtual ~PeerDoor () = default;
|
||||
|
||||
enum Kind
|
||||
{
|
||||
sslRequired,
|
||||
sslAndPROXYRequired
|
||||
};
|
||||
virtual
|
||||
~PeerDoor() = default;
|
||||
|
||||
virtual
|
||||
void stop() = 0;
|
||||
};
|
||||
|
||||
// VFALCO DEPRECATED This will be replaced by a universal door
|
||||
std::unique_ptr <PeerDoor>
|
||||
make_PeerDoor (
|
||||
PeerDoor::Kind kind, OverlayImpl& overlay,
|
||||
std::string const& ip, int port,
|
||||
boost::asio::io_service& io_service);
|
||||
make_PeerDoor (OverlayImpl& overlay, std::string const& ip, int port,
|
||||
boost::asio::io_service& io_service);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -25,24 +25,21 @@
|
||||
|
||||
namespace ripple {
|
||||
|
||||
PeerImp::PeerImp (NativeSocketType&& socket, beast::IP::Endpoint remoteAddress,
|
||||
PeerImp::PeerImp (socket_type&& socket, beast::IP::Endpoint remoteAddress,
|
||||
OverlayImpl& overlay, Resource::Manager& resourceManager,
|
||||
PeerFinder::Manager& peerFinder, PeerFinder::Slot::ptr const& slot,
|
||||
boost::asio::ssl::context& ssl_context, MultiSocket::Flag flags)
|
||||
: m_owned_socket (std::move (socket))
|
||||
, journal_ (deprecatedLogs().journal("Peer"))
|
||||
boost::asio::ssl::context& ssl_context)
|
||||
: journal_ (deprecatedLogs().journal("Peer"))
|
||||
, socket_ (std::move (socket))
|
||||
, stream_ (socket_, ssl_context)
|
||||
, strand_ (socket_.get_io_service())
|
||||
, timer_ (socket_.get_io_service())
|
||||
, remote_address_ (remoteAddress)
|
||||
, resourceManager_ (resourceManager)
|
||||
, peerFinder_ (peerFinder)
|
||||
, overlay_ (overlay)
|
||||
, m_inbound (true)
|
||||
, socket_ (MultiSocket::New (
|
||||
m_owned_socket, ssl_context, flags.asBits ()))
|
||||
, strand_ (m_owned_socket.get_io_service())
|
||||
, state_ (stateConnected)
|
||||
, minLedger_ (0)
|
||||
, maxLedger_ (0)
|
||||
, timer_ (m_owned_socket.get_io_service())
|
||||
, slot_ (slot)
|
||||
, message_stream_(*this)
|
||||
{
|
||||
@@ -52,21 +49,18 @@ PeerImp::PeerImp (beast::IP::Endpoint remoteAddress,
|
||||
boost::asio::io_service& io_service, OverlayImpl& overlay,
|
||||
Resource::Manager& resourceManager, PeerFinder::Manager& peerFinder,
|
||||
PeerFinder::Slot::ptr const& slot,
|
||||
boost::asio::ssl::context& ssl_context, MultiSocket::Flag flags)
|
||||
: m_owned_socket (io_service)
|
||||
, journal_ (deprecatedLogs().journal("Peer"))
|
||||
boost::asio::ssl::context& ssl_context)
|
||||
: journal_ (deprecatedLogs().journal("Peer"))
|
||||
, socket_ (io_service)
|
||||
, stream_ (socket_, ssl_context)
|
||||
, strand_ (socket_.get_io_service())
|
||||
, timer_ (socket_.get_io_service())
|
||||
, remote_address_ (remoteAddress)
|
||||
, resourceManager_ (resourceManager)
|
||||
, peerFinder_ (peerFinder)
|
||||
, overlay_ (overlay)
|
||||
, m_inbound (false)
|
||||
, socket_ (MultiSocket::New (
|
||||
io_service, ssl_context, flags.asBits ()))
|
||||
, strand_ (io_service)
|
||||
, state_ (stateConnecting)
|
||||
, minLedger_ (0)
|
||||
, maxLedger_ (0)
|
||||
, timer_ (io_service)
|
||||
, slot_ (slot)
|
||||
, message_stream_(*this)
|
||||
{
|
||||
@@ -94,8 +88,8 @@ PeerImp::close()
|
||||
&PeerImp::close, shared_from_this()));
|
||||
|
||||
error_code ec;
|
||||
timer_.cancel (ec);
|
||||
socket_->close(ec);
|
||||
timer_.cancel(ec);
|
||||
stream_.next_layer().close(ec);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@@ -317,7 +311,7 @@ void PeerImp::do_connect ()
|
||||
return detach ("do_connect");
|
||||
}
|
||||
|
||||
socket_->next_layer <NativeSocketType>().async_connect (
|
||||
stream_.next_layer().async_connect (
|
||||
beast::IPAddressConversion::to_asio_endpoint (remote_address_),
|
||||
strand_.wrap (std::bind (&PeerImp::on_connect,
|
||||
shared_from_this (), beast::asio::placeholders::error)));
|
||||
@@ -329,10 +323,9 @@ PeerImp::on_connect (error_code ec)
|
||||
if (detaching_ || ec == boost::asio::error::operation_aborted)
|
||||
return;
|
||||
|
||||
NativeSocketType::endpoint_type local_endpoint;
|
||||
socket_type::endpoint_type local_endpoint;
|
||||
if (! ec)
|
||||
local_endpoint = socket_->this_layer <
|
||||
NativeSocketType> ().local_endpoint (ec);
|
||||
local_endpoint = stream_.next_layer().local_endpoint (ec);
|
||||
|
||||
if (ec)
|
||||
{
|
||||
@@ -349,8 +342,8 @@ PeerImp::on_connect (error_code ec)
|
||||
beast::IPAddressConversion::from_asio (local_endpoint)))
|
||||
return detach("dup");
|
||||
|
||||
socket_->set_verify_mode (boost::asio::ssl::verify_none);
|
||||
socket_->async_handshake (
|
||||
stream_.set_verify_mode (boost::asio::ssl::verify_none);
|
||||
stream_.async_handshake (
|
||||
boost::asio::ssl::stream_base::client,
|
||||
strand_.wrap (std::bind (&PeerImp::on_connect_ssl,
|
||||
std::static_pointer_cast <PeerImp> (shared_from_this ()),
|
||||
@@ -366,7 +359,7 @@ PeerImp::make_request()
|
||||
m.url ("/");
|
||||
m.version (1, 1);
|
||||
m.headers.append ("User-Agent", BuildInfo::getFullVersionString());
|
||||
//m.headers.append ("Local-Address", socket_->
|
||||
//m.headers.append ("Local-Address", stream_.
|
||||
m.headers.append ("Remote-Address", remote_address_.to_string());
|
||||
m.headers.append ("Upgrade",
|
||||
std::string("Ripple/") + to_string (BuildInfo::getCurrentProtocol()));
|
||||
@@ -431,7 +424,7 @@ PeerImp::on_write_http_request (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_write_some (write_buffer_.data(),
|
||||
stream_.async_write_some (write_buffer_.data(),
|
||||
strand_.wrap (std::bind (&PeerImp::on_write_http_request,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -489,7 +482,7 @@ PeerImp::on_read_http_response (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
stream_.async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
strand_.wrap (std::bind (&PeerImp::on_read_http_response,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -515,8 +508,8 @@ void PeerImp::do_accept ()
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->set_verify_mode (boost::asio::ssl::verify_none);
|
||||
socket_->async_handshake (boost::asio::ssl::stream_base::server,
|
||||
stream_.set_verify_mode (boost::asio::ssl::verify_none);
|
||||
stream_.async_handshake (boost::asio::ssl::stream_base::server,
|
||||
strand_.wrap (std::bind (&PeerImp::on_accept_ssl,
|
||||
std::static_pointer_cast <PeerImp> (shared_from_this ()),
|
||||
beast::asio::placeholders::error)));
|
||||
@@ -577,7 +570,7 @@ PeerImp::on_read_http_detect (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
stream_.async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
strand_.wrap (std::bind (&PeerImp::on_read_http_detect,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -644,7 +637,7 @@ PeerImp::on_read_http_request (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
stream_.async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
strand_.wrap (std::bind (&PeerImp::on_read_http_request,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -681,7 +674,7 @@ PeerImp::on_write_http_response (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_write_some (write_buffer_.data(),
|
||||
stream_.async_write_some (write_buffer_.data(),
|
||||
strand_.wrap (std::bind (&PeerImp::on_write_http_response,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -731,7 +724,7 @@ PeerImp::on_read_protocol (error_code ec, std::size_t bytes_transferred)
|
||||
return;
|
||||
}
|
||||
|
||||
socket_->async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
stream_.async_read_some (read_buffer_.prepare (Tuning::readBufferBytes),
|
||||
strand_.wrap (std::bind (&PeerImp::on_read_protocol,
|
||||
shared_from_this(), beast::asio::placeholders::error,
|
||||
beast::asio::placeholders::bytes_transferred)));
|
||||
@@ -2137,15 +2130,14 @@ PeerImp::detach (const char* rsn, bool graceful)
|
||||
|
||||
if (graceful)
|
||||
{
|
||||
socket_->async_shutdown (
|
||||
strand_.wrap ( std::bind(
|
||||
&PeerImp::handleShutdown,
|
||||
std::static_pointer_cast <PeerImp> (shared_from_this ()),
|
||||
stream_.async_shutdown (strand_.wrap (std::bind(
|
||||
&PeerImp::handleShutdown, shared_from_this(),
|
||||
beast::asio::placeholders::error)));
|
||||
}
|
||||
else
|
||||
{
|
||||
socket_->cancel ();
|
||||
error_code ec;
|
||||
stream_.next_layer().cancel(ec);
|
||||
}
|
||||
|
||||
// VFALCO TODO Stop doing this.
|
||||
@@ -2187,7 +2179,7 @@ PeerImp::sendForce (const Message::pointer& packet)
|
||||
{
|
||||
send_packet_ = packet;
|
||||
|
||||
boost::asio::async_write (*socket_,
|
||||
boost::asio::async_write (stream_,
|
||||
boost::asio::buffer (packet->getBuffer ()),
|
||||
strand_.wrap (std::bind (
|
||||
&PeerImp::handleWrite,
|
||||
@@ -2219,7 +2211,7 @@ PeerImp::hashLatestFinishedMessage (const SSL *sslSession, unsigned char *hash,
|
||||
bool
|
||||
PeerImp::calculateSessionCookie ()
|
||||
{
|
||||
SSL* ssl = socket_->ssl_handle ();
|
||||
SSL* ssl = stream_.native_handle();
|
||||
|
||||
if (!ssl)
|
||||
{
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#ifndef RIPPLE_OVERLAY_PEERIMP_H_INCLUDED
|
||||
#define RIPPLE_OVERLAY_PEERIMP_H_INCLUDED
|
||||
|
||||
#include <ripple/common/MultiSocket.h>
|
||||
#include <ripple/nodestore/Database.h>
|
||||
#include <ripple/overlay/predicates.h>
|
||||
#include <ripple/overlay/impl/message_name.h>
|
||||
@@ -49,8 +48,6 @@
|
||||
|
||||
namespace ripple {
|
||||
|
||||
typedef boost::asio::ip::tcp::socket NativeSocketType;
|
||||
|
||||
class PeerImp;
|
||||
|
||||
std::string to_string (Peer const& peer);
|
||||
@@ -96,6 +93,12 @@ public:
|
||||
typedef std::shared_ptr <PeerImp> ptr;
|
||||
|
||||
private:
|
||||
using clock_type = std::chrono::steady_clock;
|
||||
using error_code= boost::system::error_code ;
|
||||
using yield_context = boost::asio::yield_context;
|
||||
using socket_type = boost::asio::ip::tcp::socket;
|
||||
using stream_type = boost::asio::ssl::stream <socket_type&>;
|
||||
|
||||
// Time alloted for a peer to send a HELLO message (DEPRECATED)
|
||||
static const boost::posix_time::seconds nodeVerifySeconds;
|
||||
|
||||
@@ -105,9 +108,11 @@ private:
|
||||
// The length of the smallest valid finished message
|
||||
static const size_t sslMinimumFinishedLength = 12;
|
||||
|
||||
NativeSocketType m_owned_socket;
|
||||
|
||||
beast::Journal journal_;
|
||||
socket_type socket_;
|
||||
stream_type stream_;
|
||||
boost::asio::io_service::strand strand_;
|
||||
boost::asio::deadline_timer timer_;
|
||||
|
||||
// A unique identifier (up to a restart of rippled) for this particular
|
||||
// peer instance. A peer that disconnects will, upon reconnection, get a
|
||||
@@ -126,10 +131,7 @@ private:
|
||||
OverlayImpl& overlay_;
|
||||
bool m_inbound;
|
||||
|
||||
std::unique_ptr <MultiSocket> socket_;
|
||||
boost::asio::io_service::strand strand_;
|
||||
|
||||
State state_; // Current state
|
||||
State state_; // Current state
|
||||
bool detaching_ = false;
|
||||
|
||||
// True if peer is a node in our cluster
|
||||
@@ -147,17 +149,15 @@ private:
|
||||
|
||||
// The indices of the smallest and largest ledgers this peer has available
|
||||
//
|
||||
LedgerIndex minLedger_;
|
||||
LedgerIndex maxLedger_;
|
||||
LedgerIndex minLedger_ = 0;
|
||||
LedgerIndex maxLedger_ = 0;
|
||||
|
||||
uint256 closedLedgerHash_;
|
||||
uint256 previousLedgerHash_;
|
||||
|
||||
std::list<uint256> recentLedgers_;
|
||||
std::list<uint256> recentTxSets_;
|
||||
mutable std::mutex recentLock_;
|
||||
|
||||
boost::asio::deadline_timer timer_;
|
||||
std::list<uint256> recentLedgers_;
|
||||
std::list<uint256> recentTxSets_;
|
||||
mutable std::mutex recentLock_;
|
||||
|
||||
std::list <Message::pointer> send_queue_;
|
||||
Message::pointer send_packet_;
|
||||
@@ -182,10 +182,10 @@ private:
|
||||
|
||||
public:
|
||||
/** Create an incoming peer from the specified socket */
|
||||
PeerImp (NativeSocketType&& socket, beast::IP::Endpoint remoteAddress,
|
||||
PeerImp (socket_type&& socket, beast::IP::Endpoint remoteAddress,
|
||||
OverlayImpl& overlay, Resource::Manager& resourceManager,
|
||||
PeerFinder::Manager& peerFinder, PeerFinder::Slot::ptr const& slot,
|
||||
boost::asio::ssl::context& ssl_context, MultiSocket::Flag flags);
|
||||
boost::asio::ssl::context& ssl_context);
|
||||
|
||||
/** Create an outgoing peer
|
||||
@note Construction of outbound peers is a two step process: a second
|
||||
@@ -196,7 +196,7 @@ public:
|
||||
PeerImp (beast::IP::Endpoint remoteAddress, boost::asio::io_service& io_service,
|
||||
OverlayImpl& overlay, Resource::Manager& resourceManager,
|
||||
PeerFinder::Manager& peerFinder, PeerFinder::Slot::ptr const& slot,
|
||||
boost::asio::ssl::context& ssl_context, MultiSocket::Flag flags);
|
||||
boost::asio::ssl::context& ssl_context);
|
||||
|
||||
virtual
|
||||
~PeerImp ();
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <BeastConfig.h>
|
||||
|
||||
#include <ripple/common/impl/KeyCache.cpp>
|
||||
#include <ripple/common/impl/MultiSocket.cpp>
|
||||
#include <ripple/common/impl/ResolverAsio.cpp>
|
||||
#include <ripple/common/impl/RippleSSLContext.cpp>
|
||||
#include <ripple/common/impl/TaggedCache.cpp>
|
||||
|
||||
Reference in New Issue
Block a user