[Libreoffice-commits] online.git: 4 commits - loolwsd/Connect.cpp loolwsd/LoadTest.cpp loolwsd/LOOLBroker.cpp loolwsd/LOOLKit.cpp loolwsd/LOOLWSD.cpp loolwsd/test
Tor Lillqvist
tml at collabora.com
Tue Feb 23 18:04:55 UTC 2016
loolwsd/Connect.cpp | 2 +-
loolwsd/LOOLBroker.cpp | 6 +++---
loolwsd/LOOLKit.cpp | 2 +-
loolwsd/LOOLWSD.cpp | 10 +++++++---
loolwsd/LoadTest.cpp | 5 +++--
loolwsd/test/httpwstest.cpp | 7 +++++--
6 files changed, 20 insertions(+), 12 deletions(-)
New commits:
commit 32dc0a3c87f3c97ee7e6ce9bc0e642365566fa3b
Author: Tor Lillqvist <tml at collabora.com>
Date: Tue Feb 23 20:03:43 2016 +0200
Don't ever attempt to handle the payload of CLOSE frames
diff --git a/loolwsd/Connect.cpp b/loolwsd/Connect.cpp
index 3aceeaf..43da98b 100644
--- a/loolwsd/Connect.cpp
+++ b/loolwsd/Connect.cpp
@@ -76,7 +76,7 @@ public:
{
char buffer[100000];
n = _ws.receiveFrame(buffer, sizeof(buffer), flags);
- if (n > 0)
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
{
std::cout << "Got " << n << " bytes: " << getAbbreviatedMessage(buffer, n) << std::endl;
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 4bc41fb..94559aa 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -224,7 +224,7 @@ public:
{
char buffer[1024];
n = _ws->receiveFrame(buffer, sizeof(buffer), flags);
- if (n > 0)
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
{
std::string firstLine = getFirstLine(buffer, n);
if (firstLine == "eof")
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index feb7bef..19e8a8e 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -232,7 +232,7 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
<< std::hex << flags << Log::end;
break;
}
- else
+ else if ((flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
{
assert(n > 0);
const std::string firstLine = getFirstLine(buffer, n);
@@ -252,6 +252,10 @@ void SocketProcessor(std::shared_ptr<WebSocket> ws,
while (true)
{
n = ws->receiveFrame(buffer, sizeof(buffer), flags);
+
+ if (n <= 0 || (flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_CLOSE)
+ break;
+
message.insert(message.end(), buffer, buffer + n);
if ((flags & WebSocket::FrameFlags::FRAME_FLAG_FIN) == WebSocket::FrameFlags::FRAME_FLAG_FIN)
{
@@ -272,7 +276,7 @@ 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 && !handler(largeBuffer, n, false))
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE && !handler(largeBuffer, n, false))
{
Log::info("Socket handler flagged for finishing.");
break;
@@ -679,7 +683,7 @@ public:
{
char buffer[200000];
n = _ws.receiveFrame(buffer, sizeof(buffer), flags);
- if (n > 0)
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
{
Log::trace() << "Client got " << n << " bytes: "
<< getAbbreviatedMessage(buffer, n) << Log::end;
diff --git a/loolwsd/LoadTest.cpp b/loolwsd/LoadTest.cpp
index 24fceec..f9df891 100644
--- a/loolwsd/LoadTest.cpp
+++ b/loolwsd/LoadTest.cpp
@@ -92,7 +92,7 @@ public:
{
char buffer[100000];
n = _ws.receiveFrame(buffer, sizeof(buffer), flags);
- if (n > 0)
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
{
#if 0
Log::debug() << "Client got " << n << " bytes: "
@@ -112,7 +112,8 @@ public:
Log::debug() << "Client got " << n << " bytes: "
<< getAbbreviatedMessage(largeBuffer, n) << Log::end;
#endif
- response = getFirstLine(buffer, n);
+ if (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE)
+ response = getFirstLine(largeBuffer, n);
}
else if (tokens[0] == "loolclient")
{
commit 7320d8ca51b7aa2c2a2fde98813f77e248cafa9e
Author: Tor Lillqvist <tml at collabora.com>
Date: Tue Feb 23 20:02:54 2016 +0200
Bin unused 'using'
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index 8ea1689..05e67b1 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -24,8 +24,6 @@
#include <Common.hpp>
#include <ChildProcessSession.hpp>
-using Poco::StringTokenizer;
-
/// Tests the HTTP WebSocket API of loolwsd. The server has to be started manually before running this test.
class HTTPWSTest : public CPPUNIT_NS::TestFixture
{
commit 79037b687e916f0c1240e3fea34b6cc5b7745862
Author: Tor Lillqvist <tml at collabora.com>
Date: Tue Feb 23 20:02:29 2016 +0200
Log received messages to stderr
diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp
index dca3f75..8ea1689 100644
--- a/loolwsd/test/httpwstest.cpp
+++ b/loolwsd/test/httpwstest.cpp
@@ -108,6 +108,7 @@ void HTTPWSTest::testPaste()
n = socket.receiveFrame(buffer, sizeof(buffer), flags);
if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
{
+ std::cerr << "Received message length " << n << ": " << LOOLProtocol::getAbbreviatedMessage(buffer, n) << '\n';
const std::string line = LOOLProtocol::getFirstLine(buffer, n);
const std::string prefix = "textselectioncontent: ";
if (line.find(prefix) == 0)
@@ -162,6 +163,7 @@ void HTTPWSTest::testLargePaste()
n = socket.receiveFrame(buffer, sizeof(buffer), flags);
if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
{
+ std::cerr << "Received message length " << n << ": " << LOOLProtocol::getAbbreviatedMessage(buffer, n) << '\n';
std::string line = LOOLProtocol::getFirstLine(buffer, n);
std::string prefix = "textselectioncontent: ";
if (line.find(prefix) == 0)
@@ -200,6 +202,7 @@ void HTTPWSTest::testRenderingOptions()
n = socket.receiveFrame(buffer, sizeof(buffer), flags);
if (n > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
{
+ std::cerr << "Received message length " << n << ": " << LOOLProtocol::getAbbreviatedMessage(buffer, n) << '\n';
std::string line = LOOLProtocol::getFirstLine(buffer, n);
std::string prefix = "status: ";
if (line.find(prefix) == 0)
@@ -404,6 +407,7 @@ bool HTTPWSTest::isDocumentLoaded(Poco::Net::WebSocket& ws)
bytes = ws.receiveFrame(buffer, sizeof(buffer), flags);
if (bytes > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
{
+ std::cerr << "Received message length " << bytes << ": " << LOOLProtocol::getAbbreviatedMessage(buffer, bytes) << '\n';
const std::string line = LOOLProtocol::getFirstLine(buffer, bytes);
const std::string prefixIndicator = "statusindicatorfinish:";
const std::string prefixStatus = "status:";
@@ -450,6 +454,7 @@ void HTTPWSTest::getResponseMessage(Poco::Net::WebSocket& ws, const std::string&
bytes = ws.receiveFrame(buffer, sizeof(buffer), flags);
if (bytes > 0 && (flags & Poco::Net::WebSocket::FRAME_OP_BITMASK) != Poco::Net::WebSocket::FRAME_OP_CLOSE)
{
+ std::cerr << "Received message length " << bytes << ": " << LOOLProtocol::getAbbreviatedMessage(buffer, bytes) << '\n';
const std::string message = isLine ?
LOOLProtocol::getFirstLine(buffer, bytes) :
std::string(buffer, bytes);
commit fbee03cae258ca2646e2d4ec88bfa862ce5c9560
Author: Tor Lillqvist <tml at collabora.com>
Date: Tue Feb 23 15:48:15 2016 +0200
Minor clarification
No need to pass the value of a variable, initialised much earlier, to
a system call when one can pass the required constant value as
such. Much clearer.
diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp
index a8ed8e3..bc11143 100644
--- a/loolwsd/LOOLBroker.cpp
+++ b/loolwsd/LOOLBroker.cpp
@@ -486,7 +486,6 @@ static int createLibreOfficeKit(const bool sharePages,
{
Process::PID childPID;
int fifoWriter = -1;
- int flags = O_WRONLY | O_NONBLOCK;
const Path pipePath = Path::forDirectory(childRoot + Path::separator() + FIFO_PATH);
const std::string pipeKit = Path(pipePath, BROKER_PREFIX + std::to_string(childCounter++) + BROKER_SUFIX).toString();
@@ -567,9 +566,9 @@ static int createLibreOfficeKit(const bool sharePages,
fifoCV.wait_for(
lock,
std::chrono::microseconds(80000),
- [&fifoWriter, &pipeKit, flags]
+ [&fifoWriter, &pipeKit]
{
- return (fifoWriter = open(pipeKit.c_str(), flags)) >= 0;
+ return (fifoWriter = open(pipeKit.c_str(), O_WRONLY | O_NONBLOCK)) >= 0;
});
if (fifoWriter < 0)
@@ -590,6 +589,7 @@ static int createLibreOfficeKit(const bool sharePages,
return -1;
}
+ int flags;
if ((flags = fcntl(fifoWriter, F_GETFL, 0)) < 0)
{
Log::error("Error: failed to get pipe flags [" + pipeKit + "].");
More information about the Libreoffice-commits
mailing list