[Libreoffice-commits] online.git: loolwsd/ClientSession.cpp loolwsd/DocumentBroker.cpp loolwsd/DocumentBroker.hpp loolwsd/LOOLKit.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Oct 10 06:24:16 UTC 2016
loolwsd/ClientSession.cpp | 14 +++++++-------
loolwsd/DocumentBroker.cpp | 9 ++++++---
loolwsd/DocumentBroker.hpp | 2 +-
loolwsd/LOOLKit.cpp | 12 +++++++-----
4 files changed, 21 insertions(+), 16 deletions(-)
New commits:
commit 38cbfa96b0f3a197bf7445d4e32c64ac55be2fd0
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Oct 8 18:21:35 2016 -0400
loolwsd: forward client message to child via the process WS
Change-Id: I368e727b79b44b509ba49ed30218b8368c5eaad8
Reviewed-on: https://gerrit.libreoffice.org/29637
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/ClientSession.cpp b/loolwsd/ClientSession.cpp
index c4cfcdf..e4623ff 100644
--- a/loolwsd/ClientSession.cpp
+++ b/loolwsd/ClientSession.cpp
@@ -188,11 +188,11 @@ bool ClientSession::_handleInput(const char *buffer, int length)
tokens[0] != "userinactive" && tokens[0] != "useractive")
{
std::string dummyFrame = "dummymsg";
- return forwardToPeer(_peer, dummyFrame.c_str(), dummyFrame.size(), false);
+ return forwardToChild(dummyFrame.c_str(), dummyFrame.size());
}
else if (tokens[0] != "requestloksession")
{
- return forwardToPeer(_peer, buffer, length, false);
+ return forwardToChild(buffer, length);
}
else
{
@@ -241,7 +241,7 @@ bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/, StringT
oss << " options=" << _docOptions;
const auto loadRequest = oss.str();
- return forwardToPeer(_peer, loadRequest.c_str(), loadRequest.size(), false);
+ return forwardToChild(loadRequest.c_str(), loadRequest.size());
}
catch (const Poco::SyntaxException&)
{
@@ -253,7 +253,7 @@ bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/, StringT
bool ClientSession::getStatus(const char *buffer, int length)
{
- return forwardToPeer(_peer, buffer, length, false);
+ return forwardToChild(buffer, length);
}
bool ClientSession::getCommandValues(const char *buffer, int length, StringTokenizer& tokens)
@@ -270,7 +270,7 @@ bool ClientSession::getCommandValues(const char *buffer, int length, StringToken
return sendTextFrame(cmdValues);
}
- return forwardToPeer(_peer, buffer, length, false);
+ return forwardToChild(buffer, length);
}
bool ClientSession::getPartPageRectangles(const char *buffer, int length)
@@ -281,7 +281,7 @@ bool ClientSession::getPartPageRectangles(const char *buffer, int length)
return sendTextFrame(partPageRectangles);
}
- return forwardToPeer(_peer, buffer, length, false);
+ return forwardToChild(buffer, length);
}
bool ClientSession::sendFontRendering(const char *buffer, int length, StringTokenizer& tokens)
@@ -313,7 +313,7 @@ bool ClientSession::sendFontRendering(const char *buffer, int length, StringToke
return sendBinaryFrame(output.data(), output.size());
}
- return forwardToPeer(_peer, buffer, length, false);
+ return forwardToChild(buffer, length);
}
bool ClientSession::sendTile(const char * /*buffer*/, int /*length*/, StringTokenizer& tokens)
diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
index e2e5423..6c6cbb8 100644
--- a/loolwsd/DocumentBroker.cpp
+++ b/loolwsd/DocumentBroker.cpp
@@ -725,12 +725,15 @@ void DocumentBroker::setModified(const bool value)
bool DocumentBroker::forwardToChild(const std::string& viewId, const char *buffer, int length)
{
const auto message = std::string(buffer, length);
- Log::trace() << "Forwarding payload to child [" << viewId << "]: " << message << Log::end;
+ Log::warn() << "Forwarding payload to child [" << viewId << "]: " << message << Log::end;
const auto it = _sessions.find(viewId);
if (it != _sessions.end())
{
- return it->second->sendTextFrame("child-" + viewId + ' ' + message);
+ const auto msg = "child-" + viewId + ' ' + message;
+ Log::debug("DocBroker to Child: " + msg);
+ _childProcess->getWebSocket()->sendFrame(msg.data(), msg.size());
+ return true;
}
else
{
@@ -743,7 +746,7 @@ bool DocumentBroker::forwardToChild(const std::string& viewId, const char *buffe
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);
+ Log::warn("Forwarding payload to client: " + message);
std::string name;
std::string sid;
diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp
index bd0f7f3..66ec29c 100644
--- a/loolwsd/DocumentBroker.hpp
+++ b/loolwsd/DocumentBroker.hpp
@@ -241,7 +241,7 @@ 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.
+ /// Forward a message from child session to its respective client session.
bool forwardToClient(const std::string& prefix, const std::vector<char>& payload);
private:
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index a2fbf97..41d39fc 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -1231,14 +1231,15 @@ private:
Log::trace("Forwarding payload to client: " + message);
std::string name;
- int viewId = -1;
- if (LOOLProtocol::parseNameIntegerPair(prefix, name, viewId, '-') && name == "child")
+ std::string value;
+ if (LOOLProtocol::parseNameValuePair(prefix, name, value, '-') && name == "child")
{
+ const unsigned viewId = Util::decodeId(value);
const auto it = _connections.find(viewId);
- if (it != _connections.end() && it->second->isRunning())
+ if (it != _connections.end())
{
auto session = it->second->getSession();
- if (session && session->getViewId() == viewId)
+ if (session)
{
return session->handleInput(message.data(), message.size());
}
@@ -1613,7 +1614,8 @@ void lokit_main(const std::string& childRoot,
Log::debug("CreateSession failed.");
}
}
- else if (tokens[0] == "tile" || tokens[0] == "tilecombine" || tokens[0] == "canceltiles")
+ else if (tokens[0] == "tile" || tokens[0] == "tilecombine" || tokens[0] == "canceltiles" ||
+ LOOLProtocol::getFirstToken(tokens[0], '-') == "child")
{
if (document)
{
More information about the Libreoffice-commits
mailing list