loolwsd/ChildProcessSession.cpp | 13 ++++++++++++- loolwsd/LOOLBroker.cpp | 8 +++++--- loolwsd/LOOLKit.cpp | 1 + loolwsd/LOOLWSD.cpp | 19 +++++++++---------- loolwsd/MasterProcessSession.cpp | 21 +++++++++++---------- 5 files changed, 38 insertions(+), 24 deletions(-)
New commits: commit 7053091c0e8652ba08dc28b9648b8c2f7290d704 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Fri Dec 25 12:35:23 2015 -0500 loolwsd: support for views Change-Id: I9447d97612589efd0e85e30977b80ab720b81702 Reviewed-on: https://gerrit.libreoffice.org/20945 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/ChildProcessSession.cpp b/loolwsd/ChildProcessSession.cpp index 2926437..2742fe0 100644 --- a/loolwsd/ChildProcessSession.cpp +++ b/loolwsd/ChildProcessSession.cpp @@ -243,13 +243,17 @@ bool ChildProcessSession::loadDocument(const char *buffer, int length, StringTok return false; } - Log::info("Loading URI: " + aUri.toString()); if (aUri.empty()) { sendTextFrame("error: cmd=load kind=uriempty"); return false; } + if (_loKitDocument == nullptr) + Log::info("Loading new document from URI: [" + aUri.toString() + "]."); + else + Log::info("Loading view to document from URI: [" + aUri.toString() + "]."); + // The URL in the request is the original one, not visible in the chroot jail. // The child process uses the fixed name jailDocumentURL. @@ -260,6 +264,11 @@ bool ChildProcessSession::loadDocument(const char *buffer, int length, StringTok aUri = URI( URI("file://"), Path(jailDocumentURL + Path::separator() + std::to_string(Process::id()), Path(aUri.getPath()).getFileName()).toString() ); + if (_loKitDocument != nullptr) + { + _viewId = _loKitDocument->pClass->createView(_loKitDocument); + } + else if ((_loKitDocument = _loKit->pClass->documentLoad(_loKit, aUri.toString().c_str())) == nullptr) { sendTextFrame("error: cmd=load kind=failed"); @@ -267,6 +276,8 @@ bool ChildProcessSession::loadDocument(const char *buffer, int length, StringTok return false; } + _loKitDocument->pClass->setView(_loKitDocument, _viewId); + std::string renderingOptions; if (!_docOptions.empty()) { diff --git a/loolwsd/LOOLBroker.cpp b/loolwsd/LOOLBroker.cpp index d2bc9fc..ea432b8 100644 --- a/loolwsd/LOOLBroker.cpp +++ b/loolwsd/LOOLBroker.cpp @@ -365,8 +365,10 @@ public: StringTokenizer tokens(aMessage, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); if (tokens[0] == "request" && tokens.count() == 3) { - std::string aTID = tokens[1]; - std::string aURL = tokens[2]; + const std::string aTID = tokens[1]; + const std::string aURL = tokens[2]; + + Log::info("Finding kit for URL [" + aURL + "] on thread [" + aTID + "]."); // check cache const auto aIterURL = _cacheURL.find(aURL); @@ -401,7 +403,7 @@ public: if ( _emptyURL.size() > 0 ) { const auto aItem = _emptyURL.front(); - Log::trace("No child found."); + Log::trace("No child found for URL [" + aURL + "]."); if (updateURL(aItem, aURL) < 0) { Log::error("New: Error update URL."); diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 9b0180e..b246e50 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -585,6 +585,7 @@ void run_lok_main(const std::string &loSubPath, Poco::UInt64 _childId, const std } // Destroy LibreOfficeKit + // TODO: destroyView for views. loKit->pClass->destroy(loKit); Log::info("Kit process " + std::to_string(Process::id()) + " finished OK. "); diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 2c9050c..5d57f1a 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -322,7 +322,7 @@ public: Log::error("Cannot set thread name."); #endif - if(!(request.find("Upgrade") != request.end() && Poco::icompare(request["Upgrade"], "websocket") == 0)) + if (!(request.find("Upgrade") != request.end() && Poco::icompare(request["Upgrade"], "websocket") == 0)) { StringTokenizer tokens(request.getURI(), "/?"); if (tokens.count() >= 2 && tokens[1] == "convert-to") @@ -341,7 +341,7 @@ public: LOOLSession::Kind kind = LOOLSession::Kind::ToClient; std::shared_ptr<MasterProcessSession> session(new MasterProcessSession(ws, kind)); const std::string filePrefix("file://"); - std::string load = "load url=" + filePrefix + fromPath; + const std::string load = "load url=" + filePrefix + fromPath; session->handleInput(load.data(), load.size()); // Convert it to the requested format. @@ -515,7 +515,7 @@ public: } } while (!LOOLWSD::isShutDown && - (!pollTimeout || (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE))); + (!pollTimeout || (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE))); queue.clear(); queue.put("eof"); @@ -555,18 +555,17 @@ public: HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request) override { - std::string line = (Util::logPrefix() + "Request from " + - request.clientAddress().toString() + ": " + - request.getMethod() + " " + - request.getURI() + " " + - request.getVersion()); + auto logger = Log::info(); + logger << "Request from " << request.clientAddress().toString() << ": " + << request.getMethod() << " " << request.getURI() << " " + << request.getVersion(); for (HTTPServerRequest::ConstIterator it = request.begin(); it != request.end(); ++it) { - line += " / " + it->first + ": " + it->second; + logger << " / " << it->first << ": " << it->second; } - Log::info(line); + logger << Log::end; return new RequestHandler(); } }; diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp index c9ab731..a5c0e14 100644 --- a/loolwsd/MasterProcessSession.cpp +++ b/loolwsd/MasterProcessSession.cpp @@ -232,6 +232,7 @@ bool MasterProcessSession::handleInput(const char *buffer, int length) // Message from child process to be forwarded to client. // I think we should never get here + Log::error("Unexpected request [" + tokens[0] + "]."); assert(false); } else if (tokens[0] == "load") @@ -374,7 +375,8 @@ bool MasterProcessSession::loadDocument(const char* /*buffer*/, int /*length*/, URI aUri(_docURL); // request new URL session - std::string aMessage = "request " + std::to_string(Thread::currentTid()) + " " + _docURL + "\r\n"; + const std::string aMessage = "request " + std::to_string(Thread::currentTid()) + " " + _docURL + "\r\n"; + Log::info("Sending to Broker: " + aMessage); Util::writeFIFO(LOOLWSD::writerBroker, aMessage.c_str(), aMessage.length()); } catch(Poco::SyntaxException&) @@ -551,7 +553,7 @@ void MasterProcessSession::dispatchChild() std::shared_ptr<MasterProcessSession> childSession; std::unique_lock<std::mutex> lock(_availableChildSessionMutex); - std::cout << Util::logPrefix() << "waiting for a child session permission for " << Thread::currentTid() << std::endl; + Log::debug() << "Waiting for a child session permission for thead [" << Thread::currentTid() << "]." << Log::end; while (nRequest-- && !bFound) { _availableChildSessionCV.wait_for( @@ -564,25 +566,25 @@ void MasterProcessSession::dispatchChild() if (!bFound) { - std::cout << Util::logPrefix() << "trying ..." << nRequest << std::endl; + Log::info() << "Retrying child permission... " << nRequest << Log::end; // request again new URL session - std::string aMessage = "request " + std::to_string(Thread::currentTid()) + " " + _docURL + "\r\n"; + const std::string aMessage = "request " + std::to_string(Thread::currentTid()) + " " + _docURL + "\r\n"; Util::writeFIFO(LOOLWSD::writerBroker, aMessage.c_str(), aMessage.length()); } } - if ( bFound ) + if (bFound) { - std::cout << Util::logPrefix() << "waiting child session permission, done!" << std::endl; + Log::debug("Waiting child session permission, done!"); childSession = _availableChildSessions[Thread::currentTid()]; _availableChildSessions.erase(Thread::currentTid()); } lock.unlock(); - if ( !nRequest && !bFound ) + if (!nRequest && !bFound) { - // it cannot get connected. shutdown. + Log::error("Failed to connect to child. Shutting down socket."); Util::shutdownWebSocket(*_ws); return; } @@ -595,7 +597,7 @@ void MasterProcessSession::dispatchChild() if (!aUri.empty() && aUri.getScheme() == "file") { - std::string aJailDoc = jailDocumentURL.substr(1) + Path::separator() + std::to_string(childSession->_pidChild); + const std::string aJailDoc = jailDocumentURL.substr(1) + Path::separator() + std::to_string(childSession->_pidChild); Path aSrcFile(aUri.getPath()); Path aDstFile(Path(getJailPath(childSession->_childId), aJailDoc), aSrcFile.getFileName()); Path aDstPath(getJailPath(childSession->_childId), aJailDoc); @@ -609,7 +611,6 @@ void MasterProcessSession::dispatchChild() { Log::error( "createDirectories(\"" + aDstPath.toString() + "\") failed: " + exc.displayText() ); - } // cleanup potential leftovers from the last time _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits