[Libreoffice-commits] online.git: loolwsd/LOOLWSD.cpp
Miklos Vajna
vmiklos at collabora.co.uk
Mon Jan 18 07:56:40 PST 2016
loolwsd/LOOLWSD.cpp | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
New commits:
commit c8ea8bcacd1bc7503cb86a044d0bf320f0d45355
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Mon Jan 18 16:54:22 2016 +0100
loolwsd: handle WS messages split into multiple frames
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index d71e39c..78fcc7c 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -236,7 +236,25 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
break;
}
- if (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. Assume
+ // for now that this is always a multi-line
+ // message.
+ handler(message.data(), message.size(), false);
+ break;
+ }
+ }
+ }
+ else if (firstLine.size() == static_cast<std::string::size_type>(n))
{
handler(firstLine.c_str(), firstLine.size(), true);
}
More information about the Libreoffice-commits
mailing list