loolwsd/DocumentBroker.cpp | 38 +++++++++++++++++++++++++++++++++++--- loolwsd/DocumentBroker.hpp | 3 +++ 2 files changed, 38 insertions(+), 3 deletions(-)
New commits: commit f17ff9c1d9d3081251f5341a5954161dd548f450 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat Oct 8 13:13:23 2016 -0400 loolwsd: forward client messages to the respective client's WS Change-Id: Ie28223f985a7f24a7569300b846432bf77813ab0 Reviewed-on: https://gerrit.libreoffice.org/29634 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp index 896e7e4..e8bab09 100644 --- a/loolwsd/DocumentBroker.cpp +++ b/loolwsd/DocumentBroker.cpp @@ -465,15 +465,20 @@ bool DocumentBroker::handleInput(const std::vector<char>& payload) LOOLWSD::dumpOutgoingTrace(getJailId(), "0", msg); - if (msg.find("tile:") == 0) + const auto command = LOOLProtocol::getFirstToken(msg); + if (command == "tile:") { handleTileResponse(payload); } - else if (msg.find("tilecombine:") == 0) + else if (command == "tilecombine:") { handleTileCombinedResponse(payload); } - else if (msg.find("errortoall:") == 0) + else if (LOOLProtocol::getFirstToken(command, '-') == "client") + { + forwardToClient(command, payload); + } + else if (command == "errortoall:") { StringTokenizer tokens(msg, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); assert(tokens.count() == 3); @@ -717,4 +722,31 @@ void DocumentBroker::setModified(const bool value) _isModified = value; } +bool DocumentBroker::forwardToClient(const std::string& prefix, const std::vector<char>& payload) +{ + const std::string message(payload.data() + prefix.size(), payload.size() - prefix.size()); + Log::trace("Forwarding payload to client: " + message); + + std::string name; + std::string sid; + if (LOOLProtocol::parseNameValuePair(prefix, name, sid, '-') && name == "client") + { + const auto it = _sessions.find(sid); + if (it != _sessions.end()) + { + return it->second->sendTextFrame(message); + } + else + { + Log::warn() << "Client session [" << sid << "] not found to forward message: " << message << Log::end; + } + } + else + { + Log::error("Failed to parse prefix of forward-to-client message: " + message); + } + + return false; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp index 4909e34..80e93b2 100644 --- a/loolwsd/DocumentBroker.hpp +++ b/loolwsd/DocumentBroker.hpp @@ -238,6 +238,9 @@ private: /// Saves the document to Storage (assuming LO Core saved to local copy). bool saveToStorage(); + /// Forward a message from child process to a certain client. + bool forwardToClient(const std::string& prefix, const std::vector<char>& payload); + private: const Poco::URI _uriPublic; const std::string _docKey; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits