diff --git a/Builds/VisualStudio2013/RippleD.vcxproj b/Builds/VisualStudio2013/RippleD.vcxproj
index 032933601..549a3c512 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj
+++ b/Builds/VisualStudio2013/RippleD.vcxproj
@@ -1824,7 +1824,7 @@
True
-
+
True
diff --git a/Builds/VisualStudio2013/RippleD.vcxproj.filters b/Builds/VisualStudio2013/RippleD.vcxproj.filters
index e870d20e2..b55b37c1c 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj.filters
+++ b/Builds/VisualStudio2013/RippleD.vcxproj.filters
@@ -2793,7 +2793,7 @@
src\ripple\common\impl
-
+
src\ripple\common\impl
diff --git a/src/ripple/common/impl/MultiSocket.cpp b/src/ripple/common/impl/MultiSocket.cpp
index 29457ae55..db3db7e37 100644
--- a/src/ripple/common/impl/MultiSocket.cpp
+++ b/src/ripple/common/impl/MultiSocket.cpp
@@ -17,13 +17,12 @@
*/
//==============================================================================
-#include
+//#include
+//#include
+//#include
+//#include
-#include
-
-#include
-
-#include
+#include
namespace ripple {
@@ -32,8 +31,8 @@ MultiSocket* MultiSocket::New (
boost::asio::ssl::context& ssl_context,
int flags)
{
- return new MultiSocketType (
- socket, ssl_context, flags);
+ return new MultiSocketImpl (
+ ssl_context, flags, socket);
}
//------------------------------------------------------------------------------
@@ -43,270 +42,8 @@ MultiSocket* MultiSocket::New (
boost::asio::ssl::context& ssl_context,
int flags)
{
- return new MultiSocketType (
- io_service, ssl_context, flags);
+ return new MultiSocketImpl (
+ ssl_context, flags, io_service);
}
-//------------------------------------------------------------------------------
-
-class MultiSocket_test : public beast::unit_test::suite
-{
-public:
- class MultiSocketDetails : public beast::asio::TestPeerDetails
- {
- public:
- typedef int arg_type;
-
- MultiSocketDetails (int flags)
- : m_flags (flags)
- {
- }
-
- static beast::String getArgName (arg_type arg)
- {
- beast::String s;
-
- if (arg & MultiSocket::Flag::client_role)
- s << "client,";
-
- if (arg & MultiSocket::Flag::server_role)
- s << "server,";
-
- if (arg & MultiSocket::Flag::ssl)
- s << "ssl,";
-
- if (arg & MultiSocket::Flag::ssl_required)
- s << "ssl_required,";
-
- if (arg & MultiSocket::Flag::proxy)
- s << "proxy,";
-
- if (s != beast::String::empty)
- {
- s = "(" + s.substring (0, s.length () - 1) + ")";
- }
-
- return s;
- }
-
- static boost::asio::ssl::context& getSSLContext ()
- {
- struct ContextHolder
- {
- ContextHolder ()
- : context (RippleSSLContext::createAnonymous (
- "ALL:!LOW:!EXP:!MD5:@STRENGTH"))
- {
- // VFALCO NOTE Not sure if this is needed?
- context->get().set_verify_mode (
- boost::asio::ssl::verify_none);
- }
-
- std::unique_ptr context;
- };
-
- static ContextHolder holder;
-
- return holder.context->get ();
- }
-
- beast::String name () const
- {
- return getArgName (m_flags);
- }
-
- arg_type getFlags () const noexcept
- {
- return m_flags;
- }
-
- protected:
- arg_type m_flags;
- };
-
- //--------------------------------------------------------------------------
-
- template
- class MultiSocketDetailsType : public MultiSocketDetails
- {
- protected:
- typedef Protocol protocol_type;
- typedef typename protocol_type::socket socket_type;
- typedef typename protocol_type::acceptor acceptor_type;
- typedef typename protocol_type::endpoint endpoint_type;
- typedef typename protocol_type::resolver resolver_type;
-
- public:
- typedef socket_type native_socket_type;
- typedef acceptor_type native_acceptor_type;
-
- MultiSocketDetailsType (arg_type flags)
- : MultiSocketDetails (flags)
- , m_socket (get_io_service ())
- , m_acceptor (get_io_service ())
- , m_multiSocket (m_socket, MultiSocketDetails::getSSLContext (), flags)
- , m_acceptor_wrapper (m_acceptor)
- {
- }
-
- beast::asio::abstract_socket&
- get_socket ()
- {
- return m_multiSocket;
- }
-
- beast::asio::abstract_socket&
- get_acceptor ()
- {
- return m_acceptor_wrapper;
- }
-
- socket_type&
- get_native_socket ()
- {
- return m_socket;
- }
-
- acceptor_type&
- get_native_acceptor ()
- {
- return m_acceptor;
- }
-
- endpoint_type
- get_endpoint (beast::asio::PeerRole role)
- {
- if (role == beast::asio::PeerRole::server)
- return endpoint_type (boost::asio::ip::tcp::v6 (), 1052);
- else
- return endpoint_type (boost::asio::ip::address_v6 ().from_string ("::1"), 1052);
- }
-
- protected:
- socket_type m_socket;
- acceptor_type m_acceptor;
- MultiSocketType m_multiSocket;
- beast::asio::socket_wrapper m_acceptor_wrapper;
- };
-
- //--------------------------------------------------------------------------
-
- template
- void runProxy (ClientArg const& clientArg, ServerArg const& serverArg)
- {
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicProxyClient,
- beast::asio::TestPeerLogicSyncServer> (
- clientArg, serverArg, timeoutSeconds).report (*this);
-
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicProxyClient,
- beast::asio::TestPeerLogicAsyncServer> (
- clientArg, serverArg, timeoutSeconds).report (*this);
- }
-
- //--------------------------------------------------------------------------
-
- template
- void run (ClientArg const& clientArg, ServerArg const& serverArg)
- {
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicSyncClient,
- beast::asio::TestPeerLogicSyncServer>
- (clientArg, serverArg, timeoutSeconds).report (*this);
-
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicAsyncClient,
- beast::asio::TestPeerLogicSyncServer>
- (clientArg, serverArg, timeoutSeconds).report (*this);
-
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicSyncClient,
- beast::asio::TestPeerLogicAsyncServer>
- (clientArg, serverArg, timeoutSeconds).report (*this);
-
- beast::asio::PeerTest::run ,
- beast::asio::TestPeerLogicAsyncClient,
- beast::asio::TestPeerLogicAsyncServer>
- (clientArg, serverArg, timeoutSeconds).report (*this);
- }
-
- //--------------------------------------------------------------------------
-
- template
- void testProxyFlags (int extraClientFlags, int extraServerFlags)
- {
- assert (! MultiSocket::Flag (extraClientFlags).any_set (
- MultiSocket::Flag::client_role | MultiSocket::Flag::server_role));
-
- runProxy (MultiSocket::Flag::client_role | extraClientFlags,
- MultiSocket::Flag::server_role | extraServerFlags);
- }
-
- //--------------------------------------------------------------------------
-
- template
- void testFlags (int extraClientFlags, int extraServerFlags)
- {
- assert (! MultiSocket::Flag (extraClientFlags).any_set (
- MultiSocket::Flag::client_role | MultiSocket::Flag::server_role));
-
- run (MultiSocket::Flag::client_role | extraClientFlags,
- MultiSocket::Flag::server_role | extraServerFlags);
- }
-
- template
- void testProtocol ()
- {
- // Simple tests
- run (0,
- 0);
-
- run (MultiSocket::Flag::client_role,
- 0);
-
- run (0, MultiSocket::Flag::server_role);
-
- run (MultiSocket::Flag::client_role,
- MultiSocket::Flag::server_role);
-
- testFlags (MultiSocket::Flag::ssl,
- MultiSocket::Flag::ssl_required);
- // SSL-Detect tests
- testFlags (0,
- MultiSocket::Flag::ssl);
-
- testFlags (MultiSocket::Flag::ssl,
- MultiSocket::Flag::ssl);
-
- // PROXY Handshake tests
- testProxyFlags (MultiSocket::Flag::proxy,
- MultiSocket::Flag::proxy);
-
- testProxyFlags (MultiSocket::Flag::proxy | MultiSocket::Flag::ssl,
- MultiSocket::Flag::proxy | MultiSocket::Flag::ssl_required);
-
- // PROXY + SSL-Detect tests
- testProxyFlags (MultiSocket::Flag::proxy,
- MultiSocket::Flag::proxy | MultiSocket::Flag::ssl);
-
- testProxyFlags (MultiSocket::Flag::proxy | MultiSocket::Flag::ssl,
- MultiSocket::Flag::proxy | MultiSocket::Flag::ssl);
- }
-
- void run ()
- {
- testProtocol ();
- }
-
- //--------------------------------------------------------------------------
-
- enum
- {
- timeoutSeconds = 10
- };
-};
-
-BEAST_DEFINE_TESTSUITE(MultiSocket,common,ripple);
-
}
diff --git a/src/ripple/common/impl/MultiSocketType.h b/src/ripple/common/impl/MultiSocketImpl.h
similarity index 98%
rename from src/ripple/common/impl/MultiSocketType.h
rename to src/ripple/common/impl/MultiSocketImpl.h
index 65ea218b1..6ffaaef49 100644
--- a/src/ripple/common/impl/MultiSocketType.h
+++ b/src/ripple/common/impl/MultiSocketImpl.h
@@ -17,8 +17,8 @@
*/
//==============================================================================
-#ifndef RIPPLE_COMMON_MULTISOCKETTYPE_H_INCLUDED
-#define RIPPLE_COMMON_MULTISOCKETTYPE_H_INCLUDED
+#ifndef RIPPLE_COMMON_MULTISOCKETIMPL_H_INCLUDED
+#define RIPPLE_COMMON_MULTISOCKETIMPL_H_INCLUDED
#include
@@ -38,7 +38,7 @@ namespace ripple {
/** Template for producing instances of MultiSocket */
template
-class MultiSocketType
+class MultiSocketImpl
: public MultiSocket
{
private:
@@ -77,16 +77,16 @@ public:
typedef std::remove_reference_t next_layer_type;
typedef typename next_layer_type::lowest_layer_type lowest_layer_type;
- template
- MultiSocketType (Arg& arg,
- boost::asio::ssl::context& ssl_context, int flags)
+ template
+ MultiSocketImpl (boost::asio::ssl::context& ssl_context, int flags,
+ Args&&... args)
: m_flags (flags)
, m_state (stateNone)
, m_ssl_context (ssl_context)
, m_verify_mode (0)
, m_stream (nullptr)
, m_needsShutdown (false)
- , m_next_layer (arg)
+ , m_next_layer (std::forward (args)...)
, m_proxyInfoSet (false)
, m_native_ssl_handle (nullptr)
, m_origFlags (cleaned_flags (flags))
@@ -162,7 +162,7 @@ protected:
//--------------------------------------------------------------------------
//
- // MultiSocketType
+ // MultiSocketImpl
//
//--------------------------------------------------------------------------
@@ -865,7 +865,7 @@ protected:
#endif
error_handler m_handler;
- MultiSocketType & m_owner;
+ MultiSocketImpl & m_owner;
Stream& m_stream;
handshake_type const m_type;
boost::asio::basic_streambuf m_buffer;
@@ -875,7 +875,7 @@ protected:
beast::asio::HandshakeDetectLogicSSL3> m_ssl;
bool m_first_time;
- AsyncOp (MultiSocketType & owner, Stream& stream,
+ AsyncOp (MultiSocketImpl & owner, Stream& stream,
handshake_type type, beast::asio::const_buffers const& buffers,
error_handler const& handler)
: m_handler (handler)
diff --git a/src/ripple/common/tests/MultiSocket.test.cpp b/src/ripple/common/tests/MultiSocket.test.cpp
new file mode 100644
index 000000000..4dc1d6ebe
--- /dev/null
+++ b/src/ripple/common/tests/MultiSocket.test.cpp
@@ -0,0 +1,291 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2012, 2013 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include "../impl/MultiSocketImpl.h"
+
+#include "../RippleSSLContext.h"
+
+#include "../../beast/beast/unit_test/suite.h"
+
+#include
+
+namespace ripple {
+
+class MultiSocket_test : public beast::unit_test::suite
+{
+public:
+ class MultiSocketDetails : public beast::asio::TestPeerDetails
+ {
+ public:
+ typedef int arg_type;
+
+ MultiSocketDetails (int flags)
+ : m_flags (flags)
+ {
+ }
+
+ static beast::String getArgName (arg_type arg)
+ {
+ beast::String s;
+
+ if (arg & MultiSocket::Flag::client_role)
+ s << "client,";
+
+ if (arg & MultiSocket::Flag::server_role)
+ s << "server,";
+
+ if (arg & MultiSocket::Flag::ssl)
+ s << "ssl,";
+
+ if (arg & MultiSocket::Flag::ssl_required)
+ s << "ssl_required,";
+
+ if (arg & MultiSocket::Flag::proxy)
+ s << "proxy,";
+
+ if (s != beast::String::empty)
+ {
+ s = "(" + s.substring (0, s.length () - 1) + ")";
+ }
+
+ return s;
+ }
+
+ static boost::asio::ssl::context& getSSLContext ()
+ {
+ struct ContextHolder
+ {
+ ContextHolder ()
+ : context (RippleSSLContext::createAnonymous (
+ "ALL:!LOW:!EXP:!MD5:@STRENGTH"))
+ {
+ // VFALCO NOTE Not sure if this is needed?
+ context->get().set_verify_mode (
+ boost::asio::ssl::verify_none);
+ }
+
+ std::unique_ptr context;
+ };
+
+ static ContextHolder holder;
+
+ return holder.context->get ();
+ }
+
+ beast::String name () const
+ {
+ return getArgName (m_flags);
+ }
+
+ arg_type getFlags () const noexcept
+ {
+ return m_flags;
+ }
+
+ protected:
+ arg_type m_flags;
+ };
+
+ //--------------------------------------------------------------------------
+
+ template
+ class MultiSocketDetailsType : public MultiSocketDetails
+ {
+ protected:
+ typedef Protocol protocol_type;
+ typedef typename protocol_type::socket socket_type;
+ typedef typename protocol_type::acceptor acceptor_type;
+ typedef typename protocol_type::endpoint endpoint_type;
+ typedef typename protocol_type::resolver resolver_type;
+
+ public:
+ typedef socket_type native_socket_type;
+ typedef acceptor_type native_acceptor_type;
+
+ MultiSocketDetailsType (arg_type flags)
+ : MultiSocketDetails (flags)
+ , m_socket (get_io_service ())
+ , m_acceptor (get_io_service ())
+ , m_multiSocket (MultiSocketDetails::getSSLContext (),
+ flags, m_socket)
+ , m_acceptor_wrapper (m_acceptor)
+ {
+ }
+
+ beast::asio::abstract_socket&
+ get_socket ()
+ {
+ return m_multiSocket;
+ }
+
+ beast::asio::abstract_socket&
+ get_acceptor ()
+ {
+ return m_acceptor_wrapper;
+ }
+
+ socket_type&
+ get_native_socket ()
+ {
+ return m_socket;
+ }
+
+ acceptor_type&
+ get_native_acceptor ()
+ {
+ return m_acceptor;
+ }
+
+ endpoint_type
+ get_endpoint (beast::asio::PeerRole role)
+ {
+ if (role == beast::asio::PeerRole::server)
+ return endpoint_type (boost::asio::ip::tcp::v6 (), 1052);
+ else
+ return endpoint_type (boost::asio::ip::address_v6 ().from_string ("::1"), 1052);
+ }
+
+ protected:
+ socket_type m_socket;
+ acceptor_type m_acceptor;
+ MultiSocketImpl m_multiSocket;
+ beast::asio::socket_wrapper m_acceptor_wrapper;
+ };
+
+ //--------------------------------------------------------------------------
+
+ template
+ void runProxy (ClientArg const& clientArg, ServerArg const& serverArg)
+ {
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicProxyClient,
+ beast::asio::TestPeerLogicSyncServer> (
+ clientArg, serverArg, timeoutSeconds).report (*this);
+
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicProxyClient,
+ beast::asio::TestPeerLogicAsyncServer> (
+ clientArg, serverArg, timeoutSeconds).report (*this);
+ }
+
+ //--------------------------------------------------------------------------
+
+ template
+ void run (ClientArg const& clientArg, ServerArg const& serverArg)
+ {
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicSyncClient,
+ beast::asio::TestPeerLogicSyncServer>
+ (clientArg, serverArg, timeoutSeconds).report (*this);
+
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicAsyncClient,
+ beast::asio::TestPeerLogicSyncServer>
+ (clientArg, serverArg, timeoutSeconds).report (*this);
+
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicSyncClient,
+ beast::asio::TestPeerLogicAsyncServer>
+ (clientArg, serverArg, timeoutSeconds).report (*this);
+
+ beast::asio::PeerTest::run ,
+ beast::asio::TestPeerLogicAsyncClient,
+ beast::asio::TestPeerLogicAsyncServer>
+ (clientArg, serverArg, timeoutSeconds).report (*this);
+ }
+
+ //--------------------------------------------------------------------------
+
+ template
+ void testProxyFlags (int extraClientFlags, int extraServerFlags)
+ {
+ assert (! MultiSocket::Flag (extraClientFlags).any_set (
+ MultiSocket::Flag::client_role | MultiSocket::Flag::server_role));
+
+ runProxy (MultiSocket::Flag::client_role | extraClientFlags,
+ MultiSocket::Flag::server_role | extraServerFlags);
+ }
+
+ //--------------------------------------------------------------------------
+
+ template
+ void testFlags (int extraClientFlags, int extraServerFlags)
+ {
+ assert (! MultiSocket::Flag (extraClientFlags).any_set (
+ MultiSocket::Flag::client_role | MultiSocket::Flag::server_role));
+
+ run (MultiSocket::Flag::client_role | extraClientFlags,
+ MultiSocket::Flag::server_role | extraServerFlags);
+ }
+
+ template
+ void testProtocol ()
+ {
+ // Simple tests
+ run (0,
+ 0);
+
+ run (MultiSocket::Flag::client_role,
+ 0);
+
+ run (0, MultiSocket::Flag::server_role);
+
+ run (MultiSocket::Flag::client_role,
+ MultiSocket::Flag::server_role);
+
+ testFlags (MultiSocket::Flag::ssl,
+ MultiSocket::Flag::ssl_required);
+ // SSL-Detect tests
+ testFlags (0,
+ MultiSocket::Flag::ssl);
+
+ testFlags (MultiSocket::Flag::ssl,
+ MultiSocket::Flag::ssl);
+
+ // PROXY Handshake tests
+ testProxyFlags (MultiSocket::Flag::proxy,
+ MultiSocket::Flag::proxy);
+
+ testProxyFlags (MultiSocket::Flag::proxy | MultiSocket::Flag::ssl,
+ MultiSocket::Flag::proxy | MultiSocket::Flag::ssl_required);
+
+ // PROXY + SSL-Detect tests
+ testProxyFlags (MultiSocket::Flag::proxy,
+ MultiSocket::Flag::proxy | MultiSocket::Flag::ssl);
+
+ testProxyFlags (MultiSocket::Flag::proxy | MultiSocket::Flag::ssl,
+ MultiSocket::Flag::proxy | MultiSocket::Flag::ssl);
+ }
+
+ void run ()
+ {
+ testProtocol ();
+ }
+
+ //--------------------------------------------------------------------------
+
+ enum
+ {
+ timeoutSeconds = 10
+ };
+};
+
+BEAST_DEFINE_TESTSUITE(MultiSocket,common,ripple);
+
+}
diff --git a/src/ripple/radmap/impl/BasicFullBelowCache.cpp b/src/ripple/radmap/impl/BasicFullBelowCache.cpp
index 9b2ddc7f7..b9031e214 100644
--- a/src/ripple/radmap/impl/BasicFullBelowCache.cpp
+++ b/src/ripple/radmap/impl/BasicFullBelowCache.cpp
@@ -17,7 +17,6 @@
*/
//==============================================================================
-
namespace ripple {
namespace RadMap {