loolwsd/ClientSession.cpp | 36 ++++++++++++++++++++++++++++++------ loolwsd/ClientSession.hpp | 13 ++++--------- loolwsd/LOOLSession.hpp | 5 +++++ loolwsd/LOOLWSD.cpp | 2 +- loolwsd/MasterProcessSession.cpp | 29 ----------------------------- loolwsd/MasterProcessSession.hpp | 3 +-- loolwsd/PrisonerSession.cpp | 31 ++++++++++++++++++++++++++++++- loolwsd/PrisonerSession.hpp | 14 +++++--------- 8 files changed, 76 insertions(+), 57 deletions(-)
New commits: commit d1d5cff3e36ed50f251215d72f054101dfa72352 Author: Ashod Nakashian <[email protected]> Date: Mon May 16 22:48:33 2016 -0400 loolwsd: MasterProcessSession splitting: moved forwarding and shutdown Change-Id: I3c84d9be328e58263cac9c3b1b501ef91ea30170 Reviewed-on: https://gerrit.libreoffice.org/25048 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/loolwsd/ClientSession.cpp b/loolwsd/ClientSession.cpp index a1a6dca..c1f4023 100644 --- a/loolwsd/ClientSession.cpp +++ b/loolwsd/ClientSession.cpp @@ -37,7 +37,7 @@ ClientSession::ClientSession(const std::string& id, std::shared_ptr<Poco::Net::WebSocket> ws, std::shared_ptr<DocumentBroker> docBroker, std::shared_ptr<BasicTileQueue> queue) : - MasterProcessSession(id, Kind::ToClient, ws), + LOOLSession(id, Kind::ToClient, ws), _docBroker(docBroker), _queue(queue), _loadFailed(false), @@ -54,11 +54,6 @@ ClientSession::~ClientSession() _saveAsQueue.put(""); } -void ClientSession::setPeer(const std::shared_ptr<PrisonerSession>& peer) -{ - MasterProcessSession::_peer = _peer = peer; -} - bool ClientSession::_handleInput(const char *buffer, int length) { const std::string firstLine = getFirstLine(buffer, length); @@ -432,4 +427,33 @@ void ClientSession::dispatchChild() forwardToPeer(loadRequest.c_str(), loadRequest.size()); } +void ClientSession::forwardToPeer(const char *buffer, int length) +{ + const auto message = getAbbreviatedMessage(buffer, length); + + auto peer = _peer.lock(); + if (!peer) + { + throw Poco::ProtocolException(getName() + ": no peer to forward to: [" + message + "]."); + } + else if (peer->isCloseFrame()) + { + Log::trace(getName() + ": peer began the closing handshake. Dropping forward message [" + message + "]."); + return; + } + + Log::trace(getName() + " -> " + peer->getName() + ": " + message); + peer->sendBinaryFrame(buffer, length); +} + +bool ClientSession::shutdownPeer(Poco::UInt16 statusCode, const std::string& message) +{ + auto peer = _peer.lock(); + if (peer && !peer->isCloseFrame()) + { + peer->shutdown(statusCode, message); + } + return peer != nullptr; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/ClientSession.hpp b/loolwsd/ClientSession.hpp index 976b9c6..b884e72 100644 --- a/loolwsd/ClientSession.hpp +++ b/loolwsd/ClientSession.hpp @@ -21,7 +21,7 @@ class DocumentBroker; class PrisonerSession; -class ClientSession final : public MasterProcessSession, public std::enable_shared_from_this<ClientSession> +class ClientSession final : public LOOLSession, public std::enable_shared_from_this<ClientSession> { public: ClientSession(const std::string& id, @@ -35,7 +35,8 @@ public: void markEditLock(const bool value) { _bEditLock = value; } bool isEditLocked() const { return _bEditLock; } - void setPeer(const std::shared_ptr<PrisonerSession>& peer); + void setPeer(const std::shared_ptr<PrisonerSession>& peer) { _peer = peer; } + bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message); /** * Return the URL of the saved-as document when it's ready. If called @@ -81,6 +82,7 @@ private: void sendFontRendering(const char *buffer, int length, Poco::StringTokenizer& tokens); void dispatchChild(); + void forwardToPeer(const char *buffer, int length); private: @@ -101,13 +103,6 @@ private: /// Marks if document loading failed. bool _loadFailed; int _loadPart; - -#if 0 - bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message); - - private: - void forwardToPeer(const char *buffer, int length); -#endif }; #endif diff --git a/loolwsd/LOOLSession.hpp b/loolwsd/LOOLSession.hpp index 137a0d9..2e561f9 100644 --- a/loolwsd/LOOLSession.hpp +++ b/loolwsd/LOOLSession.hpp @@ -50,6 +50,11 @@ public: /// Called to handle disconnection command from socket. virtual bool handleDisconnect(); + void shutdown(Poco::UInt16 statusCode, const std::string& message) + { + _ws->shutdown(statusCode, message); + } + bool isActive() const { return _isActive; } void setIsActive(bool active) { _isActive = active; } diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 3e922b0..34da033 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -317,7 +317,7 @@ public: class ClientRequestHandler: public HTTPRequestHandler { private: - static void waitBridgeCompleted(const std::shared_ptr<MasterProcessSession>& session) + static void waitBridgeCompleted(const std::shared_ptr<ClientSession>& session) { bool isFound = false; std::unique_lock<std::mutex> lock(AvailableChildSessionMutex); diff --git a/loolwsd/MasterProcessSession.cpp b/loolwsd/MasterProcessSession.cpp index 84c7717..6f77822 100644 --- a/loolwsd/MasterProcessSession.cpp +++ b/loolwsd/MasterProcessSession.cpp @@ -43,33 +43,4 @@ MasterProcessSession::~MasterProcessSession() { } -void MasterProcessSession::forwardToPeer(const char *buffer, int length) -{ - const auto message = getAbbreviatedMessage(buffer, length); - - auto peer = _peer.lock(); - if (!peer) - { - throw Poco::ProtocolException(getName() + ": no peer to forward to: [" + message + "]."); - } - else if (peer->isCloseFrame()) - { - Log::trace(getName() + ": peer began the closing handshake. Dropping forward message [" + message + "]."); - return; - } - - Log::trace(getName() + " -> " + peer->getName() + ": " + message); - peer->sendBinaryFrame(buffer, length); -} - -bool MasterProcessSession::shutdownPeer(Poco::UInt16 statusCode, const std::string& message) -{ - auto peer = _peer.lock(); - if (peer && !peer->isCloseFrame()) - { - peer->_ws->shutdown(statusCode, message); - } - return peer != nullptr; -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/MasterProcessSession.hpp b/loolwsd/MasterProcessSession.hpp index bf860d9..e284c2e 100644 --- a/loolwsd/MasterProcessSession.hpp +++ b/loolwsd/MasterProcessSession.hpp @@ -26,11 +26,10 @@ class MasterProcessSession : public LOOLSession const Kind kind, std::shared_ptr<Poco::Net::WebSocket> ws); virtual ~MasterProcessSession(); - + private: bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message); protected: - void dispatchChild(); void forwardToPeer(const char *buffer, int length); // If _kind==ToPrisoner and the child process has started and completed its handshake with the diff --git a/loolwsd/PrisonerSession.cpp b/loolwsd/PrisonerSession.cpp index 30e0f23..f7388a4 100644 --- a/loolwsd/PrisonerSession.cpp +++ b/loolwsd/PrisonerSession.cpp @@ -36,7 +36,7 @@ using Poco::StringTokenizer; PrisonerSession::PrisonerSession(const std::string& id, std::shared_ptr<Poco::Net::WebSocket> ws, std::shared_ptr<DocumentBroker> docBroker) : - MasterProcessSession(id, Kind::ToPrisoner, ws), + LOOLSession(id, Kind::ToPrisoner, ws), _docBroker(docBroker), _curPart(0) { @@ -223,4 +223,33 @@ bool PrisonerSession::_handleInput(const char *buffer, int length) return true; } +void PrisonerSession::forwardToPeer(const char *buffer, int length) +{ + const auto message = getAbbreviatedMessage(buffer, length); + + auto peer = _peer.lock(); + if (!peer) + { + throw Poco::ProtocolException(getName() + ": no peer to forward to: [" + message + "]."); + } + else if (peer->isCloseFrame()) + { + Log::trace(getName() + ": peer began the closing handshake. Dropping forward message [" + message + "]."); + return; + } + + Log::trace(getName() + " -> " + peer->getName() + ": " + message); + peer->sendBinaryFrame(buffer, length); +} + +bool PrisonerSession::shutdownPeer(Poco::UInt16 statusCode, const std::string& message) +{ + auto peer = _peer.lock(); + if (peer && !peer->isCloseFrame()) + { + peer->shutdown(statusCode, message); + } + return peer != nullptr; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/PrisonerSession.hpp b/loolwsd/PrisonerSession.hpp index 553d204..e0beb87 100644 --- a/loolwsd/PrisonerSession.hpp +++ b/loolwsd/PrisonerSession.hpp @@ -21,7 +21,7 @@ class DocumentBroker; class ClientSession; -class PrisonerSession final : public MasterProcessSession, public std::enable_shared_from_this<PrisonerSession> +class PrisonerSession final : public LOOLSession, public std::enable_shared_from_this<PrisonerSession> { public: PrisonerSession(const std::string& id, @@ -30,24 +30,20 @@ public: virtual ~PrisonerSession(); - void setPeer(const std::shared_ptr<ClientSession>& peer) { MasterProcessSession::_peer = _peer = peer; } + void setPeer(const std::shared_ptr<ClientSession>& peer) { _peer = peer; } + bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message); private: virtual bool _handleInput(const char *buffer, int length) override; + void forwardToPeer(const char *buffer, int length); + private: std::shared_ptr<DocumentBroker> _docBroker; std::weak_ptr<ClientSession> _peer; int _curPart; - -#if 0 - bool shutdownPeer(Poco::UInt16 statusCode, const std::string& message); - - private: - void forwardToPeer(const char *buffer, int length); -#endif }; #endif _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
