[Libreoffice-commits] online.git: 3 commits - loleaflet/dist loleaflet/src loolwsd/.gitignore loolwsd/LOOLWSD.cpp loolwsd/protocol.txt loolwsd/test loolwsd/UserMessages.hpp

Henry Castro hcastro at collabora.com
Sat Oct 1 15:37:16 UTC 2016


 loleaflet/dist/errormessages.js         |    1 +
 loleaflet/src/control/Control.Dialog.js |    3 ++-
 loleaflet/src/core/Socket.js            |   11 +++++++++++
 loolwsd/.gitignore                      |    1 +
 loolwsd/LOOLWSD.cpp                     |   20 ++++++--------------
 loolwsd/UserMessages.hpp                |    4 ++--
 loolwsd/protocol.txt                    |    2 +-
 loolwsd/test/httpwserror.cpp            |    8 ++++----
 8 files changed, 28 insertions(+), 22 deletions(-)

New commits:
commit 97fa8e45f9f5648866fe03dfafac57e4986c9bfd
Author: Henry Castro <hcastro at collabora.com>
Date:   Sat Oct 1 11:12:47 2016 -0400

    loleaflet: fix error message localization

diff --git a/loleaflet/dist/errormessages.js b/loleaflet/dist/errormessages.js
index dc99714..625f017 100644
--- a/loleaflet/dist/errormessages.js
+++ b/loleaflet/dist/errormessages.js
@@ -1,3 +1,4 @@
 exports.wrongwopisrc = _('Wrong WOPISrc, usage: WOPISrc=valid encoded URI, or file_path, usage: file_path=/path/to/doc/');
 exports.emptyhosturl = _('The host URL is empty. The loolwsd server is probably misconfigured, please contact the administrator.');
 exports.diskfull = _('No disk space left on server, please contact the server administrator to continue.');
+exports.limitreached = _('This development build is limited to %0 documents, and %1 connections - to avoid the impression that it is suitable for deployment in large enterprises. To find out more about deploying and scaling %2 checkout: <br/><a href=\"%3\">%3</a>.');
diff --git a/loleaflet/src/control/Control.Dialog.js b/loleaflet/src/control/Control.Dialog.js
index 9417a8b..41836ae 100644
--- a/loleaflet/src/control/Control.Dialog.js
+++ b/loleaflet/src/control/Control.Dialog.js
@@ -10,7 +10,8 @@ L.Control.Dialog = L.Control.extend({
 	},
 
 	_onError: function (e) {
-		if (vex.dialogID > 0) {
+		if (vex.dialogID > 0 && !this._map._fatal) {
+			// TODO. queue message errors and pop-up dialogs
 			// Close other dialogs before presenting a new one.
 			vex.close(vex.dialogID);
 		}
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 0ce132c..c4bb43f 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -201,6 +201,14 @@ L.Socket = L.Class.extend({
 		}
 		else if (textMsg.startsWith('error:') && !this._map._docLayer) {
 			textMsg = textMsg.substring(6);
+			if (command.errorKind === 'limitreached') {
+				this._map._fatal = true;
+				textMsg = errorMessages.limitreached;
+				textMsg = textMsg.replace(/%0/g, command.params[0]);
+				textMsg = textMsg.replace(/%1/g, command.params[1]);
+				textMsg = textMsg.replace(/%2/g, (typeof brandProductName !== 'undefined' ? brandProductName : 'LibreOffice Online'));
+				textMsg = textMsg.replace(/%3/g, (typeof brandProductURL !== 'undefined' ? brandProductURL : 'https://wiki.documentfoundation.org/Development/LibreOffice_Online'));
+			}
 			this._map.fire('error', {msg: textMsg});
 		}
 		else if (textMsg === 'pong' && this._map._docLayer && this._map._docLayer._debug) {
@@ -411,6 +419,9 @@ L.Socket = L.Class.extend({
 			else if (tokens[i].substring(0, 7) === 'viewid=') {
 				command.viewid = tokens[i].substring(7);
 			}
+			else if (tokens[i].substring(0, 7) === 'params=') {
+				command.params = tokens[i].substring(7).split(',');
+			}
 		}
 		if (command.tileWidth && command.tileHeight && this._map._docLayer) {
 			var defaultZoom = this._map.options.zoom;
commit 2a6a5eab2ea0fddb1eb2bd5c51cf453457e91b83
Author: Henry Castro <hcastro at collabora.com>
Date:   Sat Oct 1 08:45:08 2016 -0400

    loolwsd: error message is localizable

diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 1d0d519..a54378a 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -19,12 +19,6 @@
 /* Default document used in the start test URI */
 #define LOOLWSD_TEST_DOCUMENT_RELATIVE_PATH "test/data/hello-world.odt"
 
-/* PRODUCT */
-#define LOOLWSD_PRODUCT "LibreOffice Online"
-
-/* PRODUCT URL */
-#define LOOLWSD_URL "https://wiki.documentfoundation.org/Development/LibreOffice_Online"
-
 // This is the main source for the loolwsd program. LOOL uses several loolwsd processes: one main
 // parent process that listens on the TCP port and accepts connections from LOOL clients, and a
 // number of child processes, each which handles a viewing (editing) session for one document.
@@ -185,10 +179,8 @@ namespace {
 static inline
 void lcl_shutdownLimitReached(WebSocket& ws)
 {
-    const std::string msg = std::string("error: ") + Poco::format(PAYLOAD_UNAVALABLE_LIMIT_REACHED, MAX_DOCUMENTS, MAX_CONNECTIONS,
-        std::string(LOOLWSD_PRODUCT),
-        std::string(LOOLWSD_URL),
-        std::string(LOOLWSD_URL));
+    const std::string error = Poco::format(PAYLOAD_UNAVALABLE_LIMIT_REACHED, MAX_DOCUMENTS, MAX_CONNECTIONS);
+    const std::string close = Poco::format(SERVICE_UNAVALABLE_LIMIT_REACHED, static_cast<int>(WebSocket::WS_POLICY_VIOLATION));
 
     /* loleaflet sends loolclient, load and partrectangles message immediately
        after web socket handshake, so closing web socket fails loading page in
@@ -209,16 +201,16 @@ void lcl_shutdownLimitReached(WebSocket& ws)
             ws.receiveFrame(buffer.data(), buffer.capacity(), flags);
             if (--handshake == 0)
             {
-                ws.sendFrame(msg.data(), msg.size());
-                ws.shutdown(WebSocket::WS_ENDPOINT_GOING_AWAY, Poco::format(SERVICE_UNAVALABLE_LIMIT_REACHED, MAX_DOCUMENTS, MAX_CONNECTIONS));
+                ws.sendFrame(error.data(), error.size());
+                ws.shutdown(WebSocket::WS_POLICY_VIOLATION, close);
             }
         }
         while ((flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
     }
     catch (Exception& e)
     {
-        ws.sendFrame(msg.data(), msg.size());
-        ws.shutdown(WebSocket::WS_ENDPOINT_GOING_AWAY, Poco::format(SERVICE_UNAVALABLE_LIMIT_REACHED, MAX_DOCUMENTS, MAX_CONNECTIONS));
+        ws.sendFrame(error.data(), error.size());
+        ws.shutdown(WebSocket::WS_POLICY_VIOLATION, close);
     }
 }
 
diff --git a/loolwsd/UserMessages.hpp b/loolwsd/UserMessages.hpp
index 7aa7aa4..36e6ad3 100644
--- a/loolwsd/UserMessages.hpp
+++ b/loolwsd/UserMessages.hpp
@@ -15,8 +15,8 @@
 //NOTE: For whatever reason Poco seems to trim the first character.
 
 constexpr auto SERVICE_UNAVALABLE_INTERNAL_ERROR = " Service is unavailable. Please try again later and report to your administrator if the issue persists.";
-constexpr auto SERVICE_UNAVALABLE_LIMIT_REACHED = "This development build is limited to %d documents, and %d connections";
-constexpr auto PAYLOAD_UNAVALABLE_LIMIT_REACHED = "This development build is limited to %d documents, and %d connections - to avoid the impression that it is suitable for deployment in large enterprises. To find out more about deploying and scaling %s checkout: <br/><a href=\"%s\">%s</a>.";
+constexpr auto SERVICE_UNAVALABLE_LIMIT_REACHED = "error: cmd=socket kind=close code=%d";
+constexpr auto PAYLOAD_UNAVALABLE_LIMIT_REACHED = "error: cmd=socket kind=limitreached params=%d,%d";
 
 #endif
 
diff --git a/loolwsd/protocol.txt b/loolwsd/protocol.txt
index c22babf..65ad0a0 100644
--- a/loolwsd/protocol.txt
+++ b/loolwsd/protocol.txt
@@ -207,7 +207,7 @@ downloadas: jail=<jail directory> dir=<a tmp dir> name=<name> port=<port>
     The client should then request http://server:port/jail/dir/name in order to download
     the document
 
-error: cmd=<command> kind=<kind> [code=<error_code>]
+error: cmd=<command> kind=<kind> [code=<error_code>] [params=1,2,3,...,N]
 <freeErrorText>
 
     <command> is the command part of the corresponding client->server
diff --git a/loolwsd/test/httpwserror.cpp b/loolwsd/test/httpwserror.cpp
index a7f8385..8e7769d 100644
--- a/loolwsd/test/httpwserror.cpp
+++ b/loolwsd/test/httpwserror.cpp
@@ -102,8 +102,8 @@ void HTTPWSError::testMaxDocuments()
         sendTextFrame(socket, "load ");
         sendTextFrame(socket, "partpagerectangles ");
         statusCode = getErrorCode(socket, message);
-        CPPUNIT_ASSERT_EQUAL(static_cast<Poco::UInt16>(Poco::Net::WebSocket::WS_ENDPOINT_GOING_AWAY), statusCode);
-        CPPUNIT_ASSERT_MESSAGE("Wrong error message ", message.find("This development build") != std::string::npos);
+        CPPUNIT_ASSERT_EQUAL(static_cast<Poco::UInt16>(Poco::Net::WebSocket::WS_POLICY_VIOLATION), statusCode);
+        CPPUNIT_ASSERT_MESSAGE("Wrong error message ", message.find("error: cmd=socket kind=close") != std::string::npos);
     }
     catch (const Poco::Exception& exc)
     {
@@ -143,8 +143,8 @@ void HTTPWSError::testMaxConnections()
         sendTextFrame(socketN, "load ");
         sendTextFrame(socketN, "partpagerectangles ");
         statusCode = getErrorCode(*socketN, message);
-        CPPUNIT_ASSERT_EQUAL(static_cast<Poco::UInt16>(Poco::Net::WebSocket::WS_ENDPOINT_GOING_AWAY), statusCode);
-        CPPUNIT_ASSERT_MESSAGE("Wrong error message ", message.find("This development build") != std::string::npos);
+        CPPUNIT_ASSERT_EQUAL(static_cast<Poco::UInt16>(Poco::Net::WebSocket::WS_POLICY_VIOLATION), statusCode);
+        CPPUNIT_ASSERT_MESSAGE("Wrong error message ", message.find("error: cmd=socket kind=close") != std::string::npos);
     }
     catch (const Poco::Exception& exc)
     {
commit ef2a8ee99fe632274d00550bcc5fa47a6e32db9d
Author: Henry Castro <hcastro at collabora.com>
Date:   Sat Oct 1 11:19:20 2016 -0400

    loolwsd: .gitignore unittest

diff --git a/loolwsd/.gitignore b/loolwsd/.gitignore
index 4cdd66b..d98297b 100644
--- a/loolwsd/.gitignore
+++ b/loolwsd/.gitignore
@@ -55,3 +55,4 @@ looltool
 loolstress
 loolforkit-nocaps
 loadtest
+unittest


More information about the Libreoffice-commits mailing list