loolwsd/LOOLWSD.cpp | 15 ++++++++++++++- loolwsd/test/httpwstest.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-)
New commits: commit 6701dc62ce1c49f7d79ac54dd7123e602826207b Author: Henry Castro <hcas...@collabora.com> Date: Tue Apr 12 17:44:39 2016 -0400 loolwsd: response bad request diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index ace66b1..cc7d6c0 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -504,6 +504,20 @@ private: uri.erase(0, 1); } + // accept websocket connection with client + std::shared_ptr<WebSocket> ws; + try + { + ws = std::make_shared<WebSocket>(request, response); + } + catch (WebSocketException& exc) + { + response.setStatusAndReason(HTTPResponse::HTTP_BAD_REQUEST); + response.setContentLength(0); + response.send(); + throw; + } + const auto uriPublic = DocumentBroker::sanitizeURI(uri); const auto docKey = DocumentBroker::getDocKey(uriPublic); std::shared_ptr<DocumentBroker> docBroker; @@ -548,7 +562,6 @@ private: // "canceltiles" message. auto queue = std::make_shared<BasicTileQueue>(); - auto ws = std::make_shared<WebSocket>(request, response); auto session = std::make_shared<MasterProcessSession>(id, LOOLSession::Kind::ToClient, ws, docBroker, queue); docBroker->addWSSession(id, session); auto wsSessionsCount = docBroker->getWSSessionsCount(); diff --git a/loolwsd/test/httpwstest.cpp b/loolwsd/test/httpwstest.cpp index aeef532..90711ac 100644 --- a/loolwsd/test/httpwstest.cpp +++ b/loolwsd/test/httpwstest.cpp @@ -39,6 +39,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture Poco::Net::HTTPResponse _response; CPPUNIT_TEST_SUITE(HTTPWSTest); + CPPUNIT_TEST(testBadRequest); CPPUNIT_TEST(testLoad); CPPUNIT_TEST(testBadLoad); CPPUNIT_TEST(testReload); @@ -54,6 +55,7 @@ class HTTPWSTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testImpressPartCountChanged); CPPUNIT_TEST_SUITE_END(); + void testBadRequest(); void testLoad(); void testBadLoad(); void testReload(); @@ -113,6 +115,37 @@ public: } }; +void HTTPWSTest::testBadRequest() +{ + try + { + // Load a document and get its status. + const std::string documentURL = "file:///fake.doc"; + + Poco::Net::HTTPResponse response; + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, documentURL); +#ifdef ENABLE_SSL + Poco::Net::HTTPSClientSession session(_uri.getHost(), _uri.getPort()); +#else + Poco::Net::HTTPClientSession session(_uri.getHost(), _uri.getPort()); +#endif + + request.set("Connection", "Upgrade"); + request.set("Upgrade", "websocket"); + request.set("Sec-WebSocket-Version", "13"); + request.set("Sec-WebSocket-Key", ""); + request.setChunkedTransferEncoding(false); + session.setKeepAlive(true); + session.sendRequest(request); + session.receiveResponse(response); + CPPUNIT_ASSERT(response.getStatus() == Poco::Net::HTTPResponse::HTTP_BAD_REQUEST); + } + catch (const Poco::Exception& exc) + { + CPPUNIT_FAIL(exc.displayText()); + } +} + void HTTPWSTest::testLoad() { try _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits