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:
Vinnie Falco
2014-10-13 10:43:52 -07:00
parent dbd75169e5
commit 4606d99951
13 changed files with 77 additions and 166 deletions

View File

@@ -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)
{