loolwsd/LOOLKit.cpp |   14 +++++++++++---
 loolwsd/LOOLWSD.cpp |   12 +++++++++---
 2 files changed, 20 insertions(+), 6 deletions(-)

New commits:
commit 8ef45a975e1ef950d4e754e43b82cda78f917847
Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk>
Date:   Sat Mar 12 18:12:40 2016 -0500

    loolwsd: child URI now includes docKey
    
    Change-Id: I62b91fee98fd853c84c3c5cbb48e65e5c9788ef0
    Reviewed-on: https://gerrit.libreoffice.org/23215
    Reviewed-by: Ashod Nakashian <ashnak...@gmail.com>
    Tested-by: Ashod Nakashian <ashnak...@gmail.com>

diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 4fb6141..33aebe1 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -39,6 +39,7 @@
 #include <Poco/Thread.h>
 #include <Poco/ThreadLocal.h>
 #include <Poco/Util/Application.h>
+#include <Poco/URI.h>
 
 #define LOK_USE_UNSTABLE_API
 #include <LibreOfficeKit/LibreOfficeKitInit.h>
@@ -310,10 +311,12 @@ public:
 
     Document(LibreOfficeKit *loKit,
              const std::string& jailId,
+             const std::string& docKey,
              const std::string& url)
       : _multiView(std::getenv("LOK_VIEW_CALLBACK")),
         _loKit(loKit),
         _jailId(jailId),
+        _docKey(docKey),
         _url(url),
         _loKitDocument(nullptr),
         _docPassword(""),
@@ -404,7 +407,7 @@ public:
 
         HTTPClientSession cs("127.0.0.1", MASTER_PORT_NUMBER);
         cs.setTimeout(0);
-        HTTPRequest request(HTTPRequest::HTTP_GET, CHILD_URI + "sessionId=" + 
sessionId + "&jailId=" + _jailId);
+        HTTPRequest request(HTTPRequest::HTTP_GET, CHILD_URI + "sessionId=" + 
sessionId + "&jailId=" + _jailId + "&docKey=" + _docKey);
         HTTPResponse response;
 
         auto ws = std::make_shared<WebSocket>(cs, request, response);
@@ -734,6 +737,7 @@ private:
     const bool _multiView;
     LibreOfficeKit *_loKit;
     const std::string _jailId;
+    const std::string _docKey;
     const std::string _url;
     std::string _jailedUrl;
 
@@ -1007,12 +1011,16 @@ void lokit_main(const std::string& childRoot,
                     {
                         const std::string& sessionId = tokens[1];
                         const unsigned intSessionId = 
Util::decodeId(sessionId);
-                        const std::string& url = tokens[2];
+                        const std::string& docKey = tokens[2];
 
+                        std::string url;
+                        Poco::URI::decode(docKey, url);
                         Log::debug("Thread request for session [" + sessionId 
+ "], url: [" + url + "].");
                         auto it = _documents.lower_bound(url);
                         if (it == _documents.end())
-                            it = _documents.emplace_hint(it, url, 
std::make_shared<Document>(loKit, jailId, url));
+                        {
+                            it = _documents.emplace_hint(it, url, 
std::make_shared<Document>(loKit, jailId, docKey, url));
+                        }
 
                         it->second->createSession(sessionId, intSessionId);
                         isUsedKit = true;
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 1e833d9..b295bb6 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -506,7 +506,8 @@ private:
         // Log::info("Cookie: " + cookies.get("PHPSESSID", ""));
 
         const auto uri = DocumentStoreManager::getUri(request.getURI());
-        const auto docKey = uri.getPath();
+        std::string docKey;
+        Poco::URI::encode(uri.getPath(), "", docKey);
 
         // Request a kit process for this doc.
         const std::string aMessage = "request " + id + " " + docKey + "\r\n";
@@ -609,6 +610,7 @@ public:
             const auto params = 
Poco::URI(request.getURI()).getQueryParameters();
             std::string sessionId;
             std::string jailId;
+            std::string docKey;
             for (const auto& param : params)
             {
                 if (param.first == "sessionId")
@@ -619,16 +621,20 @@ public:
                 {
                     jailId = param.second;
                 }
+                else if (param.first == "docKey")
+                {
+                    docKey = param.second;
+                }
             }
 
-            Log::debug("Child socket for SessionId: " + sessionId + ", jailId: 
" + jailId + " connected.");
-
             thread_name += sessionId;
             if (prctl(PR_SET_NAME, reinterpret_cast<unsigned 
long>(thread_name.c_str()), 0, 0, 0) != 0)
                 Log::error("Cannot set thread name to " + thread_name + ".");
 
             Log::debug("Thread [" + thread_name + "] started.");
 
+            Log::debug("Child socket for SessionId: " + sessionId + ", jailId: 
" + jailId +
+                       ", docKey: " + docKey + " connected.");
             auto ws = std::make_shared<WebSocket>(request, response);
             auto session = std::make_shared<MasterProcessSession>(sessionId, 
LOOLSession::Kind::ToPrisoner, ws, nullptr);
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to