[Libreoffice-commits] online.git: common/MessageQueue.cpp common/StringVector.cpp common/StringVector.hpp kit/ChildSession.cpp kit/ForKit.cpp kit/Kit.cpp test/WhiteBoxTests.cpp tools/Connect.cpp tools/KitClient.cpp wsd/Admin.cpp wsd/ClientSession.cpp wsd/DocumentBroker.cpp wsd/FileServer.cpp wsd/TileCache.cpp
Miklos Vajna (via logerrit)
logerrit at kemper.freedesktop.org
Mon Mar 9 08:46:55 UTC 2020
common/MessageQueue.cpp | 4 -
common/StringVector.cpp | 30 ++++++++
common/StringVector.hpp | 6 +
kit/ChildSession.cpp | 166 ++++++++++++++++++++++++------------------------
kit/ForKit.cpp | 4 -
kit/Kit.cpp | 18 ++---
test/WhiteBoxTests.cpp | 15 ++++
tools/Connect.cpp | 2
tools/KitClient.cpp | 6 -
wsd/Admin.cpp | 42 ++++++------
wsd/ClientSession.cpp | 72 ++++++++++----------
wsd/DocumentBroker.cpp | 2
wsd/FileServer.cpp | 7 +-
wsd/TileCache.cpp | 6 -
14 files changed, 216 insertions(+), 164 deletions(-)
New commits:
commit a7d3efdd4ea921430442ae427fb4c25a2d9afcc8
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Mar 9 09:05:30 2020 +0100
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Mon Mar 9 09:46:33 2020 +0100
Introduce StringVector::equals()
Allows comparing tokens with C strings without a heap allocation. Do the
same when comparing two tokens from two different StringVectors.
And use it at all places where operator ==() has an argument, which is a
StringVector::operator []() result.
Change-Id: Id36eff96767ab99b235ecbd12fb14446a3efa869
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90201
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
diff --git a/common/MessageQueue.cpp b/common/MessageQueue.cpp
index 84987b278..5482b4f79 100644
--- a/common/MessageQueue.cpp
+++ b/common/MessageQueue.cpp
@@ -366,13 +366,13 @@ std::string TileQueue::removeCallbackDuplicate(const std::string& callbackMsg)
if (queuedTokens.size() < 3)
continue;
- if (!isViewCallback && (queuedTokens[1] == tokens[1] && queuedTokens[2] == tokens[2]))
+ if (!isViewCallback && (queuedTokens.equals(1, tokens, 1) && queuedTokens.equals(2, tokens, 2)))
{
LOG_TRC("Remove obsolete callback: " << std::string(it.data(), it.size()) << " -> " << LOOLProtocol::getAbbreviatedMessage(callbackMsg));
getQueue().erase(getQueue().begin() + i);
break;
}
- else if (isViewCallback && (queuedTokens[1] == tokens[1] && queuedTokens[2] == tokens[2]))
+ else if (isViewCallback && (queuedTokens.equals(1, tokens, 1) && queuedTokens.equals(2, tokens, 2)))
{
// we additionally need to ensure that the payload is about
// the same viewid (otherwise we'd merge them all views into
diff --git a/common/StringVector.cpp b/common/StringVector.cpp
index 4527e593e..aab884881 100644
--- a/common/StringVector.cpp
+++ b/common/StringVector.cpp
@@ -86,4 +86,34 @@ std::string StringVector::cat(const std::string& separator, size_t offset) const
return ret;
}
+bool StringVector::equals(size_t index, const char* string) const
+{
+ if (index >= _tokens.size())
+ {
+ return false;
+ }
+
+ const StringToken& token = _tokens[index];
+ return _string.compare(token._index, token._length, string) == 0;
+}
+
+bool StringVector::equals(size_t index, const StringVector& other, size_t otherIndex)
+{
+ if (index >= _tokens.size())
+ {
+ return false;
+ }
+
+ if (otherIndex >= other._tokens.size())
+ {
+ return false;
+ }
+
+ const StringToken& token = _tokens[index];
+ const StringToken& otherToken = other._tokens[otherIndex];
+ int ret = _string.compare(token._index, token._length, other._string, otherToken._index,
+ otherToken._length);
+ return ret == 0;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/common/StringVector.hpp b/common/StringVector.hpp
index 4255e9d54..5008277fd 100644
--- a/common/StringVector.hpp
+++ b/common/StringVector.hpp
@@ -69,6 +69,12 @@ public:
/// Concats tokens starting from begin, using separator as separator.
std::string cat(const std::string& separator, size_t begin) const;
+
+ /// Compares the nth token with string.
+ bool equals(size_t index, const char* string) const;
+
+ /// Compares the nth token with the mth token from an other StringVector.
+ bool equals(size_t index, const StringVector& other, size_t otherIndex);
};
#endif
diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index 3cd8642bd..bc9573030 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -114,7 +114,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
updateLastActivityTime();
}
- if (tokens.size() > 0 && tokens[0] == "useractive" && getLOKitDocument() != nullptr)
+ if (tokens.size() > 0 && tokens.equals(0, "useractive") && getLOKitDocument() != nullptr)
{
LOG_DBG("Handling message after inactivity of " << getInactivityMS() << "ms.");
setIsActive(true);
@@ -183,16 +183,16 @@ bool ChildSession::_handleInput(const char *buffer, int length)
LOG_TRC("Finished replaying messages.");
}
- if (tokens[0] == "dummymsg")
+ if (tokens.equals(0, "dummymsg"))
{
// Just to update the activity of a view-only client.
return true;
}
- else if (tokens[0] == "commandvalues")
+ else if (tokens.equals(0, "commandvalues"))
{
return getCommandValues(buffer, length, tokens);
}
- else if (tokens[0] == "load")
+ else if (tokens.equals(0, "load"))
{
if (_isDocLoaded)
{
@@ -214,44 +214,44 @@ bool ChildSession::_handleInput(const char *buffer, int length)
sendTextFrame("error: cmd=" + tokens[0] + " kind=nodocloaded");
return false;
}
- else if (tokens[0] == "renderfont")
+ else if (tokens.equals(0, "renderfont"))
{
sendFontRendering(buffer, length, tokens);
}
- else if (tokens[0] == "setclientpart")
+ else if (tokens.equals(0, "setclientpart"))
{
return setClientPart(buffer, length, tokens);
}
- else if (tokens[0] == "selectclientpart")
+ else if (tokens.equals(0, "selectclientpart"))
{
return selectClientPart(buffer, length, tokens);
}
- else if (tokens[0] == "moveselectedclientparts")
+ else if (tokens.equals(0, "moveselectedclientparts"))
{
return moveSelectedClientParts(buffer, length, tokens);
}
- else if (tokens[0] == "setpage")
+ else if (tokens.equals(0, "setpage"))
{
return setPage(buffer, length, tokens);
}
- else if (tokens[0] == "status")
+ else if (tokens.equals(0, "status"))
{
return getStatus(buffer, length);
}
- else if (tokens[0] == "paintwindow")
+ else if (tokens.equals(0, "paintwindow"))
{
return renderWindow(buffer, length, tokens);
}
- else if (tokens[0] == "resizewindow")
+ else if (tokens.equals(0, "resizewindow"))
{
return resizeWindow(buffer, length, tokens);
}
- else if (tokens[0] == "tile" || tokens[0] == "tilecombine")
+ else if (tokens.equals(0, "tile") || tokens.equals(0, "tilecombine"))
{
assert(false && "Tile traffic should go through the DocumentBroker-LoKit WS.");
}
- else if (tokens[0] == "requestloksession" ||
- tokens[0] == "canceltiles")
+ else if (tokens.equals(0, "requestloksession") ||
+ tokens.equals(0, "canceltiles"))
{
// Just ignore these.
// FIXME: We probably should do something for "canceltiles" at least?
@@ -261,105 +261,105 @@ bool ChildSession::_handleInput(const char *buffer, int length)
// All other commands are such that they always require a LibreOfficeKitDocument session,
// i.e. need to be handled in a child process.
- assert(tokens[0] == "clientzoom" ||
- tokens[0] == "clientvisiblearea" ||
- tokens[0] == "outlinestate" ||
- tokens[0] == "downloadas" ||
- tokens[0] == "getchildid" ||
- tokens[0] == "gettextselection" ||
- tokens[0] == "getclipboard" ||
- tokens[0] == "setclipboard" ||
- tokens[0] == "paste" ||
- tokens[0] == "insertfile" ||
- tokens[0] == "key" ||
- tokens[0] == "textinput" ||
- tokens[0] == "windowkey" ||
- tokens[0] == "mouse" ||
- tokens[0] == "windowmouse" ||
- tokens[0] == "windowgesture" ||
- tokens[0] == "uno" ||
- tokens[0] == "selecttext" ||
- tokens[0] == "windowselecttext" ||
- tokens[0] == "selectgraphic" ||
- tokens[0] == "resetselection" ||
- tokens[0] == "saveas" ||
- tokens[0] == "useractive" ||
- tokens[0] == "userinactive" ||
- tokens[0] == "windowcommand" ||
- tokens[0] == "asksignaturestatus" ||
- tokens[0] == "signdocument" ||
- tokens[0] == "uploadsigneddocument" ||
- tokens[0] == "exportsignanduploaddocument" ||
- tokens[0] == "rendershapeselection" ||
- tokens[0] == "removetextcontext" ||
- tokens[0] == "dialogevent" ||
- tokens[0] == "completefunction");
-
- if (tokens[0] == "clientzoom")
+ assert(tokens.equals(0, "clientzoom") ||
+ tokens.equals(0, "clientvisiblearea") ||
+ tokens.equals(0, "outlinestate") ||
+ tokens.equals(0, "downloadas") ||
+ tokens.equals(0, "getchildid") ||
+ tokens.equals(0, "gettextselection") ||
+ tokens.equals(0, "getclipboard") ||
+ tokens.equals(0, "setclipboard") ||
+ tokens.equals(0, "paste") ||
+ tokens.equals(0, "insertfile") ||
+ tokens.equals(0, "key") ||
+ tokens.equals(0, "textinput") ||
+ tokens.equals(0, "windowkey") ||
+ tokens.equals(0, "mouse") ||
+ tokens.equals(0, "windowmouse") ||
+ tokens.equals(0, "windowgesture") ||
+ tokens.equals(0, "uno") ||
+ tokens.equals(0, "selecttext") ||
+ tokens.equals(0, "windowselecttext") ||
+ tokens.equals(0, "selectgraphic") ||
+ tokens.equals(0, "resetselection") ||
+ tokens.equals(0, "saveas") ||
+ tokens.equals(0, "useractive") ||
+ tokens.equals(0, "userinactive") ||
+ tokens.equals(0, "windowcommand") ||
+ tokens.equals(0, "asksignaturestatus") ||
+ tokens.equals(0, "signdocument") ||
+ tokens.equals(0, "uploadsigneddocument") ||
+ tokens.equals(0, "exportsignanduploaddocument") ||
+ tokens.equals(0, "rendershapeselection") ||
+ tokens.equals(0, "removetextcontext") ||
+ tokens.equals(0, "dialogevent") ||
+ tokens.equals(0, "completefunction"));
+
+ if (tokens.equals(0, "clientzoom"))
{
return clientZoom(buffer, length, tokens);
}
- else if (tokens[0] == "clientvisiblearea")
+ else if (tokens.equals(0, "clientvisiblearea"))
{
return clientVisibleArea(buffer, length, tokens);
}
- else if (tokens[0] == "outlinestate")
+ else if (tokens.equals(0, "outlinestate"))
{
return outlineState(buffer, length, tokens);
}
- else if (tokens[0] == "downloadas")
+ else if (tokens.equals(0, "downloadas"))
{
return downloadAs(buffer, length, tokens);
}
- else if (tokens[0] == "getchildid")
+ else if (tokens.equals(0, "getchildid"))
{
return getChildId();
}
- else if (tokens[0] == "gettextselection") // deprecated.
+ else if (tokens.equals(0, "gettextselection")) // deprecated.
{
return getTextSelection(buffer, length, tokens);
}
- else if (tokens[0] == "getclipboard")
+ else if (tokens.equals(0, "getclipboard"))
{
return getClipboard(buffer, length, tokens);
}
- else if (tokens[0] == "setclipboard")
+ else if (tokens.equals(0, "setclipboard"))
{
return setClipboard(buffer, length, tokens);
}
- else if (tokens[0] == "paste")
+ else if (tokens.equals(0, "paste"))
{
return paste(buffer, length, tokens);
}
- else if (tokens[0] == "insertfile")
+ else if (tokens.equals(0, "insertfile"))
{
return insertFile(buffer, length, tokens);
}
- else if (tokens[0] == "key")
+ else if (tokens.equals(0, "key"))
{
return keyEvent(buffer, length, tokens, LokEventTargetEnum::Document);
}
- else if (tokens[0] == "textinput")
+ else if (tokens.equals(0, "textinput"))
{
return extTextInputEvent(buffer, length, tokens);
}
- else if (tokens[0] == "windowkey")
+ else if (tokens.equals(0, "windowkey"))
{
return keyEvent(buffer, length, tokens, LokEventTargetEnum::Window);
}
- else if (tokens[0] == "mouse")
+ else if (tokens.equals(0, "mouse"))
{
return mouseEvent(buffer, length, tokens, LokEventTargetEnum::Document);
}
- else if (tokens[0] == "windowmouse")
+ else if (tokens.equals(0, "windowmouse"))
{
return mouseEvent(buffer, length, tokens, LokEventTargetEnum::Window);
}
- else if (tokens[0] == "windowgesture")
+ else if (tokens.equals(0, "windowgesture"))
{
return gestureEvent(buffer, length, tokens);
}
- else if (tokens[0] == "uno")
+ else if (tokens.equals(0, "uno"))
{
// SpellCheckApplySuggestion might contain non separator spaces
if (tokens[1].find(".uno:SpellCheckApplySuggestion") != std::string::npos ||
@@ -372,69 +372,69 @@ bool ChildSession::_handleInput(const char *buffer, int length)
}
return unoCommand(buffer, length, tokens);
}
- else if (tokens[0] == "selecttext")
+ else if (tokens.equals(0, "selecttext"))
{
return selectText(buffer, length, tokens, LokEventTargetEnum::Document);
}
- else if (tokens[0] == "windowselecttext")
+ else if (tokens.equals(0, "windowselecttext"))
{
return selectText(buffer, length, tokens, LokEventTargetEnum::Window);
}
- else if (tokens[0] == "selectgraphic")
+ else if (tokens.equals(0, "selectgraphic"))
{
return selectGraphic(buffer, length, tokens);
}
- else if (tokens[0] == "resetselection")
+ else if (tokens.equals(0, "resetselection"))
{
return resetSelection(buffer, length, tokens);
}
- else if (tokens[0] == "saveas")
+ else if (tokens.equals(0, "saveas"))
{
return saveAs(buffer, length, tokens);
}
- else if (tokens[0] == "useractive")
+ else if (tokens.equals(0, "useractive"))
{
setIsActive(true);
}
- else if (tokens[0] == "userinactive")
+ else if (tokens.equals(0, "userinactive"))
{
setIsActive(false);
}
- else if (tokens[0] == "windowcommand")
+ else if (tokens.equals(0, "windowcommand"))
{
sendWindowCommand(buffer, length, tokens);
}
- else if (tokens[0] == "signdocument")
+ else if (tokens.equals(0, "signdocument"))
{
signDocumentContent(buffer, length, tokens);
}
- else if (tokens[0] == "asksignaturestatus")
+ else if (tokens.equals(0, "asksignaturestatus"))
{
askSignatureStatus(buffer, length, tokens);
}
#if !MOBILEAPP
- else if (tokens[0] == "uploadsigneddocument")
+ else if (tokens.equals(0, "uploadsigneddocument"))
{
return uploadSignedDocument(buffer, length, tokens);
}
- else if (tokens[0] == "exportsignanduploaddocument")
+ else if (tokens.equals(0, "exportsignanduploaddocument"))
{
return exportSignAndUploadDocument(buffer, length, tokens);
}
#endif
- else if (tokens[0] == "rendershapeselection")
+ else if (tokens.equals(0, "rendershapeselection"))
{
return renderShapeSelection(buffer, length, tokens);
}
- else if (tokens[0] == "removetextcontext")
+ else if (tokens.equals(0, "removetextcontext"))
{
return removeTextContext(buffer, length, tokens);
}
- else if (tokens[0] == "dialogevent")
+ else if (tokens.equals(0, "dialogevent"))
{
return dialogEvent(buffer, length, tokens);
}
- else if (tokens[0] == "completefunction")
+ else if (tokens.equals(0, "completefunction"))
{
return completeFunction(buffer, length, tokens);
}
@@ -2363,7 +2363,7 @@ void ChildSession::loKitCallback(const int type, const std::string& payload)
" width=" + std::to_string(width) +
" height=" + std::to_string(height));
}
- else if (tokens.size() == 2 && tokens[0] == "EMPTY")
+ else if (tokens.size() == 2 && tokens.equals(0, "EMPTY"))
{
const std::string part = (_docType != "text" ? tokens[1].c_str() : "0"); // Writer renders everything as part 0.
sendTextFrame("invalidatetiles: EMPTY, " + part);
diff --git a/kit/ForKit.cpp b/kit/ForKit.cpp
index b1fe997a0..4ebd57907 100644
--- a/kit/ForKit.cpp
+++ b/kit/ForKit.cpp
@@ -101,7 +101,7 @@ public:
try
{
StringVector tokens = LOOLProtocol::tokenize(message);
- if (tokens.size() == 2 && tokens[0] == "spawn")
+ if (tokens.size() == 2 && tokens.equals(0, "spawn"))
{
const int count = std::stoi(tokens[1]);
if (count > 0)
@@ -114,7 +114,7 @@ public:
LOG_WRN("Cannot spawn " << tokens[1] << " children as requested.");
}
}
- else if (tokens.size() == 3 && tokens[0] == "setconfig")
+ else if (tokens.size() == 3 && tokens.equals(0, "setconfig"))
{
// Currently only rlimit entries are supported.
if (!Rlimit::handleSetrlimitCommand(tokens))
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 188e95586..0b417f5e4 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1874,17 +1874,17 @@ public:
const StringVector tokens = LOOLProtocol::tokenize(input.data(), input.size());
- if (tokens[0] == "eof")
+ if (tokens.equals(0, "eof"))
{
LOG_INF("Received EOF. Finishing.");
break;
}
- if (tokens[0] == "tile")
+ if (tokens.equals(0, "tile"))
{
renderTile(tokens);
}
- else if (tokens[0] == "tilecombine")
+ else if (tokens.equals(0, "tilecombine"))
{
renderCombinedTiles(tokens);
}
@@ -1892,7 +1892,7 @@ public:
{
forwardToChild(tokens[0], input);
}
- else if (tokens[0] == "callback")
+ else if (tokens.equals(0, "callback"))
{
if (tokens.size() >= 3)
{
@@ -2126,7 +2126,7 @@ protected:
{
LOG_DBG("Too late, TerminationFlag is set, we're going down");
}
- else if (tokens[0] == "session")
+ else if (tokens.equals(0, "session"))
{
const std::string& sessionId = tokens[1];
const std::string& docKey = tokens[2];
@@ -2148,14 +2148,14 @@ protected:
LOG_DBG("CreateSession failed.");
}
}
- else if (tokens[0] == "exit")
+ else if (tokens.equals(0, "exit"))
{
LOG_INF("Setting TerminationFlag due to 'exit' command from parent.");
SigUtil::setTerminationFlag();
document.reset();
}
- else if (tokens[0] == "tile" || tokens[0] == "tilecombine" || tokens[0] == "canceltiles" ||
- tokens[0] == "paintwindow" || tokens[0] == "resizewindow" ||
+ else if (tokens.equals(0, "tile") || tokens.equals(0, "tilecombine") || tokens.equals(0, "canceltiles") ||
+ tokens.equals(0, "paintwindow") || tokens.equals(0, "resizewindow") ||
LOOLProtocol::getFirstToken(tokens[0], '-') == "child")
{
if (document)
@@ -2167,7 +2167,7 @@ protected:
LOG_WRN("No document while processing " << tokens[0] << " request.");
}
}
- else if (tokens.size() == 3 && tokens[0] == "setconfig")
+ else if (tokens.size() == 3 && tokens.equals(0, "setconfig"))
{
#if !MOBILEAPP
// Currently only rlimit entries are supported.
diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp
index 5c843adea..4b0912a33 100644
--- a/test/WhiteBoxTests.cpp
+++ b/test/WhiteBoxTests.cpp
@@ -817,6 +817,21 @@ void WhiteBoxTests::testStringVector()
// Test operator []().
CPPUNIT_ASSERT_EQUAL(std::string("a"), vector[0]);
CPPUNIT_ASSERT_EQUAL(std::string(""), vector[2]);
+
+ // Test equals().
+ CPPUNIT_ASSERT(vector.equals(0, "a"));
+ CPPUNIT_ASSERT(!vector.equals(0, "A"));
+ CPPUNIT_ASSERT(vector.equals(1, "b"));
+ CPPUNIT_ASSERT(!vector.equals(1, "B"));
+ CPPUNIT_ASSERT(!vector.equals(2, ""));
+
+ // Test equals(), StringVector argument version.
+ StringVector vector2;
+ vector2.push_back("a");
+ vector2.push_back("B");
+
+ CPPUNIT_ASSERT(vector.equals(0, vector2, 0));
+ CPPUNIT_ASSERT(!vector.equals(0, vector2, 1));
}
CPPUNIT_TEST_SUITE_REGISTRATION(WhiteBoxTests);
diff --git a/tools/Connect.cpp b/tools/Connect.cpp
index 0fcd3ab4c..8593b0a35 100644
--- a/tools/Connect.cpp
+++ b/tools/Connect.cpp
@@ -92,7 +92,7 @@ public:
std::string firstLine = getFirstLine(buffer, n);
StringVector tokens(LOOLProtocol::tokenize(firstLine, ' '));
- if (std::getenv("DISPLAY") != nullptr && tokens[0] == "tile:")
+ if (std::getenv("DISPLAY") != nullptr && tokens.equals(0, "tile:"))
{
TemporaryFile pngFile;
std::ofstream pngStream(pngFile.path(), std::ios::binary);
diff --git a/tools/KitClient.cpp b/tools/KitClient.cpp
index 3a58adc63..f7226aa47 100644
--- a/tools/KitClient.cpp
+++ b/tools/KitClient.cpp
@@ -94,7 +94,7 @@ protected:
if (tokens.size() == 0)
continue;
- if (tokens[0] == "?" || tokens[0] == "help")
+ if (tokens.equals(0, "?") || tokens.equals(0, "help"))
{
std::cout <<
"Commands mimic LOOL protocol but we talk directly to LOKit:" << std::endl <<
@@ -103,7 +103,7 @@ protected:
" tile part pixelwidth pixelheight docposx docposy doctilewidth doctileheight" << std::endl <<
" calls LibreOfficeKitDocument::paintTile" << std::endl;
}
- else if (tokens[0] == "status")
+ else if (tokens.equals(0, "status"))
{
if (tokens.size() != 1)
{
@@ -116,7 +116,7 @@ protected:
std::cout << " " << i << ": '" << loKitDocument->pClass->getPartName(loKitDocument, i) << "'" << std::endl;
}
}
- else if (tokens[0] == "tile")
+ else if (tokens.equals(0, "tile"))
{
if (tokens.size() != 8)
{
diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp
index ec16ee757..7532206a5 100644
--- a/wsd/Admin.cpp
+++ b/wsd/Admin.cpp
@@ -63,7 +63,7 @@ void AdminSocketHandler::handleMessage(const std::vector<char> &payload)
AdminModel& model = _admin->getModel();
- if (tokens[0] == "auth")
+ if (tokens.equals(0, "auth"))
{
if (tokens.size() < 2)
{
@@ -100,59 +100,59 @@ void AdminSocketHandler::handleMessage(const std::vector<char> &payload)
shutdown();
return;
}
- else if (tokens[0] == "documents" ||
- tokens[0] == "active_users_count" ||
- tokens[0] == "active_docs_count" ||
- tokens[0] == "mem_stats" ||
- tokens[0] == "cpu_stats" ||
- tokens[0] == "sent_activity" ||
- tokens[0] == "recv_activity")
+ else if (tokens.equals(0, "documents") ||
+ tokens.equals(0, "active_users_count") ||
+ tokens.equals(0, "active_docs_count") ||
+ tokens.equals(0, "mem_stats") ||
+ tokens.equals(0, "cpu_stats") ||
+ tokens.equals(0, "sent_activity") ||
+ tokens.equals(0, "recv_activity"))
{
const std::string result = model.query(tokens[0]);
if (!result.empty())
sendTextFrame(tokens[0] + ' ' + result);
}
- else if (tokens[0] == "history")
+ else if (tokens.equals(0, "history"))
{
sendTextFrame("{ \"History\": " + model.getAllHistory() + "}");
}
- else if (tokens[0] == "version")
+ else if (tokens.equals(0, "version"))
{
// Send LOOL version information
sendTextFrame("loolserver " + LOOLWSD::getVersionJSON());
// Send LOKit version information
sendTextFrame("lokitversion " + LOOLWSD::LOKitVersion);
}
- else if (tokens[0] == "subscribe" && tokens.size() > 1)
+ else if (tokens.equals(0, "subscribe") && tokens.size() > 1)
{
for (std::size_t i = 0; i < tokens.size() - 1; i++)
{
model.subscribe(_sessionId, tokens[i + 1]);
}
}
- else if (tokens[0] == "unsubscribe" && tokens.size() > 1)
+ else if (tokens.equals(0, "unsubscribe") && tokens.size() > 1)
{
for (std::size_t i = 0; i < tokens.size() - 1; i++)
{
model.unsubscribe(_sessionId, tokens[i + 1]);
}
}
- else if (tokens[0] == "mem_consumed")
+ else if (tokens.equals(0, "mem_consumed"))
sendTextFrame("mem_consumed " + std::to_string(_admin->getTotalMemoryUsage()));
- else if (tokens[0] == "total_avail_mem")
+ else if (tokens.equals(0, "total_avail_mem"))
sendTextFrame("total_avail_mem " + std::to_string(_admin->getTotalAvailableMemory()));
- else if (tokens[0] == "sent_bytes")
+ else if (tokens.equals(0, "sent_bytes"))
sendTextFrame("sent_bytes " + std::to_string(model.getSentBytesTotal() / 1024));
- else if (tokens[0] == "recv_bytes")
+ else if (tokens.equals(0, "recv_bytes"))
sendTextFrame("recv_bytes " + std::to_string(model.getRecvBytesTotal() / 1024));
- else if (tokens[0] == "uptime")
+ else if (tokens.equals(0, "uptime"))
sendTextFrame("uptime " + std::to_string(model.getServerUptime()));
- else if (tokens[0] == "kill" && tokens.size() == 2)
+ else if (tokens.equals(0, "kill") && tokens.size() == 2)
{
try
{
@@ -165,7 +165,7 @@ void AdminSocketHandler::handleMessage(const std::vector<char> &payload)
LOG_WRN("Invalid PID to kill: " << tokens[1]);
}
}
- else if (tokens[0] == "settings")
+ else if (tokens.equals(0, "settings"))
{
// for now, we have only these settings
std::ostringstream oss;
@@ -185,13 +185,13 @@ void AdminSocketHandler::handleMessage(const std::vector<char> &payload)
sendTextFrame(oss.str());
}
- else if (tokens[0] == "shutdown")
+ else if (tokens.equals(0, "shutdown"))
{
LOG_INF("Shutdown requested by admin.");
SigUtil::requestShutdown();
return;
}
- else if (tokens[0] == "set" && tokens.size() > 1)
+ else if (tokens.equals(0, "set") && tokens.size() > 1)
{
for (size_t i = 1; i < tokens.size(); i++)
{
diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index 4bd43e445..696411fbf 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -337,7 +337,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
updateLastActivityTime();
docBroker->updateLastActivityTime();
}
- if (tokens[0] == "loolclient")
+ if (tokens.equals(0, "loolclient"))
{
if (tokens.size() < 2)
{
@@ -363,12 +363,12 @@ bool ClientSession::_handleInput(const char *buffer, int length)
return true;
}
- if (tokens[0] == "jserror")
+ if (tokens.equals(0, "jserror"))
{
LOG_ERR(std::string(buffer, length));
return true;
}
- else if (tokens[0] == "load")
+ else if (tokens.equals(0, "load"))
{
if (getDocURL() != "")
{
@@ -442,16 +442,16 @@ bool ClientSession::_handleInput(const char *buffer, int length)
sendTextFrame("error: cmd=" + tokens[0] + " kind=nodocloaded");
return false;
}
- else if (tokens[0] == "canceltiles")
+ else if (tokens.equals(0, "canceltiles"))
{
docBroker->cancelTileRequests(shared_from_this());
return true;
}
- else if (tokens[0] == "commandvalues")
+ else if (tokens.equals(0, "commandvalues"))
{
return getCommandValues(buffer, length, tokens, docBroker);
}
- else if (tokens[0] == "closedocument")
+ else if (tokens.equals(0, "closedocument"))
{
// If this session is the owner of the file & 'EnableOwnerTermination' feature
// is turned on by WOPI, let it close all sessions
@@ -470,46 +470,46 @@ bool ClientSession::_handleInput(const char *buffer, int length)
return true;
}
- else if (tokens[0] == "versionrestore")
+ else if (tokens.equals(0, "versionrestore"))
{
- if (tokens.size() > 1 && tokens[1] == "prerestore")
+ if (tokens.size() > 1 && tokens.equals(1, "prerestore"))
{
// green signal to WOPI host to restore the version *after* saving
// any unsaved changes, if any, to the storage
docBroker->closeDocument("versionrestore: prerestore_ack");
}
}
- else if (tokens[0] == "partpagerectangles")
+ else if (tokens.equals(0, "partpagerectangles"))
{
// We don't support partpagerectangles any more, will be removed in the
// next version
sendTextFrame("partpagerectangles: ");
return true;
}
- else if (tokens[0] == "ping")
+ else if (tokens.equals(0, "ping"))
{
std::string count = std::to_string(docBroker->getRenderedTileCount());
sendTextFrame("pong rendercount=" + count);
return true;
}
- else if (tokens[0] == "renderfont")
+ else if (tokens.equals(0, "renderfont"))
{
return sendFontRendering(buffer, length, tokens, docBroker);
}
- else if (tokens[0] == "status" || tokens[0] == "statusupdate")
+ else if (tokens.equals(0, "status") || tokens.equals(0, "statusupdate"))
{
assert(firstLine.size() == static_cast<size_t>(length));
return forwardToChild(firstLine, docBroker);
}
- else if (tokens[0] == "tile")
+ else if (tokens.equals(0, "tile"))
{
return sendTile(buffer, length, tokens, docBroker);
}
- else if (tokens[0] == "tilecombine")
+ else if (tokens.equals(0, "tilecombine"))
{
return sendCombinedTiles(buffer, length, tokens, docBroker);
}
- else if (tokens[0] == "save")
+ else if (tokens.equals(0, "save"))
{
if (isReadOnly())
{
@@ -541,7 +541,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
isAutosave, isExitSave, extendedData);
}
}
- else if (tokens[0] == "savetostorage")
+ else if (tokens.equals(0, "savetostorage"))
{
int force = 0;
if (tokens.size() > 1)
@@ -552,7 +552,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
docBroker->broadcastMessage("commandresult: { \"command\": \"savetostorage\", \"success\": true }");
}
}
- else if (tokens[0] == "clientvisiblearea")
+ else if (tokens.equals(0, "clientvisiblearea"))
{
int x;
int y;
@@ -576,7 +576,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
return forwardToChild(std::string(buffer, length), docBroker);
}
}
- else if (tokens[0] == "setclientpart")
+ else if (tokens.equals(0, "setclientpart"))
{
if(!_isTextDocument)
{
@@ -595,7 +595,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
}
}
}
- else if (tokens[0] == "selectclientpart")
+ else if (tokens.equals(0, "selectclientpart"))
{
if(!_isTextDocument)
{
@@ -614,7 +614,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
}
}
}
- else if (tokens[0] == "moveselectedclientparts")
+ else if (tokens.equals(0, "moveselectedclientparts"))
{
if(!_isTextDocument)
{
@@ -631,7 +631,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
}
}
}
- else if (tokens[0] == "clientzoom")
+ else if (tokens.equals(0, "clientzoom"))
{
int tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight;
if (tokens.size() != 5 ||
@@ -655,7 +655,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
return forwardToChild(std::string(buffer, length), docBroker);
}
}
- else if (tokens[0] == "tileprocessed")
+ else if (tokens.equals(0, "tileprocessed"))
{
std::string tileID;
if (tokens.size() != 2 ||
@@ -681,7 +681,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
docBroker->sendRequestedTiles(shared_from_this());
return true;
}
- else if (tokens[0] == "removesession") {
+ else if (tokens.equals(0, "removesession")) {
if (tokens.size() > 1 && (_isDocumentOwner || !isReadOnly()))
{
std::string sessionId = Util::encodeId(std::stoi(tokens[1]), 4);
@@ -691,7 +691,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
else
LOG_WRN("Readonly session '" << getId() << "' trying to kill another view");
}
- else if (tokens[0] == "renamefile")
+ else if (tokens.equals(0, "renamefile"))
{
std::string encodedWopiFilename;
if (tokens.size() < 2 || !getTokenString(tokens[1], "filename", encodedWopiFilename))
@@ -705,11 +705,11 @@ bool ClientSession::_handleInput(const char *buffer, int length)
docBroker->saveAsToStorage(getId(), "", wopiFilename, true);
return true;
}
- else if (tokens[0] == "dialogevent")
+ else if (tokens.equals(0, "dialogevent"))
{
return forwardToChild(firstLine, docBroker);
}
- else if (tokens[0] == "completefunction")
+ else if (tokens.equals(0, "completefunction"))
{
int temp;
if (tokens.size() != 2 ||
@@ -725,7 +725,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
}
else
{
- if (tokens[0] == "key")
+ if (tokens.equals(0, "key"))
_keyEvents++;
if (!filterMessage(firstLine))
@@ -739,7 +739,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
}
else
{
- assert(tokens[0] == "requestloksession");
+ assert(tokens.equals(0, "requestloksession"));
return true;
}
}
@@ -924,7 +924,7 @@ bool ClientSession::filterMessage(const std::string& message) const
StringVector tokens(LOOLProtocol::tokenize(message, ' '));
// Set allowed flag to false depending on if particular WOPI properties are set
- if (tokens[0] == "downloadas")
+ if (tokens.equals(0, "downloadas"))
{
std::string id;
if (tokens.size() >= 3 && getTokenString(tokens[2], "id", id))
@@ -946,7 +946,7 @@ bool ClientSession::filterMessage(const std::string& message) const
LOG_WRN("No value of id in downloadas message");
}
}
- else if (tokens[0] == "gettextselection" || tokens[0] == ".uno:Copy")
+ else if (tokens.equals(0, "gettextselection") || tokens.equals(0, ".uno:Copy"))
{
if (_wopiFileInfo && _wopiFileInfo->getDisableCopy())
{
@@ -958,13 +958,13 @@ bool ClientSession::filterMessage(const std::string& message) const
{
// By default, don't allow anything
allowed = false;
- if (tokens[0] == "userinactive" || tokens[0] == "useractive" || tokens[0] == "saveas")
+ if (tokens.equals(0, "userinactive") || tokens.equals(0, "useractive") || tokens.equals(0, "saveas"))
{
allowed = true;
}
- else if (tokens[0] == "uno")
+ else if (tokens.equals(0, "uno"))
{
- if (tokens.size() > 1 && tokens[1] == ".uno:ExecuteSearch")
+ if (tokens.size() > 1 && tokens.equals(1, ".uno:ExecuteSearch"))
{
allowed = true;
}
@@ -1270,12 +1270,12 @@ bool ClientSession::handleKitToClientMessage(const char* buffer, const int lengt
return true;
}
#endif
- else if (tokens.size() == 2 && tokens[0] == "statechanged:")
+ else if (tokens.size() == 2 && tokens.equals(0, "statechanged:"))
{
StringVector stateTokens(LOOLProtocol::tokenize(tokens[1], '='));
- if (stateTokens.size() == 2 && stateTokens[0] == ".uno:ModifiedStatus")
+ if (stateTokens.size() == 2 && stateTokens.equals(0, ".uno:ModifiedStatus"))
{
- docBroker->setModified(stateTokens[1] == "true");
+ docBroker->setModified(stateTokens.equals(1, "true"));
}
else
{
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index e6a95c050..b9e7e983c 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -2048,7 +2048,7 @@ bool DocumentBroker::forwardToChild(const std::string& viewId, const std::string
assert(!_uriJailed.empty());
StringVector tokens = LOOLProtocol::tokenize(msg);
- if (tokens.size() > 1 && tokens[1] == "load")
+ if (tokens.size() > 1 && tokens.equals(1, "load"))
{
// The json options must come last.
msg = tokens[0] + ' ' + tokens[1] + ' ' + tokens[2];
diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp
index d7db1e80c..ce9e12756 100644
--- a/wsd/FileServer.cpp
+++ b/wsd/FileServer.cpp
@@ -147,8 +147,8 @@ bool isConfigAuthOk(const std::string& userProvidedUsr, const std::string& userP
std::vector<unsigned char> saltData;
StringVector tokens = LOOLProtocol::tokenize(securePass, '.');
if (tokens.size() != 5 ||
- tokens[0] != "pbkdf2" ||
- tokens[1] != "sha512" ||
+ !tokens.equals(0, "pbkdf2") ||
+ !tokens.equals(1, "sha512") ||
!Util::dataFromHexString(tokens[3], saltData))
{
LOG_ERR("Incorrect format detected for secure_password in config file." << useLoolconfig);
@@ -167,7 +167,8 @@ bool isConfigAuthOk(const std::string& userProvidedUsr, const std::string& userP
stream << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(userProvidedPwdHash[j]);
// now compare the hashed user-provided pwd against the stored hash
- return stream.str() == tokens[4];
+ std::string string = stream.str();
+ return tokens.equals(4, string.c_str());
#else
const std::string pass = config.getString("admin_console.password", "");
LOG_ERR("The config file has admin_console.secure_password setting, "
diff --git a/wsd/TileCache.cpp b/wsd/TileCache.cpp
index 3211e336e..5ef10804f 100644
--- a/wsd/TileCache.cpp
+++ b/wsd/TileCache.cpp
@@ -323,13 +323,13 @@ std::pair<int, Util::Rectangle> TileCache::parseInvalidateMsg(const std::string&
{
StringVector tokens = LOOLProtocol::tokenize(tiles);
- assert(tokens.size() > 0 && tokens[0] == "invalidatetiles:");
+ assert(tokens.size() > 0 && tokens.equals(0, "invalidatetiles:"));
- if (tokens.size() == 2 && tokens[1] == "EMPTY")
+ if (tokens.size() == 2 && tokens.equals(1, "EMPTY"))
{
return std::pair<int, Util::Rectangle>(-1, Util::Rectangle(0, 0, INT_MAX, INT_MAX));
}
- else if (tokens.size() == 3 && tokens[1] == "EMPTY,")
+ else if (tokens.size() == 3 && tokens.equals(1, "EMPTY,"))
{
int part = 0;
if (stringToInteger(tokens[2], part))
More information about the Libreoffice-commits
mailing list