From 154e90b1cad9e9d62431af15b6f2bdd792bc1aca Mon Sep 17 00:00:00 2001 From: Miguel Portilla Date: Fri, 13 May 2016 17:39:14 -0400 Subject: [PATCH] Fix StreambufWSMsg prepare (RIPD-1144). Return value was set incorrect in some cases. The buffer was not being prepared. Add websocket log support. --- src/ripple/server/WSSession.h | 22 ++++++++++----------- src/ripple/server/impl/ServerHandlerImp.cpp | 7 +++++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/ripple/server/WSSession.h b/src/ripple/server/WSSession.h index 2ffa9c1aaf..52b2322024 100644 --- a/src/ripple/server/WSSession.h +++ b/src/ripple/server/WSSession.h @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -82,28 +83,25 @@ public: prepare(std::size_t bytes, std::function) override { - if(sb_.size() == 0) - return { true, {} }; + if (sb_.size() == 0) + return{true, {}}; sb_.consume(n_); boost::tribool done; - // VFALCO TODO respect `bytes` fully - if(bytes < sb_.size()) + if (bytes < sb_.size()) { n_ = bytes; - done = boost::indeterminate; + done = false; } else { n_ = sb_.size(); done = true; } - std::vector vb; - auto const& data = sb_.data(); - vb.reserve(std::distance( - data.begin(), data.end())); - std::copy(data.begin(), data.end(), - std::back_inserter(vb)); - return { done, vb }; + auto const pb = beast::prepare_buffers(n_, sb_.data()); + std::vector vb ( + std::distance(pb.begin(), pb.end())); + std::copy(pb.begin(), pb.end(), std::back_inserter(vb)); + return{done, vb}; } }; diff --git a/src/ripple/server/impl/ServerHandlerImp.cpp b/src/ripple/server/impl/ServerHandlerImp.cpp index 81f173e1b1..366824db0f 100644 --- a/src/ripple/server/impl/ServerHandlerImp.cpp +++ b/src/ripple/server/impl/ServerHandlerImp.cpp @@ -271,12 +271,17 @@ ServerHandlerImp::onWSMessage( sb.commit(boost::asio::buffer_copy( sb.prepare(n), boost::asio::buffer(p, n))); }); + JLOG(m_journal.trace()) + << "Websocket sending '" << jvResult << "'"; session->send(std::make_shared< StreambufWSMsg>(std::move(sb))); session->complete(); return; } + JLOG(m_journal.trace()) + << "Websocket received '" << jv << "'"; + m_jobQueue.postCoro(jtCLIENT, "WS-Client", [this, session = std::move(session), jv = std::move(jv)](auto const& jc) @@ -290,6 +295,8 @@ ServerHandlerImp::onWSMessage( sb.commit(boost::asio::buffer_copy( sb.prepare(n), boost::asio::buffer(p, n))); }); + JLOG(m_journal.trace()) + << "Websocket sending '" << jr << "'"; session->send(std::make_shared< StreambufWSMsg>(std::move(sb))); session->complete();