loolwsd/LOOLSession.cpp | 12 ++++++++---- loolwsd/LOOLWSD.cpp | 21 +++++++++++++++++---- 2 files changed, 25 insertions(+), 8 deletions(-)
New commits: commit cc18cc702f1de1dc2d133c81a0595f7ecf73517c Author: Miklos Vajna <[email protected]> Date: Mon Oct 19 16:03:16 2015 +0200 loolwsd: extraft filename from convert-to parameters diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 89bc579..b37c1b3 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -182,15 +182,27 @@ private: /// Handles the filename part of the convert-to POST request payload. class ConvertToPartHandler : public Poco::Net::PartHandler { + std::string& _filename; std::vector<char>& _buffer; public: - ConvertToPartHandler(std::vector<char>& buffer) - : _buffer(buffer) + ConvertToPartHandler(std::string& filename, std::vector<char>& buffer) + : _filename(filename), + _buffer(buffer) { } - virtual void handlePart(const Poco::Net::MessageHeader& /*header*/, std::istream& stream) override + virtual void handlePart(const Poco::Net::MessageHeader& header, std::istream& stream) override { + std::string disp; + Poco::Net::NameValueCollection params; + if (header.has("Content-Disposition")) + { + std::string cd = header.get("Content-Disposition"); + Poco::Net::MessageHeader::splitParameters(cd, disp, params); + } + if (params.has("filename")) + _filename = params.get("filename"); + char c; while (stream.get(c)) _buffer.push_back(c); @@ -223,8 +235,9 @@ public: StringTokenizer tokens(request.getURI(), "/?"); if (tokens.count() >= 2 && tokens[1] == "convert-to") { + std::string filename; std::vector<char> buffer; - ConvertToPartHandler handler(buffer); + ConvertToPartHandler handler(filename, buffer); Poco::Net::HTMLForm form(request, request.stream(), handler); std::string format; if (form.has("format")) commit f0ba09f3dda980f46bad9c63b0fef5b8078ea99a Author: Miklos Vajna <[email protected]> Date: Mon Oct 19 10:58:21 2015 +0200 LOOLSession: check for 0 _ws diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp index 3296139..1f1a2da 100644 --- a/loolwsd/LOOLSession.cpp +++ b/loolwsd/LOOLSession.cpp @@ -106,7 +106,8 @@ LOOLSession::LOOLSession(std::shared_ptr<WebSocket> ws, Kind kind) : LOOLSession::~LOOLSession() { std::cout << Util::logPrefix() << "LOOLSession dtor this=" << this << " " << _kind << std::endl; - Util::shutdownWebSocket(*_ws); + if (_ws) + Util::shutdownWebSocket(*_ws); } void LOOLSession::sendTextFrame(const std::string& text) @@ -123,10 +124,12 @@ void LOOLSession::sendBinaryFrame(const char *buffer, int length) if (length > 1000) { std::string nextmessage = "nextmessage: size=" + std::to_string(length); - _ws->sendFrame(nextmessage.data(), nextmessage.size()); + if (_ws) + _ws->sendFrame(nextmessage.data(), nextmessage.size()); } - _ws->sendFrame(buffer, length, WebSocket::FRAME_BINARY); + if (_ws) + _ws->sendFrame(buffer, length, WebSocket::FRAME_BINARY); } std::map<Process::PID, UInt64> MasterProcessSession::_childProcesses; @@ -149,7 +152,8 @@ MasterProcessSession::MasterProcessSession(std::shared_ptr<WebSocket> ws, Kind k MasterProcessSession::~MasterProcessSession() { std::cout << Util::logPrefix() << "MasterProcessSession dtor this=" << this << " _peer=" << _peer.lock().get() << std::endl; - Util::shutdownWebSocket(*_ws); + if (_ws) + Util::shutdownWebSocket(*_ws); auto peer = _peer.lock(); if (_kind == Kind::ToClient && peer) { _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
