[Libreoffice-commits] online.git: common/Protocol.hpp common/Session.cpp common/Session.hpp kit/ChildSession.cpp kit/ChildSession.hpp kit/Kit.cpp wsd/ClientSession.cpp wsd/ClientSession.hpp wsd/TileDesc.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Jan 23 04:37:41 UTC 2017
common/Protocol.hpp | 14 +++++++
common/Session.cpp | 10 ++---
common/Session.hpp | 2 -
kit/ChildSession.cpp | 88 +++++++++++++++++++++++++-------------------------
kit/ChildSession.hpp | 36 ++++++++++----------
kit/Kit.cpp | 12 +++---
wsd/ClientSession.cpp | 19 +++++-----
wsd/ClientSession.hpp | 10 ++---
wsd/TileDesc.hpp | 19 ++++------
9 files changed, 111 insertions(+), 99 deletions(-)
New commits:
commit 25be7f0ab6205cb66cf3b8952b95a6ac20274eb3
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Thu Jan 19 20:44:39 2017 -0500
wsd: use own tokenizer
Change-Id: Ia6e58767e3a138d086d4e0ae287782d3ed558076
Reviewed-on: https://gerrit.libreoffice.org/33418
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/common/Protocol.hpp b/common/Protocol.hpp
index 6d4e5cb..c075339 100644
--- a/common/Protocol.hpp
+++ b/common/Protocol.hpp
@@ -73,6 +73,20 @@ namespace LOOLProtocol
bool getTokenInteger(const Poco::StringTokenizer& tokens, const std::string& name, int& value);
bool getTokenString(const Poco::StringTokenizer& tokens, const std::string& name, std::string& value);
bool getTokenKeyword(const Poco::StringTokenizer& tokens, const std::string& name, const std::map<std::string, int>& map, int& value);
+ inline bool getTokenString(const std::vector<std::string>& tokens,
+ const std::string& name,
+ std::string& value)
+ {
+ for (const auto& token : tokens)
+ {
+ if (getTokenString(token, name, value))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
bool getTokenIntegerFromMessage(const std::string& message, const std::string& name, int& value);
bool getTokenStringFromMessage(const std::string& message, const std::string& name, std::string& value);
diff --git a/common/Session.cpp b/common/Session.cpp
index 03df779..b320522 100644
--- a/common/Session.cpp
+++ b/common/Session.cpp
@@ -116,17 +116,17 @@ bool Session::sendBinaryFrame(const char *buffer, int length)
return false;
}
-void Session::parseDocOptions(const StringTokenizer& tokens, int& part, std::string& timestamp)
+void Session::parseDocOptions(const std::vector<std::string>& tokens, int& part, std::string& timestamp)
{
// First token is the "load" command itself.
size_t offset = 1;
- if (tokens.count() > 2 && tokens[1].find("part=") == 0)
+ if (tokens.size() > 2 && tokens[1].find("part=") == 0)
{
getTokenInteger(tokens[1], "part", part);
++offset;
}
- for (size_t i = offset; i < tokens.count(); ++i)
+ for (size_t i = offset; i < tokens.size(); ++i)
{
if (tokens[i].find("url=") == 0)
{
@@ -163,11 +163,11 @@ void Session::parseDocOptions(const StringTokenizer& tokens, int& part, std::str
}
}
- if (tokens.count() > offset)
+ if (tokens.size() > offset)
{
if (getTokenString(tokens[offset], "options", _docOptions))
{
- if (tokens.count() > offset + 1)
+ if (tokens.size() > offset + 1)
_docOptions += Poco::cat(std::string(" "), tokens.begin() + offset + 1, tokens.end());
}
}
diff --git a/common/Session.hpp b/common/Session.hpp
index d5fe524..c2642d9 100644
--- a/common/Session.hpp
+++ b/common/Session.hpp
@@ -74,7 +74,7 @@ protected:
virtual ~Session();
/// Parses the options of the "load" command, shared between MasterProcessSession::loadDocument() and ChildProcessSession::loadDocument().
- void parseDocOptions(const Poco::StringTokenizer& tokens, int& part, std::string& timestamp);
+ void parseDocOptions(const std::vector<std::string>& tokens, int& part, std::string& timestamp);
void updateLastActivityTime()
{
diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index a216456..0489bd9 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -76,7 +76,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
{
LOG_TRC(getName() + ": handling [" << getAbbreviatedMessage(buffer, length) << "].");
const std::string firstLine = getFirstLine(buffer, length);
- StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
+ const auto tokens = LOOLProtocol::tokenize(firstLine.data(), firstLine.size());
if (LOOLProtocol::tokenIndicatesUserInteraction(tokens[0]))
{
@@ -84,7 +84,7 @@ bool ChildSession::_handleInput(const char *buffer, int length)
updateLastActivityTime();
}
- if (tokens.count() > 0 && tokens[0] == "useractive" && getLOKitDocument() != nullptr)
+ if (tokens.size() > 0 && tokens[0] == "useractive" && getLOKitDocument() != nullptr)
{
LOG_DBG("Handling message after inactivity of " << getInactivityMS() << "ms.");
setIsActive(true);
@@ -301,10 +301,10 @@ bool ChildSession::_handleInput(const char *buffer, int length)
return true;
}
-bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int part = -1;
- if (tokens.count() < 2)
+ if (tokens.size() < 2)
{
sendTextFrame("error: cmd=load kind=syntax");
return false;
@@ -372,12 +372,12 @@ bool ChildSession::loadDocument(const char * /*buffer*/, int /*length*/, StringT
return true;
}
-bool ChildSession::sendFontRendering(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::sendFontRendering(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
std::string font, text, decodedFont, decodedChar;
bool bSuccess;
- if (tokens.count() < 3 ||
+ if (tokens.size() < 3 ||
!getTokenString(tokens[1], "font", font))
{
sendTextFrame("error: cmd=renderfont kind=syntax");
@@ -488,12 +488,12 @@ void insertUserNames(const std::map<int, UserInfo>& viewInfo, std::string& json)
}
-bool ChildSession::getCommandValues(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::getCommandValues(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
bool success;
char* values;
std::string command;
- if (tokens.count() != 2 || !getTokenString(tokens[1], "command", command))
+ if (tokens.size() != 2 || !getTokenString(tokens[1], "command", command))
{
sendTextFrame("error: cmd=commandvalues kind=syntax");
return false;
@@ -537,11 +537,11 @@ bool ChildSession::getPartPageRectangles(const char* /*buffer*/, int /*length*/)
return true;
}
-bool ChildSession::clientZoom(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::clientZoom(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int tilePixelWidth, tilePixelHeight, tileTwipWidth, tileTwipHeight;
- if (tokens.count() != 5 ||
+ if (tokens.size() != 5 ||
!getTokenInteger(tokens[1], "tilepixelwidth", tilePixelWidth) ||
!getTokenInteger(tokens[2], "tilepixelheight", tilePixelHeight) ||
!getTokenInteger(tokens[3], "tiletwipwidth", tileTwipWidth) ||
@@ -559,14 +559,14 @@ bool ChildSession::clientZoom(const char* /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ChildSession::clientVisibleArea(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::clientVisibleArea(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int x;
int y;
int width;
int height;
- if (tokens.count() != 5 ||
+ if (tokens.size() != 5 ||
!getTokenInteger(tokens[1], "x", x) ||
!getTokenInteger(tokens[2], "y", y) ||
!getTokenInteger(tokens[3], "width", width) ||
@@ -584,11 +584,11 @@ bool ChildSession::clientVisibleArea(const char* /*buffer*/, int /*length*/, Str
return true;
}
-bool ChildSession::downloadAs(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::downloadAs(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
std::string name, id, format, filterOptions;
- if (tokens.count() < 5 ||
+ if (tokens.size() < 5 ||
!getTokenString(tokens[1], "name", name) ||
!getTokenString(tokens[2], "id", id))
{
@@ -600,7 +600,7 @@ bool ChildSession::downloadAs(const char* /*buffer*/, int /*length*/, StringToke
if (getTokenString(tokens[4], "options", filterOptions))
{
- if (tokens.count() > 5)
+ if (tokens.size() > 5)
{
filterOptions += Poco::cat(std::string(" "), tokens.begin() + 5, tokens.end());
}
@@ -632,11 +632,11 @@ bool ChildSession::getChildId()
return true;
}
-bool ChildSession::getTextSelection(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::getTextSelection(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
std::string mimeType;
- if (tokens.count() != 2 ||
+ if (tokens.size() != 2 ||
!getTokenString(tokens[1], "mimetype", mimeType))
{
sendTextFrame("error: cmd=gettextselection kind=syntax");
@@ -657,11 +657,11 @@ bool ChildSession::getTextSelection(const char* /*buffer*/, int /*length*/, Stri
return true;
}
-bool ChildSession::paste(const char* buffer, int length, StringTokenizer& tokens)
+bool ChildSession::paste(const char* buffer, int length, const std::vector<std::string>& tokens)
{
std::string mimeType;
- if (tokens.count() < 2 || !getTokenString(tokens[1], "mimetype", mimeType))
+ if (tokens.size() < 2 || !getTokenString(tokens[1], "mimetype", mimeType))
{
sendTextFrame("error: cmd=paste kind=syntax");
return false;
@@ -680,10 +680,10 @@ bool ChildSession::paste(const char* buffer, int length, StringTokenizer& tokens
return true;
}
-bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
std::string name, type;
- if (tokens.count() != 3 ||
+ if (tokens.size() != 3 ||
!getTokenString(tokens[1], "name", name) ||
!getTokenString(tokens[2], "type", type))
{
@@ -711,10 +711,10 @@ bool ChildSession::insertFile(const char* /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ChildSession::keyEvent(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::keyEvent(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int type, charcode, keycode;
- if (tokens.count() != 4 ||
+ if (tokens.size() != 4 ||
!getTokenKeyword(tokens[1], "type",
{{"input", LOK_KEYEVENT_KEYINPUT}, {"up", LOK_KEYEVENT_KEYUP}},
type) ||
@@ -750,7 +750,7 @@ bool ChildSession::keyEvent(const char* /*buffer*/, int /*length*/, StringTokeni
return true;
}
-bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int type, x, y, count;
bool success = true;
@@ -759,7 +759,7 @@ bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringToke
int buttons = 1; // left button
int modifier = 0;
- if (tokens.count() < 5 ||
+ if (tokens.size() < 5 ||
!getTokenKeyword(tokens[1], "type",
{{"buttondown", LOK_MOUSEEVENT_MOUSEBUTTONDOWN},
{"buttonup", LOK_MOUSEEVENT_MOUSEBUTTONUP},
@@ -773,11 +773,11 @@ bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringToke
}
// compatibility with older loleaflets
- if (success && tokens.count() > 5 && !getTokenInteger(tokens[5], "buttons", buttons))
+ if (success && tokens.size() > 5 && !getTokenInteger(tokens[5], "buttons", buttons))
success = false;
// compatibility with older loleaflets
- if (success && tokens.count() > 6 && !getTokenInteger(tokens[6], "modifier", modifier))
+ if (success && tokens.size() > 6 && !getTokenInteger(tokens[6], "modifier", modifier))
success = false;
if (!success)
@@ -795,9 +795,9 @@ bool ChildSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
- if (tokens.count() <= 1)
+ if (tokens.size() <= 1)
{
sendTextFrame("error: cmd=uno kind=syntax");
return false;
@@ -810,11 +810,11 @@ bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringToke
getLOKitDocument()->setView(_viewId);
- if (tokens.count() == 2 && tokens[1] == ".uno:fakeDiskFull")
+ if (tokens.size() == 2 && tokens[1] == ".uno:fakeDiskFull")
{
Util::alertAllUsers("internal", "diskfull");
}
- else if (tokens.count() == 2)
+ else if (tokens.size() == 2)
{
getLOKitDocument()->postUnoCommand(tokens[1].c_str(), nullptr, bNotify);
}
@@ -828,10 +828,10 @@ bool ChildSession::unoCommand(const char* /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ChildSession::selectText(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::selectText(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int type, x, y;
- if (tokens.count() != 4 ||
+ if (tokens.size() != 4 ||
!getTokenKeyword(tokens[1], "type",
{{"start", LOK_SETTEXTSELECTION_START},
{"end", LOK_SETTEXTSELECTION_END},
@@ -853,10 +853,10 @@ bool ChildSession::selectText(const char* /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ChildSession::selectGraphic(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::selectGraphic(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int type, x, y;
- if (tokens.count() != 4 ||
+ if (tokens.size() != 4 ||
!getTokenKeyword(tokens[1], "type",
{{"start", LOK_SETGRAPHICSELECTION_START},
{"end", LOK_SETGRAPHICSELECTION_END}},
@@ -877,9 +877,9 @@ bool ChildSession::selectGraphic(const char* /*buffer*/, int /*length*/, StringT
return true;
}
-bool ChildSession::resetSelection(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::resetSelection(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
- if (tokens.count() != 1)
+ if (tokens.size() != 1)
{
sendTextFrame("error: cmd=resetselection kind=syntax");
return false;
@@ -894,11 +894,11 @@ bool ChildSession::resetSelection(const char* /*buffer*/, int /*length*/, String
return true;
}
-bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
std::string url, format, filterOptions;
- if (tokens.count() < 4 ||
+ if (tokens.size() < 4 ||
!getTokenString(tokens[1], "url", url))
{
sendTextFrame("error: cmd=saveas kind=syntax");
@@ -909,7 +909,7 @@ bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, StringTokenize
if (getTokenString(tokens[3], "options", filterOptions))
{
- if (tokens.count() > 4)
+ if (tokens.size() > 4)
{
filterOptions += Poco::cat(std::string(" "), tokens.begin() + 4, tokens.end());
}
@@ -935,10 +935,10 @@ bool ChildSession::saveAs(const char* /*buffer*/, int /*length*/, StringTokenize
return true;
}
-bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int part;
- if (tokens.count() < 2 ||
+ if (tokens.size() < 2 ||
!getTokenInteger(tokens[1], "part", part))
{
sendTextFrame("error: cmd=setclientpart kind=invalid");
@@ -957,10 +957,10 @@ bool ChildSession::setClientPart(const char* /*buffer*/, int /*length*/, StringT
return true;
}
-bool ChildSession::setPage(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
+bool ChildSession::setPage(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens)
{
int page;
- if (tokens.count() < 2 ||
+ if (tokens.size() < 2 ||
!getTokenInteger(tokens[1], "page", page))
{
sendTextFrame("error: cmd=setpage kind=invalid");
diff --git a/kit/ChildSession.hpp b/kit/ChildSession.hpp
index b1c0fb9..0daa619 100644
--- a/kit/ChildSession.hpp
+++ b/kit/ChildSession.hpp
@@ -132,27 +132,27 @@ public:
using Session::sendTextFrame;
private:
- bool loadDocument(const char* buffer, int length, Poco::StringTokenizer& tokens);
+ bool loadDocument(const char* buffer, int length, const std::vector<std::string>& tokens);
- bool sendFontRendering(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool getCommandValues(const char* buffer, int length, Poco::StringTokenizer& tokens);
+ bool sendFontRendering(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool getCommandValues(const char* buffer, int length, const std::vector<std::string>& tokens);
- bool clientZoom(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool clientVisibleArea(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool downloadAs(const char* buffer, int length, Poco::StringTokenizer& tokens);
+ bool clientZoom(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool clientVisibleArea(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool downloadAs(const char* buffer, int length, const std::vector<std::string>& tokens);
bool getChildId();
- bool getTextSelection(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool paste(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool insertFile(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool keyEvent(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool mouseEvent(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool unoCommand(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool selectText(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool selectGraphic(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool resetSelection(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool saveAs(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool setClientPart(const char* buffer, int length, Poco::StringTokenizer& tokens);
- bool setPage(const char* buffer, int length, Poco::StringTokenizer& tokens);
+ bool getTextSelection(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool paste(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool insertFile(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool keyEvent(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool mouseEvent(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool unoCommand(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool selectText(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool selectGraphic(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool resetSelection(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool saveAs(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool setClientPart(const char* buffer, int length, const std::vector<std::string>& tokens);
+ bool setPage(const char* buffer, int length, const std::vector<std::string>& tokens);
void rememberEventsForInactiveUser(const int type, const std::string& payload);
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index ba5f5b6..fa04207 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -584,7 +584,7 @@ public:
LOG_INF("setDocumentPassword returned");
}
- void renderTile(StringTokenizer& tokens, const std::shared_ptr<LOOLWebSocket>& ws)
+ void renderTile(const std::vector<std::string>& tokens, const std::shared_ptr<LOOLWebSocket>& ws)
{
assert(ws && "Expected a non-null websocket.");
auto tile = TileDesc::parse(tokens);
@@ -652,7 +652,7 @@ public:
ws->sendFrame(output.data(), output.size(), WebSocket::FRAME_BINARY);
}
- void renderCombinedTiles(StringTokenizer& tokens, const std::shared_ptr<LOOLWebSocket>& ws)
+ void renderCombinedTiles(const std::vector<std::string>& tokens, const std::shared_ptr<LOOLWebSocket>& ws)
{
assert(ws && "Expected a non-null websocket.");
auto tileCombined = TileCombined::parse(tokens);
@@ -1360,8 +1360,7 @@ private:
break;
}
- const std::string message(input.data(), input.size());
- StringTokenizer tokens(message, " ");
+ const auto tokens = LOOLProtocol::tokenize(input.data(), input.size());
if (tokens[0] == "eof")
{
@@ -1387,7 +1386,8 @@ private:
int type = std::stoi(tokens[2]);
// payload is the rest of the message
- std::string payload(message.substr(tokens[0].length() + tokens[1].length() + tokens[2].length() + 3));
+ const auto offset = tokens[0].length() + tokens[1].length() + tokens[2].length() + 3; // + delims
+ const std::string payload(input.data() + offset, input.size() - offset);
// Forward the callback to the same view, demultiplexing is done by the LibreOffice core.
// TODO: replace with a map to be faster.
@@ -1422,7 +1422,7 @@ private:
}
else
{
- LOG_ERR("Unexpected tile request: [" << message << "].");
+ LOG_ERR("Unexpected request: [" << LOOLProtocol::getAbbreviatedMessage(input) << "].");
}
}
}
diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index ca09eeb..4ed0b29 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -84,7 +84,7 @@ bool ClientSession::_handleInput(const char *buffer, int length)
{
LOG_TRC(getName() << ": handling [" << getAbbreviatedMessage(buffer, length) << "].");
const std::string firstLine = getFirstLine(buffer, length);
- StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM);
+ const auto tokens = LOOLProtocol::tokenize(firstLine.data(), firstLine.size());
auto docBroker = getDocumentBroker();
if (!docBroker)
@@ -242,10 +242,11 @@ bool ClientSession::_handleInput(const char *buffer, int length)
return false;
}
-bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens,
+bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/,
+ const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker)
{
- if (tokens.count() < 2)
+ if (tokens.size() < 2)
{
// Failed loading ends connection.
sendTextFrame("error: cmd=load kind=syntax");
@@ -298,11 +299,11 @@ bool ClientSession::loadDocument(const char* /*buffer*/, int /*length*/, StringT
return false;
}
-bool ClientSession::getCommandValues(const char *buffer, int length, StringTokenizer& tokens,
+bool ClientSession::getCommandValues(const char *buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker)
{
std::string command;
- if (tokens.count() != 2 || !getTokenString(tokens[1], "command", command))
+ if (tokens.size() != 2 || !getTokenString(tokens[1], "command", command))
{
return sendTextFrame("error: cmd=commandvalues kind=syntax");
}
@@ -328,11 +329,11 @@ bool ClientSession::getPartPageRectangles(const char *buffer, int length,
return forwardToChild(std::string(buffer, length), docBroker);
}
-bool ClientSession::sendFontRendering(const char *buffer, int length, StringTokenizer& tokens,
+bool ClientSession::sendFontRendering(const char *buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker)
{
std::string font, text;
- if (tokens.count() < 2 ||
+ if (tokens.size() < 2 ||
!getTokenString(tokens[1], "font", font))
{
return sendTextFrame("error: cmd=renderfont kind=syntax");
@@ -362,7 +363,7 @@ bool ClientSession::sendFontRendering(const char *buffer, int length, StringToke
return forwardToChild(std::string(buffer, length), docBroker);
}
-bool ClientSession::sendTile(const char * /*buffer*/, int /*length*/, StringTokenizer& tokens,
+bool ClientSession::sendTile(const char * /*buffer*/, int /*length*/, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker)
{
try
@@ -379,7 +380,7 @@ bool ClientSession::sendTile(const char * /*buffer*/, int /*length*/, StringToke
return true;
}
-bool ClientSession::sendCombinedTiles(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens,
+bool ClientSession::sendCombinedTiles(const char* /*buffer*/, int /*length*/, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker)
{
try
diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp
index c946a94..ed78a44 100644
--- a/wsd/ClientSession.hpp
+++ b/wsd/ClientSession.hpp
@@ -103,21 +103,21 @@ public:
private:
virtual bool _handleInput(const char* buffer, int length) override;
- bool loadDocument(const char* buffer, int length, Poco::StringTokenizer& tokens,
+ bool loadDocument(const char* buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker);
bool getStatus(const char* buffer, int length,
const std::shared_ptr<DocumentBroker>& docBroker);
- bool getCommandValues(const char* buffer, int length, Poco::StringTokenizer& tokens,
+ bool getCommandValues(const char* buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker);
bool getPartPageRectangles(const char* buffer, int length,
const std::shared_ptr<DocumentBroker>& docBroker);
- bool sendTile(const char* buffer, int length, Poco::StringTokenizer& tokens,
+ bool sendTile(const char* buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker);
- bool sendCombinedTiles(const char* buffer, int length, Poco::StringTokenizer& tokens,
+ bool sendCombinedTiles(const char* buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker);
- bool sendFontRendering(const char* buffer, int length, Poco::StringTokenizer& tokens,
+ bool sendFontRendering(const char* buffer, int length, const std::vector<std::string>& tokens,
const std::shared_ptr<DocumentBroker>& docBroker);
bool forwardToChild(const std::string& message,
diff --git a/wsd/TileDesc.hpp b/wsd/TileDesc.hpp
index ef5420b..e213c9a 100644
--- a/wsd/TileDesc.hpp
+++ b/wsd/TileDesc.hpp
@@ -165,7 +165,7 @@ public:
}
/// Deserialize a TileDesc from a tokenized string.
- static TileDesc parse(const Poco::StringTokenizer& tokens)
+ static TileDesc parse(const std::vector<std::string>& tokens)
{
// We don't expect undocumented fields and
// assume all values to be int.
@@ -178,7 +178,7 @@ public:
uint64_t oldHash = 0;
uint64_t hash = 0;
- for (size_t i = 0; i < tokens.count(); ++i)
+ for (size_t i = 0; i < tokens.size(); ++i)
{
if (LOOLProtocol::getTokenUInt64(tokens[i], "oldhash", oldHash))
;
@@ -213,9 +213,7 @@ public:
/// Deserialize a TileDesc from a string format.
static TileDesc parse(const std::string& message)
{
- Poco::StringTokenizer tokens(message, " ",
- Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
- return parse(tokens);
+ return parse(LOOLProtocol::tokenize(message.data(), message.size()));
}
private:
@@ -400,7 +398,7 @@ public:
}
/// Deserialize a TileDesc from a tokenized string.
- static TileCombined parse(const Poco::StringTokenizer& tokens)
+ static TileCombined parse(const std::vector<std::string>& tokens)
{
// We don't expect undocumented fields and
// assume all values to be int.
@@ -415,11 +413,12 @@ public:
std::string versions;
std::string oldhashes;
std::string hashes;
- for (size_t i = 0; i < tokens.count(); ++i)
+
+ for (const auto& token : tokens)
{
std::string name;
std::string value;
- if (LOOLProtocol::parseNameValuePair(tokens[i], name, value))
+ if (LOOLProtocol::parseNameValuePair(token, name, value))
{
if (name == "tileposx")
{
@@ -466,9 +465,7 @@ public:
/// Deserialize a TileDesc from a string format.
static TileCombined parse(const std::string& message)
{
- Poco::StringTokenizer tokens(message, " ",
- Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM);
- return parse(tokens);
+ return parse(LOOLProtocol::tokenize(message.data(), message.size()));
}
static TileCombined create(const std::vector<TileDesc>& tiles)
More information about the Libreoffice-commits
mailing list