Makefile.am | 5 - common/Session.cpp | 89 ++++++------------------ common/Session.hpp | 18 ++-- kit/ChildSession.cpp | 2 kit/Kit.cpp | 10 +- test/Makefile.am | 3 wsd/ClientSession.cpp | 3 wsd/ClientSession.hpp | 1 wsd/DocumentBroker.cpp | 3 wsd/LOOLWSD.cpp | 177 ++++++++++++++++++++++++++++++++++++++++++++----- 10 files changed, 210 insertions(+), 101 deletions(-)
New commits: commit 45188ec7c565a3d40cdc30fccdb7558b99430264 Author: Jan Holesovsky <[email protected]> Date: Fri Feb 24 20:52:36 2017 +0100 nb: Use the non-blocking socket in the loolwsd. This so far only builds, but I did not even try to run it yet. Change-Id: Iceacb5fc5c8994726508e8ea00bd495d758391a8 diff --git a/Makefile.am b/Makefile.am index cc5f9f7..0a31018 100644 --- a/Makefile.am +++ b/Makefile.am @@ -25,7 +25,7 @@ endif ACLOCAL_AMFLAGS = -I m4 # quick and easy for now. -include_paths = -I${top_srcdir}/common -I${top_srcdir}/wsd -I${top_srcdir}/kit +include_paths = -I${top_srcdir}/common -I${top_srcdir}/net -I${top_srcdir}/wsd -I${top_srcdir}/kit AM_CPPFLAGS = -pthread -DLOOLWSD_DATADIR='"@LOOLWSD_DATADIR@"' -DLOOLWSD_CONFIGDIR='"@LOOLWSD_CONFIGDIR@"' ${include_paths} AM_LDFLAGS = -pthread -Wl,-E @@ -48,7 +48,8 @@ shared_sources = common/FileUtil.cpp \ common/SpookyV2.cpp \ common/Unit.cpp \ common/UnitHTTP.cpp \ - common/Util.cpp + common/Util.cpp \ + net/WebSocketHandler.cpp loolwsd_sources = wsd/Admin.cpp \ wsd/AdminModel.cpp \ diff --git a/common/Session.cpp b/common/Session.cpp index e30dce1..3f7fcca 100644 --- a/common/Session.cpp +++ b/common/Session.cpp @@ -26,7 +26,6 @@ #include <set> #include <Poco/Exception.h> -#include <Poco/Net/Socket.h> #include <Poco/Path.h> #include <Poco/String.h> #include <Poco/StringTokenizer.h> @@ -35,7 +34,6 @@ #include "Common.hpp" #include "IoUtil.hpp" #include "Protocol.hpp" -#include <LOOLWebSocket.hpp> #include "Log.hpp" #include "TileCache.hpp" #include "Util.hpp" @@ -44,13 +42,10 @@ using namespace LOOLProtocol; using Poco::Exception; -using Poco::Net::Socket; -using Poco::Net::WebSocket; -Session::Session(const std::string& name, const std::string& id, const std::shared_ptr<LOOLWebSocket>& ws) : +Session::Session(const std::string& name, const std::string& id) : _id(id), _name(name), - _ws(ws), _disconnected(false), _isActive(true), _lastActivityTime(std::chrono::steady_clock::now()), @@ -68,51 +63,19 @@ Session::~Session() bool Session::sendTextFrame(const char* buffer, const int length) { LOG_TRC(getName() << ": Send: " << getAbbreviatedMessage(buffer, length)); - try - { - std::unique_lock<std::mutex> lock(_mutex); - - if (!_ws || _ws->poll(Poco::Timespan(0), Socket::SelectMode::SELECT_ERROR)) - { - LOG_ERR(getName() << ": Bad socket while sending [" << getAbbreviatedMessage(buffer, length) << "]."); - return false; - } - - _ws->sendFrame(buffer, length); - return true; - } - catch (const Exception& exc) - { - LOG_ERR("Session::sendTextFrame: Exception: " << exc.displayText() << - (exc.nested() ? "( " + exc.nested()->displayText() + ")" : "")); - } - - return false; + std::vector<char> data(length); + data.assign(buffer, buffer + length); + sendMessage(data, WSOpCode::Text); + return true; } bool Session::sendBinaryFrame(const char *buffer, int length) { LOG_TRC(getName() << ": Send: " << std::to_string(length) << " bytes."); - try - { - std::unique_lock<std::mutex> lock(_mutex); - - if (!_ws || _ws->poll(Poco::Timespan(0), Socket::SelectMode::SELECT_ERROR)) - { - LOG_ERR(getName() << ": Bad socket while sending binary frame of " << length << " bytes."); - return false; - } - - _ws->sendFrame(buffer, length, WebSocket::FRAME_BINARY); - return true; - } - catch (const Exception& exc) - { - LOG_ERR("Session::sendBinaryFrame: Exception: " << exc.displayText() << - (exc.nested() ? "( " + exc.nested()->displayText() + ")" : "")); - } - - return false; + std::vector<char> data(length); + data.assign(buffer, buffer + length); + sendMessage(data); + return true; } void Session::parseDocOptions(const std::vector<std::string>& tokens, int& part, std::string& timestamp) @@ -190,47 +153,43 @@ bool Session::handleDisconnect() void Session::shutdown(Poco::UInt16 statusCode, const std::string& statusMessage) { - if (_ws) - { - LOG_TRC("Shutting down WS [" << getName() << "] with statusCode [" << - statusCode << "] and reason [" << statusMessage << "]."); + LOG_TRC("Shutting down WS [" << getName() << "] with statusCode [" << + statusCode << "] and reason [" << statusMessage << "]."); - // See protocol.txt for this application-level close frame. - const std::string msg = "close: " + statusMessage; - _ws->sendFrame(msg.data(), msg.size()); - _ws->shutdown(statusCode, statusMessage); - } + // See protocol.txt for this application-level close frame. + const std::string msg = "close: " + statusMessage; + sendTextFrame(msg.data(), msg.size()); + // TODO loolnb anything needed here? _ws->shutdown(statusCode, statusMessage); } -bool Session::handleInput(const char *buffer, int length) +void Session::handleMessage(bool /*fin*/, WSOpCode /*code*/, std::vector<char> &data) { - LOG_CHECK_RET(buffer != nullptr, false); - try { std::unique_ptr< std::vector<char> > replace; - if (UnitBase::get().filterSessionInput(this, buffer, length, replace)) + if (UnitBase::get().filterSessionInput(this, &data[0], data.size(), replace)) { - buffer = replace->data(); - length = replace->size(); + _handleInput(replace->data(), replace->size()); + return; } - return _handleInput(buffer, length); + _handleInput(&data[0], data.size()); + return; } catch (const Exception& exc) { LOG_ERR("Session::handleInput: Exception while handling [" << - getAbbreviatedMessage(buffer, length) << + getAbbreviatedMessage(data) << "] in " << getName() << ": " << exc.displayText() << (exc.nested() ? " (" + exc.nested()->displayText() + ")" : "")); } catch (const std::exception& exc) { LOG_ERR("Session::handleInput: Exception while handling [" << - getAbbreviatedMessage(buffer, length) << "]: " << exc.what()); + getAbbreviatedMessage(data) << "]: " << exc.what()); } - return false; + return; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/common/Session.hpp b/common/Session.hpp index 26b5626..a96dc7c 100644 --- a/common/Session.hpp +++ b/common/Session.hpp @@ -28,9 +28,10 @@ #include "MessageQueue.hpp" #include "Message.hpp" #include "TileCache.hpp" +#include "WebSocketHandler.hpp" /// Base class of a LOOLWebSocket session. -class Session +class Session : public WebSocketHandler { public: const std::string& getId() const { return _id; } @@ -44,7 +45,7 @@ public: return sendTextFrame(text.data(), text.size()); } - bool handleInput(const char* buffer, int length); + virtual void handleMessage(bool fin, WSOpCode code, std::vector<char> &data) override; /// Invoked when we want to disconnect a session. virtual void disconnect(); @@ -68,10 +69,15 @@ public: void closeFrame() { _isCloseFrame = true; }; bool isCloseFrame() const { return _isCloseFrame; } - bool isHeadless() const { return _ws == nullptr; } + bool isHeadless() const + { + // TODO loolnb here we should return true when the socket was not + // upgraded yet + return false; + } protected: - Session(const std::string& name, const std::string& id, const std::shared_ptr<LOOLWebSocket>& ws); + Session(const std::string& name, const std::string& id); virtual ~Session(); /// Parses the options of the "load" command, shared between MasterProcessSession::loadDocument() and ChildProcessSession::loadDocument(). @@ -98,10 +104,6 @@ private: /// A readable name that identifies our peer and ID. const std::string _name; - // In the master process, the websocket to the LOOL client or the jailed child process. In a - // jailed process, the websocket to the parent. - std::shared_ptr<LOOLWebSocket> _ws; - /// True if we have been disconnected. std::atomic<bool> _disconnected; /// True if the user is active, otherwise false (switched tabs). diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp index 8c6942e..1cb8627 100644 --- a/kit/ChildSession.cpp +++ b/kit/ChildSession.cpp @@ -37,7 +37,7 @@ std::recursive_mutex ChildSession::Mutex; ChildSession::ChildSession(const std::string& id, const std::string& jailId, IDocumentManager& docManager) : - Session("ToMaster-" + id, id, nullptr), + Session("ToMaster-" + id, id), _jailId(jailId), _docManager(docManager), _viewId(-1), diff --git a/kit/Kit.cpp b/kit/Kit.cpp index fbbb030..a190669 100644 --- a/kit/Kit.cpp +++ b/kit/Kit.cpp @@ -77,7 +77,6 @@ using Poco::File; using Poco::JSON::Array; using Poco::JSON::Object; using Poco::JSON::Parser; -using Poco::Net::Socket; using Poco::Net::WebSocket; using Poco::Runnable; using Poco::StringTokenizer; @@ -774,7 +773,7 @@ public: { try { - if (!_ws || _ws->poll(Poco::Timespan(0), Socket::SelectMode::SELECT_ERROR)) + if (!_ws || _ws->poll(Poco::Timespan(0), Poco::Net::Socket::SelectMode::SELECT_ERROR)) { LOG_ERR("Child Doc: Bad socket while sending [" << getAbbreviatedMessage(message) << "]."); return false; @@ -1288,7 +1287,12 @@ private: lock.unlock(); if (session) { - return session->handleInput(data, size); + std::vector<char> vect(size); + vect.assign(data, data + size); + + // TODO loolnb - this is probably wrong... + session->handleMessage(/* fin = */ false, WebSocketHandler::WSOpCode::Binary, vect); + return true; } } diff --git a/test/Makefile.am b/test/Makefile.am index 7efa3f1..167c436 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -10,7 +10,7 @@ check_PROGRAMS = test noinst_PROGRAMS = test unittest AM_CXXFLAGS = $(CPPUNIT_CFLAGS) -DTDOC=\"$(top_srcdir)/test/data\" \ - -I${top_srcdir}/common -I${top_srcdir}/wsd -I${top_srcdir}/kit + -I${top_srcdir}/common -I${top_srcdir}/net -I${top_srcdir}/wsd -I${top_srcdir}/kit noinst_LTLIBRARIES = \ unit-timeout.la unit-prefork.la \ @@ -36,6 +36,7 @@ wsd_sources = \ ../common/Protocol.cpp \ ../common/Session.cpp \ ../common/MessageQueue.cpp \ + ../net/WebSocketHandler.cpp \ ../kit/Kit.cpp \ ../wsd/TileCache.cpp \ ../common/Unit.cpp \ diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index deb4680..140ea77 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -28,11 +28,10 @@ using Poco::Path; using Poco::StringTokenizer; ClientSession::ClientSession(const std::string& id, - const std::shared_ptr<LOOLWebSocket>& ws, const std::shared_ptr<DocumentBroker>& docBroker, const Poco::URI& uriPublic, const bool readOnly) : - Session("ToClient-" + id, id, ws), + Session("ToClient-" + id, id), _docBroker(docBroker), _uriPublic(uriPublic), _isReadOnly(readOnly), diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp index a6efb50..b2ecc8a 100644 --- a/wsd/ClientSession.hpp +++ b/wsd/ClientSession.hpp @@ -24,7 +24,6 @@ class ClientSession final : public Session, public std::enable_shared_from_this< { public: ClientSession(const std::string& id, - const std::shared_ptr<LOOLWebSocket>& ws, const std::shared_ptr<DocumentBroker>& docBroker, const Poco::URI& uriPublic, const bool isReadOnly = false); diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 0225f46..0f67e81 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -1046,7 +1046,10 @@ bool DocumentBroker::forwardToClient(const std::shared_ptr<Message>& payload) // Broadcast to all. for (const auto& pair : _sessions) { +#if 0 // loolnb if (!pair.second->isHeadless() && !pair.second->isCloseFrame()) +#endif + if (!pair.second->isHeadless()) { pair.second->handleKitToClientMessage(data, size); } diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 77d6329..d376f09 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -106,7 +106,7 @@ #include "IoUtil.hpp" #include "Log.hpp" #include "Protocol.hpp" -#include "QueueHandler.hpp" +#include "ServerSocket.hpp" #include "Session.hpp" #include "Storage.hpp" #include "TraceFile.hpp" @@ -114,8 +114,8 @@ #include "UnitHTTP.hpp" #include "UserMessages.hpp" #include "Util.hpp" -#include "common/FileUtil.hpp" -#include <LOOLWebSocket.hpp> +#include "FileUtil.hpp" +#include "LOOLWebSocket.hpp" #ifdef KIT_IN_PROCESS #include <Kit.hpp> @@ -145,9 +145,7 @@ using Poco::Net::MessageHeader; using Poco::Net::NameValueCollection; using Poco::Net::PartHandler; using Poco::Net::SecureServerSocket; -using Poco::Net::ServerSocket; using Poco::Net::SocketAddress; -using Poco::Net::StreamSocket; using Poco::Net::WebSocket; using Poco::Path; using Poco::Pipe; @@ -1592,7 +1590,7 @@ public: namespace { -inline ServerSocket* getServerSocket(int portNumber, bool reuseDetails) +inline Poco::Net::ServerSocket* getServerSocket(int portNumber, bool reuseDetails) { try { @@ -1629,7 +1627,7 @@ inline ServerSocket* getServerSocket(int portNumber, bool reuseDetails) try { LOG_INF("Trying first to connect to an existing loolwsd at the same port " << portNumber); - StreamSocket s(SocketAddress("127.0.0.1:" + std::to_string(portNumber))); + Poco::Net::StreamSocket s(SocketAddress("127.0.0.1:" + std::to_string(portNumber))); LOG_FTL("Connection succeeded, so we can't continue"); return nullptr; } @@ -1639,12 +1637,12 @@ inline ServerSocket* getServerSocket(int portNumber, bool reuseDetails) } } - ServerSocket* socket = LOOLWSD::isSSLEnabled() ? new SecureServerSocket() : new ServerSocket(); + Poco::Net::ServerSocket* socket = LOOLWSD::isSSLEnabled() ? new SecureServerSocket() : new Poco::Net::ServerSocket(); Poco::Net::IPAddress wildcardAddr; SocketAddress address(wildcardAddr, portNumber); socket->bind(address, reuseDetails); // 64 is the default value for the backlog parameter in Poco - // when creating a ServerSocket, so use it here, too. + // when creating a Poco::Net::ServerSocket, so use it here, too. socket->listen(64); return socket; } @@ -1655,9 +1653,9 @@ inline ServerSocket* getServerSocket(int portNumber, bool reuseDetails) } } -inline ServerSocket* findFreeServerPort(int& portNumber) +inline Poco::Net::ServerSocket* findFreeServerPort(int& portNumber) { - ServerSocket* socket = nullptr; + Poco::Net::ServerSocket* socket = nullptr; while (!socket) { socket = getServerSocket(portNumber, false); @@ -1670,12 +1668,12 @@ inline ServerSocket* findFreeServerPort(int& portNumber) return socket; } -inline ServerSocket* getMasterSocket(int portNumber) +inline Poco::Net::ServerSocket* getMasterSocket(int portNumber) { try { SocketAddress addr2("127.0.0.1", portNumber); - return new ServerSocket(addr2); + return new Poco::Net::ServerSocket(addr2); } catch (const Exception& exc) { @@ -1684,9 +1682,9 @@ inline ServerSocket* getMasterSocket(int portNumber) } } -inline ServerSocket* findFreeMasterPort(int &portNumber) +inline Poco::Net::ServerSocket* findFreeMasterPort(int &portNumber) { - ServerSocket* socket = nullptr; + Poco::Net::ServerSocket* socket = nullptr; while (!socket) { socket = getServerSocket(portNumber, false); @@ -2364,6 +2362,129 @@ bool LOOLWSD::createForKit() std::mutex Connection::Mutex; #endif +// TODO loolnb FIXME +static const std::string HARDCODED_PATH("file:///local/libreoffice/online/test/data/hello-world.odt"); + +class PlainSocketFactory : public SocketFactory +{ + std::shared_ptr<Socket> create(const int fd) override + { + // TODO FIXME loolnb - avoid the copy/paste between PlainSocketFactory + // and SslSocketFactory + // Request a kit process for this doc. + auto child = getNewChild(); + if (!child) + { + // Let the client know we can't serve now. + throw std::runtime_error("Failed to spawn lokit child."); + } + + Poco::URI uri(HARDCODED_PATH); + std::shared_ptr<DocumentBroker> docBroker = std::make_shared<DocumentBroker>(HARDCODED_PATH, uri, HARDCODED_PATH, LOOLWSD::ChildRoot, child); + return std::make_shared<StreamSocket>(fd, new ClientSession("hardcoded", docBroker, uri)); + } +}; + +class SslSocketFactory : public SocketFactory +{ + std::shared_ptr<Socket> create(const int fd) override + { + // TODO FIXME loolnb - avoid the copy/paste between PlainSocketFactory + // and SslSocketFactory + // Request a kit process for this doc. + auto child = getNewChild(); + if (!child) + { + // Let the client know we can't serve now. + throw std::runtime_error("Failed to spawn lokit child."); + } + + Poco::URI uri(HARDCODED_PATH); + std::shared_ptr<DocumentBroker> docBroker = std::make_shared<DocumentBroker>(HARDCODED_PATH, uri, HARDCODED_PATH, LOOLWSD::ChildRoot, child); + return std::make_shared<StreamSocket>(fd, new ClientSession("hardcoded", docBroker, uri)); + } +}; + +/// The main server thread. +/// +/// Waits for the connections from the loleaflets, and creates the +/// websockethandlers accordingly. +class LOOLWSDServer +{ + LOOLWSDServer(LOOLWSDServer&& other) = delete; + const LOOLWSDServer& operator=(LOOLWSDServer&& other) = delete; + +public: + LOOLWSDServer() + : _stop(false) + { + } + + ~LOOLWSDServer() + { + stop(); + if (_serverThread.joinable()) + _serverThread.join(); + } + + void start(const Poco::Net::SocketAddress& addr) + { + std::shared_ptr<ServerSocket> serverSocket = std::make_shared<ServerSocket>(_documentPoll, + LOOLWSD::isSSLEnabled()? std::unique_ptr<SocketFactory>{new SslSocketFactory()}: + std::unique_ptr<SocketFactory>{new PlainSocketFactory()}); + + if (!serverSocket->bind(addr)) + { + const std::string msg = "Failed to bind. (errno: "; + throw std::runtime_error(msg + std::strerror(errno) + ")"); + } + + if (!serverSocket->listen()) + { + const std::string msg = "Failed to listen. (errno: "; + throw std::runtime_error(msg + std::strerror(errno) + ")"); + } + + _serverPoll.insertNewSocket(serverSocket); + + _serverThread = std::thread(runServer, std::ref(_stop), std::ref(_serverPoll)); + + // TODO loolnb - we need a documentThread per document + _documentThread = std::thread(runDocument, std::ref(_stop), std::ref(_documentPoll)); + } + + void stop() + { + _stop = true; + } + +private: + std::atomic<bool> _stop; + + SocketPoll _serverPoll; + std::thread _serverThread; + + // TODO loolnb - we need a documentThread per document + SocketPoll _documentPoll; + std::thread _documentThread; + + static void runServer(std::atomic<bool>& stop, SocketPoll& serverPoll) { + LOG_INF("Starting master server thread."); + while (!stop) + { + serverPoll.poll(30000); + } + } + + static void runDocument(std::atomic<bool>& stop, SocketPoll& documentPoll) { + LOG_INF("Starting document thread."); + while (!stop) + { + documentPoll.poll(5000); + } + } +}; + int LOOLWSD::main(const std::vector<std::string>& /*args*/) { #ifndef FUZZER @@ -2461,7 +2582,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) // Start internal server for child processes. SocketAddress addr2("127.0.0.1", MasterPortNumber); - std::unique_ptr<ServerSocket> psvs2( + std::unique_ptr<Poco::Net::ServerSocket> psvs2( UnitWSD::isUnitTesting() ? findFreeMasterPort(MasterPortNumber) : getMasterSocket(MasterPortNumber)); @@ -2485,7 +2606,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) #if 0 // loolnb // Now we can serve clients; Start listening on the public port. - std::unique_ptr<ServerSocket> psvs( + std::unique_ptr<Poco::Net::ServerSocket> psvs( UnitWSD::isUnitTesting() ? findFreeServerPort(ClientPortNumber) : getServerSocket(ClientPortNumber, true)); @@ -2501,6 +2622,11 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) srv.start(); #endif + LOOLWSDServer srv; + // TODO loolnb + SocketAddress addr("127.0.0.1", ClientPortNumber); + srv.start(addr); + #if ENABLE_DEBUG time_t startTimeSpan = time(nullptr); #endif @@ -2588,9 +2714,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) SigUtil::isShuttingDown() << ", TerminationFlag: " << TerminationFlag); // Wait until documents are saved and sessions closed. -#if 0 // loolnb srv.stop(); -#endif srv2.stop(); threadPool.joinAll(); commit f2025558a296323bf91f37294d73a94427982574 Author: Jan Holesovsky <[email protected]> Date: Fri Feb 24 14:19:21 2017 +0100 nb: Comment out the POCO server in loolwsd. Change-Id: Ie4f276a6f1c8f3d132b23bb2111466b38f4fb581 diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index e572cbf..77d6329 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -590,6 +590,7 @@ public: } }; +#if 0 // loolnb /// Handle a public connection from a client. class ClientRequestHandler : public HTTPRequestHandler { @@ -1450,6 +1451,7 @@ public: LOG_DBG("Thread finished."); } }; +#endif /// Handler of announcements that a new loolkit process was created. /// @@ -1510,6 +1512,7 @@ public: } }; +#if 0 // loolnb /// External (client) connection handler factory. /// Creates handler objects. class ClientRequestHandlerFactory : public HTTPRequestHandlerFactory @@ -1560,6 +1563,7 @@ public: return requestHandler; } }; +#endif /// Internal (prisoner) connection handler factory. /// Creates handler objects. @@ -2438,8 +2442,10 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) static_assert(MAX_CONNECTIONS >= 3, "MAX_CONNECTIONS must be at least 3"); const auto maxThreadCount = MAX_CONNECTIONS * 5; +#if 0 // loolnb auto params1 = new HTTPServerParams(); params1->setMaxThreads(maxThreadCount); +#endif auto params2 = new HTTPServerParams(); params2->setMaxThreads(maxThreadCount); @@ -2477,6 +2483,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) return Application::EXIT_SOFTWARE; } +#if 0 // loolnb // Now we can serve clients; Start listening on the public port. std::unique_ptr<ServerSocket> psvs( UnitWSD::isUnitTesting() ? @@ -2492,6 +2499,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) HTTPServer srv(new ClientRequestHandlerFactory(), threadPool, *psvs, params1); LOG_INF("Starting master server listening on " << ClientPortNumber); srv.start(); +#endif #if ENABLE_DEBUG time_t startTimeSpan = time(nullptr); @@ -2580,7 +2588,9 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) SigUtil::isShuttingDown() << ", TerminationFlag: " << TerminationFlag); // Wait until documents are saved and sessions closed. +#if 0 // loolnb srv.stop(); +#endif srv2.stop(); threadPool.joinAll(); @@ -2659,7 +2669,9 @@ void UnitWSD::testHandleRequest(TestRequest type, UnitHTTPServerRequest& request switch (type) { case TestRequest::Client: +#if 0 // loolnb ClientRequestHandler::handleClientRequest(request, response, LOOLWSD::GenSessionId()); +#endif break; case TestRequest::Prisoner: PrisonerRequestHandler::handlePrisonerRequest(request, response); commit 16ffd218d5b525b931dddd74d979adbe5ecf16f7 Author: Jan Holesovsky <[email protected]> Date: Fri Feb 24 13:00:04 2017 +0100 Clarify the PrisonerRequestHandler documentation. Change-Id: Ie3750b17ce4f2d99b80f39f3c0e1374f3e9c1a5a diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 9b475e6..e572cbf 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -1451,7 +1451,12 @@ public: } }; -/// Handle requests from prisoners (internal). +/// Handler of announcements that a new loolkit process was created. +/// +/// loolforkit is creating the loolkit processes. That happens +/// completely assynchronously, and from the different process (loolforkit), +/// so this handler is listening for annoucements that a new loolkit process +/// has been created. class PrisonerRequestHandler : public HTTPRequestHandler { public: _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
