loolwsd/Connect.cpp | 2 +- loolwsd/LOOLProtocol.hpp | 33 +++++++++++++++++++++++++++++++++ loolwsd/test/helpers.hpp | 12 +++--------- loolwsd/test/httpcrashtest.cpp | 2 +- 4 files changed, 38 insertions(+), 11 deletions(-)
New commits: commit ece974092616445983da34283228c80a81642a19 Author: Tor Lillqvist <t...@collabora.com> Date: Tue Oct 18 16:54:31 2016 +0300 Use LOOLProtocol::getAbbreviatedFrameDump() diff --git a/loolwsd/Connect.cpp b/loolwsd/Connect.cpp index 237e7c2..3c14b22 100644 --- a/loolwsd/Connect.cpp +++ b/loolwsd/Connect.cpp @@ -95,7 +95,7 @@ public: { { std::unique_lock<std::mutex> lock(coutMutex); - std::cout << "Got " << n << " bytes: " << getAbbreviatedMessage(buffer, n) << std::endl; + std::cout << "Got " << getAbbreviatedFrameDump(buffer, n, flags) << std::endl; } std::string firstLine = getFirstLine(buffer, n); diff --git a/loolwsd/test/helpers.hpp b/loolwsd/test/helpers.hpp index ab2b1ba..cdc7515 100644 --- a/loolwsd/test/helpers.hpp +++ b/loolwsd/test/helpers.hpp @@ -185,6 +185,7 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string response.resize(READ_BUFFER_SIZE); int bytes = ws.receiveFrame(response.data(), response.size(), flags); response.resize(bytes >= 0 ? bytes : 0); + std::cerr << name << "Got " << LOOLProtocol::getAbbreviatedFrameDump(response.data(), bytes, flags) << std::endl; auto message = LOOLProtocol::getAbbreviatedMessage(response); if (bytes > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) { @@ -206,12 +207,10 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string if (message.find(prefix) == 0) { - std::cerr << name << "Got " << bytes << " bytes: " << message << std::endl; return response; } else if (message.find("nextmessage") == 0) { - std::cerr << name << "Got " << bytes << " bytes: " << message << std::endl; Poco::StringTokenizer tokens(message, " ", Poco::StringTokenizer::TOK_IGNORE_EMPTY | Poco::StringTokenizer::TOK_TRIM); int size = 0; if (tokens.count() == 2 && @@ -220,10 +219,10 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string response.resize(size); bytes = ws.receiveFrame(response.data(), response.size(), flags); response.resize(bytes >= 0 ? bytes : 0); + std::cerr << name << "Got " << LOOLProtocol::getAbbreviatedFrameDump(response.data(), bytes, flags) << std::endl; message = LOOLProtocol::getAbbreviatedMessage(response); if (bytes > 0 && message.find(prefix) == 0) { - std::cerr << name << "Got " << bytes << " bytes: " << message << std::endl; return response; } } @@ -232,7 +231,6 @@ std::vector<char> getResponseMessage(Poco::Net::WebSocket& ws, const std::string else { response.resize(0); - std::cerr << name << "Got " << bytes << " bytes, flags: " << std::hex << flags << std::dec << std::endl; } if (bytes <= 0) @@ -405,18 +403,14 @@ void SocketProcessor(const std::string& name, } n = socket->receiveFrame(buffer, sizeof(buffer), flags); + std::cerr << name << "Got " << LOOLProtocol::getAbbreviatedFrameDump(buffer, n, flags) << std::endl; if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) { - std::cerr << name << "Got " << n << " bytes: " << LOOLProtocol::getAbbreviatedMessage(buffer, n) << std::endl; if (!handler(std::string(buffer, n))) { break; } } - else - { - std::cerr << name << "Got " << n << " bytes, flags: " << std::hex << flags << std::dec << std::endl; - } } while (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE); } diff --git a/loolwsd/test/httpcrashtest.cpp b/loolwsd/test/httpcrashtest.cpp index 53e6f0c..ab8f018 100644 --- a/loolwsd/test/httpcrashtest.cpp +++ b/loolwsd/test/httpcrashtest.cpp @@ -188,7 +188,7 @@ void HTTPCrashTest::testCrashKit() do { bytes = socket.receiveFrame(buffer, sizeof(buffer), flags); - std::cerr << testname << "Got " << bytes << " bytes: " << LOOLProtocol::getAbbreviatedMessage(buffer, bytes) << std::endl; + std::cerr << testname << "Got " << LOOLProtocol::getAbbreviatedFrameDump(buffer, bytes, flags) << std::endl; } while ((flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE); commit 24442a080cd3e27db513a766d913c3a63f682613 Author: Tor Lillqvist <t...@collabora.com> Date: Tue Oct 18 16:24:41 2016 +0300 Introduce LOOLProtocol::getAbbreviatedFrameDump() Produces a human-readable logging string describing a LOOL protocol frame. To be used for re-factoring snippets of similar code that sometimes print also the flags, sometimes pointlessly print the (binary) contents of a CLOSE frame (as if it was text), etc. diff --git a/loolwsd/LOOLProtocol.hpp b/loolwsd/LOOLProtocol.hpp index 3857a4e..41c5b3c 100644 --- a/loolwsd/LOOLProtocol.hpp +++ b/loolwsd/LOOLProtocol.hpp @@ -12,8 +12,11 @@ #include <cstring> #include <map> +#include <sstream> #include <string> +#include <Poco/Format.h> +#include <Poco/Net/WebSocket.h> #include <Poco/StringTokenizer.h> #define LOK_USE_UNSTABLE_API @@ -168,6 +171,36 @@ namespace LOOLProtocol { return getAbbreviatedMessage(message.data(), message.size()); } + + // Return a string dump of a WebSocket frame: Its opcode, length, first line (if present), + // flags. For human-readable logging purposes. Format not guaranteed to be stable. Not to be + // inspected programmatically. + inline + std::string getAbbreviatedFrameDump(const char *message, const int length, const int flags) + { + std::ostringstream result; + switch (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) + { +#define CASE(x) case Poco::Net::WebSocket::FRAME_OP_##x: result << #x; break + CASE(CONT); + CASE(TEXT); + CASE(BINARY); + CASE(CLOSE); + CASE(PING); + CASE(PONG); +#undef CASE + default: + result << Poco::format("%#x", flags); + break; + } + result << " frame: " << length << " bytes"; + + if (length > 0 && + ((flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) == Poco::Net::WebSocket::FRAME_OP_TEXT || + (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) == Poco::Net::WebSocket::FRAME_OP_BINARY)) + result << ": '" << getAbbreviatedMessage(message, length) << "'"; + return result.str(); + } }; #endif _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits