[Libreoffice-commits] online.git: loolwsd/IoUtil.cpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Sat Apr 9 19:56:29 UTC 2016
loolwsd/IoUtil.cpp | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
New commits:
commit 70e8132866f2143863ab319e783cb54349307aa6
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Apr 9 15:41:32 2016 -0400
loolwsd: correct handling socket buffer size and exception handling
Change-Id: I3eb28405c8f30a98c1b1e9644e9303d6074337e3
Reviewed-on: https://gerrit.libreoffice.org/23942
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/IoUtil.cpp b/loolwsd/IoUtil.cpp
index 3d8b87b..4a595ec 100644
--- a/loolwsd/IoUtil.cpp
+++ b/loolwsd/IoUtil.cpp
@@ -54,6 +54,7 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
int n = 0;
bool stop = false;
std::vector<char> payload(READ_BUFFER_SIZE * 100);
+ payload.resize(0);
for (;;)
{
@@ -72,10 +73,7 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
payload.resize(payload.capacity());
n = ws->receiveFrame(payload.data(), payload.capacity(), flags);
- if (n >= 0)
- {
- payload.resize(n);
- }
+ payload.resize(n > 0 ? n : 0);
if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING)
{
@@ -149,7 +147,10 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
}
// Call the handler.
- if (!handler(payload))
+ const auto success = handler(payload);
+ payload.resize(0);
+
+ if (!success)
{
Log::info("Socket handler flagged to finish.");
break;
@@ -157,12 +158,13 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
}
Log::debug() << "SocketProcessor finishing. TerminationFlag: " << stop
+ << ", n: " << n
<< ", payload size: " << payload.size()
<< ", flags: " << std::hex << flags << Log::end;
if (payload.size() > 1)
{
- Log::warn("Last message will not be processed: [" +
- LOOLProtocol::getFirstLine(payload.data(), payload.size()) + "].");
+ Log::warn("Last message (" + std::to_string(payload.size()) + " bytes) will not be processed: [" +
+ std::string(payload.data(), payload.size()) + "].");
}
}
catch (const WebSocketException& exc)
@@ -181,9 +183,13 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
break;
}
}
- catch (const NetException& exc)
+ catch (const Poco::Exception& exc)
+ {
+ Log::error("SocketProcessor: Exception: " + exc.message());
+ }
+ catch (const std::exception& exc)
{
- Log::error("SocketProcessor: NetException: " + exc.message());
+ Log::error("SocketProcessor: std::exception: " + std::string(exc.what()));
}
Log::info("SocketProcessor finished.");
More information about the Libreoffice-commits
mailing list