diff --git a/Subtrees/beast/modules/beast_asio/beast_asio.h b/Subtrees/beast/modules/beast_asio/beast_asio.h index ac453b669f..d537fe1caa 100644 --- a/Subtrees/beast/modules/beast_asio/beast_asio.h +++ b/Subtrees/beast/modules/beast_asio/beast_asio.h @@ -62,13 +62,13 @@ namespace beast #include "tests/beast_TestPeerLogic.h" #include "tests/beast_TestPeerTest.h" -#include "tests/detail/beast_TestPeerType.h" -#include "tests/detail/beast_TestPeerTestType.h" -#include "tests/detail/beast_TestPeerDetailsTcp.h" #include "tests/detail/beast_TestPeerLogicSyncServer.h" #include "tests/detail/beast_TestPeerLogicSyncClient.h" #include "tests/detail/beast_TestPeerLogicAsyncServer.h" #include "tests/detail/beast_TestPeerLogicAsyncClient.h" +#include "tests/detail/beast_TestPeerType.h" +#include "tests/detail/beast_TestPeerTestType.h" +#include "tests/detail/beast_TestPeerDetailsTcp.h" } diff --git a/Subtrees/beast/modules/beast_asio/sockets/beast_SocketWrapper.h b/Subtrees/beast/modules/beast_asio/sockets/beast_SocketWrapper.h index 8ead9fe06a..073c4b5874 100644 --- a/Subtrees/beast/modules/beast_asio/sockets/beast_SocketWrapper.h +++ b/Subtrees/beast/modules/beast_asio/sockets/beast_SocketWrapper.h @@ -72,7 +72,7 @@ public: // if Object did not have a declaration for // protocol_type::socket // - template + template struct native_socket { typedef void* native_socket_type; @@ -83,16 +83,15 @@ public: native_socket_type m_socket; }; - template - struct native_socket >::type> + template + struct native_socket >::type> { - typedef typename Object::protocol_type::socket native_socket_type; + typedef typename AsioObject::protocol_type::socket native_socket_type; native_socket (Socket& peer) : m_socket (&peer.this_layer ()) { } native_socket_type& get () noexcept { return *m_socket; } native_socket_type& operator-> () noexcept { return *m_socket; } - private: native_socket_type* m_socket; }; diff --git a/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerTests.cpp b/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerTests.cpp index 701051ae46..f67e7abe37 100644 --- a/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerTests.cpp +++ b/Subtrees/beast/modules/beast_asio/tests/beast_TestPeerTests.cpp @@ -25,7 +25,7 @@ public: timeoutSeconds = 3 }; - TestPeerTests () : UnitTest ("TestPeer", "beast") + TestPeerTests () : UnitTest ("TestPeer", "beast", runManual) { } diff --git a/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerDetailsTcp.h b/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerDetailsTcp.h index e3fe271198..a9a8de49fa 100644 --- a/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerDetailsTcp.h +++ b/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerDetailsTcp.h @@ -31,8 +31,6 @@ protected: typedef protocol_type::endpoint endpoint_type; typedef protocol_type::resolver resolver_type; - struct NoArg { }; // dummy - public: typedef protocol_type arg_type; typedef socket_type native_socket_type; diff --git a/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerType.h b/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerType.h index cbef2f81a8..ad1d992ba8 100644 --- a/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerType.h +++ b/Subtrees/beast/modules/beast_asio/tests/detail/beast_TestPeerType.h @@ -20,19 +20,49 @@ #ifndef BEAST_TESTPEERTYPE_H_INCLUDED #define BEAST_TESTPEERTYPE_H_INCLUDED -template +template class TestPeerType - : public DetailsType + : public Details , public Logic , public TestPeer , public Thread { +protected: + // TestPeerDetails + using Details::get_socket; + using Details::get_acceptor; + using Details::get_io_service; + + // Details + typedef typename Details::protocol_type protocol_type; + typedef typename Details::socket_type socket_type; + typedef typename Details::acceptor_type acceptor_type; + typedef typename Details::endpoint_type endpoint_type; + typedef typename Details::resolver_type resolver_type; + + using Details::get_native_socket; + using Details::get_native_acceptor; + using Details::get_endpoint; + + // TestPeerLogic + using Logic::error; + using Logic::socket; + using Logic::get_role; + using Logic::get_model; + using Logic::on_connect; + using Logic::on_connect_async; + using Logic::pure_virtual; + public: - typedef typename DetailsType::arg_type arg_type; - typedef TestPeerType ThisType; + // Details + typedef typename Details::arg_type arg_type; + typedef typename Details::native_socket_type native_socket_type; + typedef typename Details::native_acceptor_type native_acceptor_type; + + typedef TestPeerType ThisType; TestPeerType (arg_type const& arg) - : DetailsType (arg) + : Details (arg) , Logic (get_socket ()) , Thread (name ()) { @@ -162,13 +192,17 @@ public: if (failure (get_native_acceptor ().open (get_endpoint (get_role ()).protocol (), error ()))) return; - if (failure (get_native_acceptor ().set_option (socket_type::reuse_address (true), error ()))) + // VFALCO TODO Figure out how to not hard code boost::asio::socket_base + if (failure (get_native_acceptor ().set_option ( + boost::asio::socket_base::reuse_address (true), error ()))) return; if (failure (get_native_acceptor ().bind (get_endpoint (get_role ()), error ()))) return; - if (failure (get_native_acceptor ().listen (socket_type::max_connections, error ()))) + // VFALCO TODO Figure out how to not hard code boost::asio::socket_base + if (failure (get_native_acceptor ().listen ( + boost::asio::socket_base::max_connections, error ()))) return; } }; diff --git a/modules/ripple_asio/sockets/ripple_MultiSocket.cpp b/modules/ripple_asio/sockets/ripple_MultiSocket.cpp index 6496077650..e0c5e2cfc7 100644 --- a/modules/ripple_asio/sockets/ripple_MultiSocket.cpp +++ b/modules/ripple_asio/sockets/ripple_MultiSocket.cpp @@ -34,7 +34,7 @@ MultiSocket* MultiSocket::New (boost::asio::io_service& io_service, class MultiSocketTests : public UnitTest { public: - class Details : public TestPeerDetails + class MultiSocketDetails : public TestPeerDetails { public: typedef int arg_type; @@ -54,7 +54,7 @@ public: tcpv6 = 32 }; - Details (arg_type flags) + MultiSocketDetails (arg_type flags) : m_flags (flags) { m_socketOptions.useClientSsl = (flags & client_ssl) != 0; @@ -66,6 +66,8 @@ public: static String getArgName (arg_type arg) { String s; + if (arg & tcpv4) s << "tcpv4:"; + if (arg & tcpv6) s << "tcpv6:"; if (arg != 0) { s << "["; @@ -73,8 +75,6 @@ public: if (arg & server_ssl) s << "server_ssl,"; if (arg & server_ssl_required) s << "server_ssl_required,"; if (arg & server_proxy) s << "server_proxy,"; - if (arg & tcpv4) s << "tcpv4,"; - if (arg & tcpv6) s << "tcpv6,"; s = s.substring (0, s.length () - 1) + "]"; } else @@ -104,8 +104,10 @@ public: MultiSocket::Options m_socketOptions; }; + //-------------------------------------------------------------------------- + template - class DetailsType : public Details + class MultiSocketDetailsType : public MultiSocketDetails { protected: typedef InternetProtocol protocol_type; @@ -118,8 +120,8 @@ public: typedef socket_type native_socket_type; typedef acceptor_type native_acceptor_type; - explicit DetailsType (arg_type flags = none) - : Details (flags) + explicit MultiSocketDetailsType (arg_type flags = none) + : MultiSocketDetails (flags) , m_socket (get_io_service ()) , m_acceptor (get_io_service ()) , m_multiSocket (m_socket, getSocketOptions ()) @@ -149,24 +151,20 @@ public: endpoint_type get_endpoint (TestPeer::Role role) { - if (getFlags () & Details::tcpv4) - { - if (role == TestPeer::Role::server) - { - return endpoint_type (boost::asio::ip::address_v4::any (), 1053); - } - else - { - return endpoint_type (boost::asio::ip::address_v4::loopback (), 1053); - } - } - else + if (getFlags () & MultiSocketDetails::tcpv6) { if (role == TestPeer::Role::server) return endpoint_type (boost::asio::ip::tcp::v6 (), 1052); else return endpoint_type (boost::asio::ip::address_v6 ().from_string ("::1"), 1052); } + else + { + if (role == TestPeer::Role::server) + return endpoint_type (boost::asio::ip::address_v4::any (), 1053); + else + return endpoint_type (boost::asio::ip::address_v4::loopback (), 1053); + } } protected: @@ -176,7 +174,7 @@ public: SocketWrapper m_acceptor_wrapper; }; - MultiSocketTests () : UnitTest ("MultiSocket", "ripple") + MultiSocketTests () : UnitTest ("MultiSocket", "ripple", runManual) { } @@ -195,7 +193,7 @@ public: template void testProtocol (Arg const& arg) { - testAsync > (arg); + testAsync > (arg); } void testOptions (int flags) @@ -208,14 +206,14 @@ public: void runTest () { // These should pass - testOptions (Details::none); - testOptions (Details::server_ssl); - testOptions (Details::client_ssl | Details::server_ssl); - testOptions (Details::client_ssl | Details::server_ssl_required); + testOptions (MultiSocketDetails::none); + testOptions (MultiSocketDetails::server_ssl); + testOptions (MultiSocketDetails::client_ssl | MultiSocketDetails::server_ssl); + testOptions (MultiSocketDetails::client_ssl | MultiSocketDetails::server_ssl_required); // These should fail - testOptions (Details::client_ssl); - testOptions (Details::server_ssl_required); + testOptions (MultiSocketDetails::client_ssl); + testOptions (MultiSocketDetails::server_ssl_required); } }; diff --git a/modules/ripple_net/basics/ripple_RPCServer.cpp b/modules/ripple_net/basics/ripple_RPCServer.cpp index 1ddd42ff91..3c7816c0b7 100644 --- a/modules/ripple_net/basics/ripple_RPCServer.cpp +++ b/modules/ripple_net/basics/ripple_RPCServer.cpp @@ -14,12 +14,11 @@ public: boost::asio::ssl::context& context, Handler& handler) : m_handler (handler) - , mSocket (io_service, context) , mStrand (io_service) + , mSocket (io_service, context) #if RIPPLE_USES_BEAST_SOCKETS , m_socketWrapper (mSocket) #endif - { } @@ -258,11 +257,11 @@ private: private: Handler& m_handler; + boost::asio::io_service::strand mStrand; AutoSocket mSocket; #if RIPPLE_USES_BEAST_SOCKETS SocketWrapper m_socketWrapper; #endif - boost::asio::io_service::strand mStrand; boost::asio::streambuf mLineBuffer; Blob mQueryVec;