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.nakash...@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 <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@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) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits