loolwsd/Connect.cpp | 3 +-- loolwsd/LOOLKit.cpp | 5 ++--- loolwsd/LOOLWSD.cpp | 20 +++++++++++--------- loolwsd/LoadTest.cpp | 3 +-- loolwsd/test/httpwstest.cpp | 4 ++-- 5 files changed, 17 insertions(+), 18 deletions(-)
New commits: commit 291b0aac6714094050f289bc720c64ea1ee89add Author: Ashod Nakashian <[email protected]> Date: Thu Jan 21 09:00:58 2016 -0500 loolwsd: don't ignore the last few bytes of a closed socket Change-Id: Id6332857e49ccbacfa6e63b87a1ed570e9598147 Reviewed-on: https://gerrit.libreoffice.org/21680 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/loolwsd/Connect.cpp b/loolwsd/Connect.cpp index 2f81a67..3aceeaf 100644 --- a/loolwsd/Connect.cpp +++ b/loolwsd/Connect.cpp @@ -76,8 +76,7 @@ public: { char buffer[100000]; n = _ws.receiveFrame(buffer, sizeof(buffer), flags); - - if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + if (n > 0) { std::cout << "Got " << n << " bytes: " << getAbbreviatedMessage(buffer, n) << std::endl; diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index bceb1fa..c9160c3 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -381,8 +381,7 @@ public: { char buffer[1024]; n = _ws->receiveFrame(buffer, sizeof(buffer), flags); - - if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + if (n > 0) { std::string firstLine = getFirstLine(buffer, n); if (firstLine == "eof") @@ -410,7 +409,7 @@ public: handle(queue, firstLine, buffer, n); } } - while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE && !_stop); + while (!_stop && n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE); Log::debug() << "Finishing " << thread_name << ". stop " << _stop << ", payload size: " << n << ", flags: " << std::hex << flags << Log::end; diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index c0af9e3..78d53fd 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -223,8 +223,14 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws, { continue; } - else if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + else if (n <= 0) { + // Connection closed. + break; + } + else + { + assert(n > 0); const std::string firstLine = getFirstLine(buffer, n); if (firstLine == "eof") { @@ -267,13 +273,10 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws, char largeBuffer[size]; //FIXME: Security risk! Flooding may segfault us. n = ws->receiveFrame(largeBuffer, size, flags); - if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + if (n > 0 && !handler(largeBuffer, n, false)) { - if (!handler(largeBuffer, n, false)) - { - Log::info("Socket handler flagged for finishing."); - break; - } + Log::info("Socket handler flagged for finishing."); + break; } } else @@ -613,8 +616,7 @@ public: { char buffer[200000]; n = _ws.receiveFrame(buffer, sizeof(buffer), flags); - - if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + if (n > 0) { Log::trace() << "Client got " << n << " bytes: " << getAbbreviatedMessage(buffer, n) << Log::end; diff --git a/loolwsd/LoadTest.cpp b/loolwsd/LoadTest.cpp index aaa2e3e..24fceec 100644 --- a/loolwsd/LoadTest.cpp +++ b/loolwsd/LoadTest.cpp @@ -92,8 +92,7 @@ public: { char buffer[100000]; n = _ws.receiveFrame(buffer, sizeof(buffer), flags); - - if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE) + if (n > 0) { #if 0 Log::debug() << "Client got " << n << " bytes: " diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index e18f63f..7b8d939 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -72,7 +72,7 @@ void HTTPWSTest::testPaste() { char buffer[100000]; n = _socket.receiveFrame(buffer, sizeof(buffer), flags); - if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) + if (n > 0) { const std::string line = LOOLProtocol::getFirstLine(buffer, n); const std::string prefix = "textselectioncontent: "; @@ -140,7 +140,7 @@ void HTTPWSTest::testRenderingOptions() { char buffer[100000]; n = _socket.receiveFrame(buffer, sizeof(buffer), flags); - if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE) + if (n > 0) { std::string line = LOOLProtocol::getFirstLine(buffer, n); std::string prefix = "status: "; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
