loolwsd/LOOLWSD.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
New commits: commit 2f964e74a84903b13996ac4e31271f383bc1fcaf Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Mon Jan 18 16:54:22 2016 +0100 loolwsd: handle WS messages split into multiple frames (cherry picked from commit c8ea8bcacd1bc7503cb86a044d0bf320f0d45355) Conflicts: loolwsd/LOOLWSD.cpp Change-Id: I00199a95fa0a429d29923d0f64980608903227a1 diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 98092ae..f18d868 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -427,7 +427,23 @@ public: std::string firstLine = getFirstLine(buffer, n); StringTokenizer tokens(firstLine, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); - if (kind == LOOLSession::Kind::ToClient && firstLine.size() == static_cast<std::string::size_type>(n)) + if ((flags & WebSocket::FrameFlags::FRAME_FLAG_FIN) != WebSocket::FrameFlags::FRAME_FLAG_FIN) + { + // One WS message split into multiple frames. + std::vector<char> message(buffer, buffer + n); + while (true) + { + n = ws->receiveFrame(buffer, sizeof(buffer), flags); + message.insert(message.end(), buffer, buffer + n); + if ((flags & WebSocket::FrameFlags::FRAME_FLAG_FIN) == WebSocket::FrameFlags::FRAME_FLAG_FIN) + { + // No more frames: invoke the handler. + session->handleInput(message.data(), message.size()); + break; + } + } + } + else if (kind == LOOLSession::Kind::ToClient && firstLine.size() == static_cast<std::string::size_type>(n)) { queue.put(firstLine); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits