[Libreoffice-commits] online.git: 2 commits - loolwsd/Admin.cpp loolwsd/DocumentBroker.cpp loolwsd/DocumentBroker.hpp loolwsd/Makefile.am loolwsd/Storage.hpp
Pranav Kant
pranavk at collabora.com
Wed Mar 23 16:48:53 UTC 2016
loolwsd/Admin.cpp | 3 +
loolwsd/DocumentBroker.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++++
loolwsd/DocumentBroker.hpp | 93 ++-------------------------------------
loolwsd/Makefile.am | 2
loolwsd/Storage.hpp | 1
5 files changed, 119 insertions(+), 87 deletions(-)
New commits:
commit 2f603139713181b41174a5d6803eae70733cd2a2
Author: Pranav Kant <pranavk at collabora.com>
Date: Wed Mar 23 19:51:53 2016 +0530
loolwsd: Cancel admin stats timer when thread finishes
Change-Id: I19d6a5368e650f0de93ee15b82c3549344a1d4b4
diff --git a/loolwsd/Admin.cpp b/loolwsd/Admin.cpp
index ca6052b..92a0dac 100644
--- a/loolwsd/Admin.cpp
+++ b/loolwsd/Admin.cpp
@@ -493,6 +493,9 @@ void Admin::run()
Util::pollPipeForReading(pollPipeNotify, FIFO_NOTIFY, NotifyPipe,
[this](std::string& message) { return handleInput(message); } );
+ _memStatsTimer.cancel();
+ _cpuStatsTimer.cancel();
+
Log::debug("Thread [" + thread_name + "] finished.");
}
commit cfac07e3a1702baf77f41b97af9f14390a363061
Author: Pranav Kant <pranavk at collabora.com>
Date: Wed Mar 23 18:11:18 2016 +0530
loolwsd: Split DocumentBroker to its header and impl file
Change-Id: I8219300e271892f9f8fdecd8b38d9ea445cb7199
diff --git a/loolwsd/DocumentBroker.cpp b/loolwsd/DocumentBroker.cpp
new file mode 100644
index 0000000..d3f3134
--- /dev/null
+++ b/loolwsd/DocumentBroker.cpp
@@ -0,0 +1,107 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <Poco/Path.h>
+
+#include "DocumentBroker.hpp"
+
+Poco::URI DocumentBroker::sanitizeURI(std::string uri)
+{
+ // The URI of the document should be url-encoded.
+ std::string decodedUri;
+ Poco::URI::decode(uri, decodedUri);
+ auto uriPublic = Poco::URI(decodedUri);
+
+ if (uriPublic.isRelative() || uriPublic.getScheme() == "file")
+ {
+ // TODO: Validate and limit access to local paths!
+ uriPublic.normalize();
+ }
+
+ if (uriPublic.getPath().empty())
+ {
+ throw std::runtime_error("Invalid URI.");
+ }
+
+ return uriPublic;
+}
+
+std::string DocumentBroker::getDocKey(const Poco::URI& uri)
+{
+ // Keep the host as part of the key to close a potential security hole.
+ std::string docKey;
+ Poco::URI::encode(uri.getHost() + uri.getPath(), "", docKey);
+ return docKey;
+}
+
+DocumentBroker::DocumentBroker(const Poco::URI& uriPublic,
+ const std::string& docKey,
+ const std::string& childRoot) :
+ _uriPublic(uriPublic),
+ _docKey(docKey),
+ _childRoot(childRoot),
+ _sessionsCount(0)
+{
+ assert(!_docKey.empty());
+ assert(!_childRoot.empty());
+ Log::info("DocumentBroker [" + _uriPublic.toString() + "] created. DocKey: [" + _docKey + "]");
+}
+
+void DocumentBroker::validate(const Poco::URI& uri)
+{
+ Log::info("Validating: " + uri.toString());
+ auto storage = createStorage("", "", uri);
+ storage->getFileInfo(uri);
+}
+
+bool DocumentBroker::load(const std::string& jailId)
+{
+ Log::debug("Loading from URI: " + _uriPublic.toString());
+
+ std::unique_lock<std::mutex> lock(_mutex);
+
+ if (_storage)
+ {
+ // Already loaded. Nothing to do.
+ return true;
+ }
+
+ _jailId = jailId;
+
+ // The URL is the publicly visible one, not visible in the chroot jail.
+ // We need to map it to a jailed path and copy the file there.
+
+ // user/doc/jailId
+ const auto jailPath = Poco::Path(JailedDocumentRoot, jailId);
+ const std::string jailRoot = getJailRoot();
+
+ Log::info("jailPath: " + jailPath.toString() + ", jailRoot: " + jailRoot);
+
+ _storage = createStorage(jailRoot, jailPath.toString(), _uriPublic);
+
+ const auto localPath = _storage->loadStorageFileToLocal();
+ _uriJailed = Poco::URI(Poco::URI("file://"), localPath);
+ return true;
+}
+
+bool DocumentBroker::save()
+{
+ Log::debug("Saving to URI: " + _uriPublic.toString());
+
+ assert(_storage);
+ return _storage->saveLocalFileToStorage();
+}
+
+std::string DocumentBroker::getJailRoot() const
+{
+ assert(!_jailId.empty());
+ return Poco::Path(_childRoot, _jailId).toString();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/loolwsd/DocumentBroker.hpp b/loolwsd/DocumentBroker.hpp
index 89087a0..efbd955 100644
--- a/loolwsd/DocumentBroker.hpp
+++ b/loolwsd/DocumentBroker.hpp
@@ -14,8 +14,6 @@
#include <mutex>
#include <string>
-#include <Poco/Path.h>
-
#include "Storage.hpp"
/// DocumentBroker is responsible for setting up a document
@@ -27,101 +25,28 @@ class DocumentBroker
public:
static
- Poco::URI sanitizeURI(std::string uri)
- {
- // The URI of the document should be url-encoded.
- std::string decodedUri;
- Poco::URI::decode(uri, decodedUri);
- auto uriPublic = Poco::URI(decodedUri);
-
- if (uriPublic.isRelative() || uriPublic.getScheme() == "file")
- {
- // TODO: Validate and limit access to local paths!
- uriPublic.normalize();
- }
-
- if (uriPublic.getPath().empty())
- {
- throw std::runtime_error("Invalid URI.");
- }
-
- return uriPublic;
- }
+ Poco::URI sanitizeURI(std::string uri);
/// Returns a document-specific key based
/// on the URI of the document.
static
- std::string getDocKey(const Poco::URI& uri)
- {
- // Keep the host as part of the key to close a potential security hole.
- std::string docKey;
- Poco::URI::encode(uri.getHost() + uri.getPath(), "", docKey);
- return docKey;
- }
+ std::string getDocKey(const Poco::URI& uri);
DocumentBroker(const Poco::URI& uriPublic,
const std::string& docKey,
- const std::string& childRoot) :
- _uriPublic(uriPublic),
- _docKey(docKey),
- _childRoot(childRoot),
- _sessionsCount(0)
- {
- assert(!_docKey.empty());
- assert(!_childRoot.empty());
- Log::info("DocumentBroker [" + _uriPublic.toString() + "] created. DocKey: [" + _docKey + "]");
- }
+ const std::string& childRoot);
~DocumentBroker()
{
Log::info("~DocumentBroker [" + _uriPublic.toString() + "] destroyed.");
}
- void validate(const Poco::URI& uri)
- {
- Log::info("Validating: " + uri.toString());
- auto storage = createStorage("", "", uri);
- storage->getFileInfo(uri);
- }
+ void validate(const Poco::URI& uri);
/// Loads a document from the public URI into the jail.
- bool load(const std::string& jailId)
- {
- Log::debug("Loading from URI: " + _uriPublic.toString());
-
- std::unique_lock<std::mutex> lock(_mutex);
-
- if (_storage)
- {
- // Already loaded. Nothing to do.
- return true;
- }
+ bool load(const std::string& jailId);
- _jailId = jailId;
-
- // The URL is the publicly visible one, not visible in the chroot jail.
- // We need to map it to a jailed path and copy the file there.
-
- // user/doc/jailId
- const auto jailPath = Poco::Path(JailedDocumentRoot, jailId);
- const std::string jailRoot = getJailRoot();
-
- Log::info("jailPath: " + jailPath.toString() + ", jailRoot: " + jailRoot);
-
- _storage = createStorage(jailRoot, jailPath.toString(), _uriPublic);
-
- const auto localPath = _storage->loadStorageFileToLocal();
- _uriJailed = Poco::URI(Poco::URI("file://"), localPath);
- return true;
- }
-
- bool save()
- {
- Log::debug("Saving to URI: " + _uriPublic.toString());
-
- assert(_storage);
- return _storage->saveLocalFileToStorage();
- }
+ bool save();
Poco::URI getPublicUri() const { return _uriPublic; }
Poco::URI getJailedUri() const { return _uriJailed; }
@@ -131,11 +56,7 @@ public:
unsigned incSessions() { return ++_sessionsCount; }
unsigned getSessionsCount() { return _sessionsCount; }
- std::string getJailRoot() const
- {
- assert(!_jailId.empty());
- return Poco::Path(_childRoot, _jailId).toString();
- }
+ std::string getJailRoot() const;
private:
const Poco::URI _uriPublic;
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index 2dec0ef..c498c45 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -12,7 +12,7 @@ AM_CTAGSFLAGS = $(AM_ETAGSFLAGS)
shared_sources = LOOLProtocol.cpp LOOLSession.cpp MessageQueue.cpp Util.cpp
-loolwsd_SOURCES = LOOLWSD.cpp ChildProcessSession.cpp MasterProcessSession.cpp TileCache.cpp Admin.cpp $(shared_sources)
+loolwsd_SOURCES = LOOLWSD.cpp ChildProcessSession.cpp MasterProcessSession.cpp TileCache.cpp Admin.cpp DocumentBroker.cpp $(shared_sources)
noinst_PROGRAMS = loadtest connect lokitclient
diff --git a/loolwsd/Storage.hpp b/loolwsd/Storage.hpp
index afe5408..dc0f2be 100644
--- a/loolwsd/Storage.hpp
+++ b/loolwsd/Storage.hpp
@@ -11,6 +11,7 @@
#ifndef INCLUDED_STORAGE_HPP
#define INCLUDED_STORAGE_HPP
+#include <cassert>
#include <string>
#include <fstream>
More information about the Libreoffice-commits
mailing list